0

我正在制作一个内置了三个相当大的音频文件的应用程序,我想以正确的方式播放它们。据我了解,最好的方法是以某种方式将它们放在 SD 卡上并在那里播放,但如何做到这一点的唯一示例是设备上已经存在的歌曲,例如音乐库。

此代码适用于 res/raw(raw 是我创建的一个文件夹,根据基本的 Android 说明)但这仅在我使用两个小的示例音频文件而不是我想使用的三个较大的音频文件时才有效,这会导致“不足内存”警告(至少在模拟器上)

MediaPlayer mp;

    @JavascriptInterface
    public void  playSong() {
        // Play song
        if(mp == null) {
            mp = MediaPlayer.create(mContext,R.raw.rz);
        }
        mp.start();
    }

我尝试将数据源设置为我命名为 sdcard 的文件夹,但这不起作用。

建议,示例代码,想法?

4

1 回答 1

1

在应用程序中包含媒体文件的最佳方式是在项目的 /assets 文件夹中。

但是你也有一些文件大小的限制,这取决于 Android 的实现,但应该在 1MB 左右,至少对我来说这是可行的。

所以我的建议是将媒体文件分成几个块文件,每个文件 1MB,然后将它们放在资产文件夹中。

然后,当您启动应用程序时,您检查媒体文件是否在 sdcard 中,是否可以在应用程序的外部数据目录中,如果没有,则将它们复制到那里,从块文件中重新创建原始媒体文件。

那应该可以解决您的问题。

编辑:

我对此进行了更详细的研究,发现 1MB 的限制(在资产或 res/raw 中)仅适用于 Android 打包程序需要压缩的文件。如果 Android 打包程序发现文件已经被压缩,例如 mp3 或 png,它不会压缩并且没有限制。

但也要注意,由于许多设备的容量有限,拥有大的 apk 文件也会限制可以安装它的设备。

对于大文件,如果可能,最好在第一次运行时从 Web 服务器获取它们。

于 2013-08-28T16:14:19.870 回答