Android MediaPlayer:基于 URI 播放 Raw 音频资源

2023-11-23

我试图解决的问题是在一个需要播放音频文件的活动中。大多数文件将由用户创建(并保存到外部存储中),因此使用以下代码播放(基于 Google 的示例代码):

MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setDataSource(filename);
mPlayer.prepare();
mPlayer.start();

不过,一些音频文件将包含在应用程序中,通常使用以下代码播放:

MediaPlayer mPlayer = MediaPlayer.create(getBaseContext(), R.raw.filename);
mPlayer.prepare();
mPlayer.start();

问题是我希望能够以与播放用户创建的文件相同的方式播放原始文件夹中的音频文件,因为我不一定知道需要哪些文件。我尝试获取原始文件夹中音频文件的 URI 并使用以下代码播放它:

Uri uri = Uri.parse("android/resource://com.my.package/" + R.raw.filename);
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setDataSource(uri.toString());
mPlayer.prepare();
mPlayer.start();

但什么也没发生。没有错误消息,没有播放音频。

我概述了我认为最简单的解决方案,但如果它能完成任务,我愿意走另一条路。非常感谢任何帮助。


我已经设法让它工作,这是我使用的代码。

mMediaPlayer = new MediaPlayer();
Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.filename);
try {
    mMediaPlayer.setDataSource(getApplicationContext(), mediaPath);
    mMediaPlayer.prepare();
    mMediaPlayer.start();
} catch (Exception e) {
    e.printStackTrace();
}

我发现您的代码有两个问题。首先是“android/resource”需要变成“android.resource”

第二个是 setDataSource(String) 在这种情况下不起作用,因为您需要上下文才能使用原始文件,否则它会尝试错误地打开文件。 (参见最上面的答案MediaPlayer.setDataSource(String) 不适用于本地文件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android MediaPlayer:基于 URI 播放 Raw 音频资源 的相关文章