我需要编写一个Android应用程序,可以从互联网上下载声音以供进一步使用。
我应该在哪里存储这些声音? Sqlite是一个选择吗?加载和播放这些文件的最佳方法是什么?
提前谢谢。
答案 0 :(得分:4)
我建议将文件放在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文档。那里有很多很棒的信息,绝对比我在这里重复的更多。
答案 1 :(得分:2)
我认为存储它们的最佳位置是在您自己的文件夹下的SD卡上的单个文件,即File("/sdcard/com.example.myapp/sound12345.mp3");
编辑:请参阅phobos51594's answer,它比我的更完整。
答案 2 :(得分:1)
最好将它们直接保存在文件系统上。为什么要将其存储在数据库中?您需要与其一起存储的其他信息吗? (如标题,描述等)?如果没有,我会直接将其写入文件系统。
基本上,您可以将其保存到应用程序的数据文件夹中(共享首选项和sqlite数据库也存储在其中)。但是,我个人认为这应该是不鼓励的,因为它减少了/ data分区上的可用memonry(在Android手机上已经太小了。大多数手机的数据免费不到50 MB(这意味着:小于50 MB)应用程序,无法部分移动到SD卡)。
如果可能的话,您应该始终在SD卡上安全罚款,这样就不会过多地降低数据分区的可用空间。即使使用Froyo的A2SD功能,并非所有已安装应用程序的数据都会在SD卡上移动。 * .dex文件(通常介于应用程序总大小的10-50%之间)仍保留在/ data分区上。这个应用程序使用的设置和sqlite数据库也是如此。因此,即使使用A2SD,用户安装的应用程序的空间也会越来越少