我需要写一个Android应用程序,将下载声音从互联网上进一步使用。
我应该在哪里存储这些声音?Sqlite是一种选择吗?加载和播放这些文件的最佳方式是什么?
提前谢谢。
发布于 2010-10-21 05:07:39
我建议把这些文件放在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,否则也不能保证用户在应用程序运行期间不会扰乱文件系统。然而,在MP3s等的情况下,曲目/艺术家类型信息可以经由ID3标签直接存储到文件中,而不是使用数据库。
至于播放文件,请参考Android的音频API文档。有一大堆很棒的信息,绝对不能在这里重复。
发布于 2010-10-20 20:56:02
我想说最好的地方是将它们作为单独的文件存储在SD卡上的您自己的文件夹下,即File("/sdcard/com.example.myapp/sound12345.mp3");
编辑:请看phobos51594's answer,它比我的完整得多。
发布于 2010-10-20 20:58:00
最好将它们直接保存在文件系统上。为什么要将其存储在数据库中?是否有其他信息需要与其存储在一起?(如标题、描述等)?如果没有,我会直接将其写入文件系统。
基本上,您可以将其保存到应用程序的data文件夹中(共享首选项和sqlite数据库也存储在其中)。然而,我个人认为应该不鼓励这样做,因为它减少了/data分区上的可用内存(在安卓手机上已经太小了)。大多数手机的可用数据不到50MB(这意味着:应用程序的可用空间不到50MB,不能部分移动到SD卡)。
如果可能的话,你应该总是在SD卡上安全这样的罚款,这样你就不会在数据分区上减少太多的可用空间。即使有了Froyo的A2SD功能,也不是所有已安装应用程序的数据都会被移动到SD卡上。*.dex文件(通常在应用程序总大小的10-50%之间)仍然保留在/data分区上。这个应用程序使用的设置和sqlite数据库也是如此。因此,即使使用A2SD,用户安装的应用程序越多,空间也会变得越来越小
https://stackoverflow.com/questions/3977998
复制相似问题