【问题标题】:Play Audio from sdcard Android Mediaplayer从 sdcard Android Mediaplayer 播放音频
【发布时间】:2013-08-28 16:03:19
【问题描述】:

我正在制作一个内置了三个相当大的音频文件的应用程序,我想以正确的方式播放它们。据我了解,最好的方法是以某种方式将它们放在 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 的文件夹,但没有成功。

建议、示例代码、想法?

【问题讨论】:

    标签: android audio media-player android-mediaplayer


    【解决方案1】:

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

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

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

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

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

    编辑:

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

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

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

    【讨论】:

    • 佩德罗感谢您的意见!没有歌曲小于 5mb,因此这不是本地音频文件的正确方法,除非没有针对音乐文件的单一本地实现,并且它们都针对音效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多