使用Android mediaPlayer使用其resourceId从原始文件夹播放文件

时间:2014-12-04 16:20:33

标签: android android-mediaplayer

在Android中,我可以使用MediaPlayer.create(context, R.raw.myFileName)创建mediaPlayer的实例,使用raw/文件夹中的资源,然后我可以使用.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();

这对我来说似乎并不优雅。

1 个答案:

答案 0 :(得分:2)

根据MediaPlayer documentation setDataSource API仅允许在MediaPlayer的新实例(IDLE状态)上使用。这意味着如果您只想在一次使用一个实例,则必须release()并从头开始重新创建MediaPlayer。

尝试这样做。只需传递原始资源的ID:

mMediaPlayer = MediaPlayer.create(this,R.raw.whatever);