在 Android 中,我可以使用 MediaPlayer.create(context, R.raw.myFileName)使用 raw/
文件夹中的资源创建 mediaPlayer
的实例,然后我可以使用 .start()让该文件播放。稍后,我可以使用 .setDataSource() 的各种签名更改我要播放的文件。
我可以获取 raw/
文件夹中给定文件的 resourceId,使用:
int resourceId = activity.getResources().getIdentifier("myFileName", "raw", activity.getPackageName());
是否可以使用此整数 resourceId 开始播放该文件而不是当前文件?或者我是否必须确定文件 res/raw/myFileName.mid
的完整路径才能更改轨道?
我希望解决方案是这样的,使用真正的方法而不是我发明的 equivalentToSetDataSourceUsingAResourceId()
方法名称。
Resources resources = activity.getResources();
String packageName = activity.getPackageName();
int white = resources.getIdentifier("white", "raw", packageName);
int black = resources.getIdentifier("black", "raw", packageName);
MediaPlayer mediaPlayer = MediaPlayer.create(activity, white);
mediaPlayer.start();
// ... and some time later...
mediaPlayer.reset();
mediaPlayer.equivalentToSetDataSourceUsingAResourceId(black);
mediaPlayer.prepare();
mediaPlayer.start();
另一种方法是销毁当前的 mediaPlayer
实例,并在每次需要更改声音文件时创建一个新实例:
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
mediaPlayer = MediaPlayer.create(activity, black);
mediaPlayer.start();
这对我来说并不优雅。
最佳答案
根据 MediaPlayer documentation setDataSource
API 仅允许在 MediaPlayer 的新实例(空闲状态)上使用。这意味着如果您只想一次使用一个实例,则必须从头开始release()
并重新创建 MediaPlayer。
尝试这样做。只需传递原始资源的 ID:
mMediaPlayer = MediaPlayer.create(this, R.raw.whatever);
关于android - 使用 Android mediaPlayer 播放原始文件夹中的文件,使用其 resourceId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27298867/