我需要编写一个可以从互联网下载声音以供进一步使用的 Android 应用程序。
我应该在哪里存储这些声音?Sqlite 是一种选择吗?加载和播放这些文件的最佳方式是什么?
提前致谢。
3 回答
我建议将文件放在 SD 卡上(如果存在)。不过,需要注意的一件事是,您永远不应该对 SD 卡的路径进行硬编码。您可能希望按照以下方式做一些事情:
try {
//Create handle to SD card drectory
exportDirectory = new File(Environment.getExternalStorageDirectory() + "/MyDir");
//Verify export path exists. Create otherwise.
if (exportDirectory.exists() == false) {
if (exportDirectory.mkdirs() == false) {
//Directory structure could not be created.
//Message the user here
return false;
}
}
//Create handle to SD card file.
exportFile = new File(exportDirectory.getAbsolutePath() + "/whatever.mp3");
//Do whatever here
} catch(Exception e) {
//Exception. Message user and bail
return false;
}
从那里将您想要的任何数据传输到文件中是一件简单的事情。除非您计划存储大量额外信息,否则 SQLite 数据库对于此应用程序来说可能是多余的。也不能保证,除非您将文件作为 BLOB 直接存储到数据库中,否则用户不会在应用程序运行之间弄乱文件系统。但是,对于 MP3 等,曲目/艺术家类型信息可以通过 ID3 标签直接存储到文件中,而不是使用数据库。
至于播放文件,请参阅有关其音频 API 的 Android 文档。那里有很多很棒的信息,绝对比我在这里重复的要多。
我想说存储它们的最佳位置是作为您自己文件夹下的 sdcard 上的单个文件,即File("/sdcard/com.example.myapp/sound12345.mp3");
编辑:请参阅phobos51594 的答案,它比我的更完整。
最好将它们直接保存在文件系统上。为什么要将它存储在数据库中?是否有其他信息需要与它一起存储?(如标题、描述等)?如果没有,我会将其直接写入文件系统。
基本上,您可以将其保存到应用程序的数据文件夹中(共享首选项和 sqlite db 也存储在其中)。但是,我个人认为应该不鼓励这样做,因为它减少了 /data 分区上的可用内存(在 Android 手机上已经太小了。大多数手机的可用数据少于 50 MB(这意味着:少于 50 MB应用程序,不能部分移动到 SD 卡)。
如果可能,您应该始终在 SD 卡上保护此类罚款,因此您不会过多地降低数据分区上的可用空间。即使使用 Froyo 的 A2SD 功能,并非已安装应用程序的所有数据都移动到 SD 卡上。*.dex 文件(通常占应用程序总大小的 10-50%)仍保留在 /data 分区上。此应用程序使用的设置和 sqlite 数据库也是如此。因此,即使使用 A2SD,用户安装的应用程序越多,空间也会越来越小