我需要编写一个Android应用程序,该应用程序可以从Internet下载声音以供进一步使用。
我应该在哪里存储这些声音? SQLite是一种选择吗?加载和播放这些文件的最佳方法是什么?
提前致谢。

有帮助吗?

解决方案

如果存在,我建议将文件放在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数据库可能对此应用程序过大。也不能保证,除非您将文件直接存储在数据库中,否则用户不会在应用程序运行之间与文件系统混乱。但是,在mp3之类的情况下,可以通过ID3标签直接将Track / Artist类型信息存储在文件中,而不是使用数据库。

至于播放文件,请在其音频API上查阅Android文档。那里有很多很棒的信息,肯定比我在这里重复更多的信息要多。

其他提示

我会说将它们存储的最佳地点是在您自己的文件夹下作为sdcard上的单个文件 File("/sdcard/com.example.myapp/sound12345.mp3");


编辑:请参阅 Phobos51594的答案 这比我的要完整得多。

最好将它们直接保存在文件系统上。您为什么要将其存储在数据库中?您是否需要与之一起存储的其他信息? (例如标题,描述等)?如果没有,我将将其直接写入文件系统。

基本上,您可以将其保存到应用程序的数据文件夹中(共享首选项和SQLite DB也存储)。但是,我个人认为应该劝阻这一点,因为它减少了 /数据分区的可用备忘录(在Android手机上已经很小。应用程序,不能部分移至SD卡)。

如果可能的话,您应该始终将此类罚款安全,因此您不会过多地降低数据分区的可用空间。即使使用Froyo的A2SD功能,也没有在SD卡上移动安装应用程序的所有数据。 *.dex文件(通常介于应用程序总数的10-50%之间)仍然存在 /数据分区。该应用程序使用的设置和SQLITE数据库也是如此。因此,即使使用A2SD,空间也会变得越来越少,用户安装的应用程序越多

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top