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

使用Android mediaPlayer的resourceId从原始文件夹播放文件,android,android-mediaplayer,Android,Android Mediaplayer,在Android中,我可以使用raw/文件夹中的资源创建mediaPlayer的实例,然后我可以使用来播放该文件。稍后,我可以使用的各种签名来更改要播放的文件 我可以使用以下方法获取raw/文件夹中给定文件的resourceId: int resourceId = activity.getResources().getIdentifier("myFileName", "raw", activity.getPackageName()); 是否可以使用此整数resourceId开始播放该文件而不是

在Android中,我可以使用
raw/
文件夹中的资源创建
mediaPlayer
的实例,然后我可以使用来播放该文件。稍后,我可以使用的各种签名来更改要播放的文件

我可以使用以下方法获取
raw/
文件夹中给定文件的resourceId:

int resourceId = activity.getResources().getIdentifier("myFileName", "raw", activity.getPackageName());
是否可以使用此整数resourceId开始播放该文件而不是当前文件?或者我必须确定文件
res/raw/myFileName.mid的完整路径才能更改曲目吗

我希望解决方案是这样的,用一个真正的方法,而不是我发明的
equalityToSetDataSourceUsingResourceId()
方法名

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();
这在我看来并不优雅。

根据
setDataSource
API,只允许在MediaPlayer的新实例(空闲状态)上使用。这意味着您必须
release()
并从头开始重新创建MediaPlayer,才能一次只使用一个实例

试着这样做。只需传递原始资源的id:

mMediaPlayer=MediaPlayer.create(这个,R.raw.whates)