从SD卡Android Mediaplayer播放音频

从SD卡Android Mediaplayer播放音频,android,audio,media-player,android-mediaplayer,Android,Audio,Media Player,Android Mediaplayer,我正在制作一个应用程序,它内置了三个相当大的音频文件,我想以正确的方式播放它们。据我所知,最好的方法是将它们放在SD卡上,然后在SD卡上播放,但唯一的例子是已经在设备上播放的歌曲,例如音乐库 这段代码可以从res/raw(raw是我创建的一个文件夹,根据基本的Android指令),但这只在我使用两个小样本音频文件时有效,而不是我想使用的三个较大的音频文件,它们会导致“内存不足”警告(至少在模拟器上) 我尝试将数据源设置为一个名为sdcard的文件夹,但没有成功 建议、示例代码、想法?在应用程序中

我正在制作一个应用程序,它内置了三个相当大的音频文件,我想以正确的方式播放它们。据我所知,最好的方法是将它们放在SD卡上,然后在SD卡上播放,但唯一的例子是已经在设备上播放的歌曲,例如音乐库

这段代码可以从res/raw(raw是我创建的一个文件夹,根据基本的Android指令),但这只在我使用两个小样本音频文件时有效,而不是我想使用的三个较大的音频文件,它们会导致“内存不足”警告(至少在模拟器上)

我尝试将数据源设置为一个名为sdcard的文件夹,但没有成功


建议、示例代码、想法?

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

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

因此,我的建议是将媒体文件分成几个块文件,每个块文件的容量为1MB,并将它们放在assets文件夹中

然后,启动应用程序时,检查媒体文件是否位于SD卡上,是否可以位于应用程序的外部数据目录中,如果不在,则将其复制到SD卡上,并从块文件中重新创建原始媒体文件

这应该能解决你的问题

编辑:

我更详细地讨论了这个问题,发现1MB的限制(在资产或res/raw中)只适用于Android打包程序需要压缩的文件。如果Android打包程序发现文件已经压缩,如mp3或png,它将不会压缩,并且没有限制

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


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

Pedro感谢您的输入!没有一首歌曲小于5mb,因此这不可能是本地音频文件的正确方式,除非没有一个本地实现针对音乐文件,并且它们都针对声音效果。
MediaPlayer mp;

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