2014-12-04 75 views
1

在Android中,我可以使用MediaPlayer.create(context, R.raw.myFileName)创建mediaPlayer的一个实例,使用资源从raw/文件夹,然后我可以使用.start()来获取文件玩。稍后,我可以使用.setDataSource()的各种签名来更改我想播放的文件。播放使用Android的MediaPlayer的原始文件夹中的文件,利用其RESOURCEID

我能获得RESOURCEID在raw/文件夹给定文件,使用:

int resourceId = activity.getResources().getIdentifier("myFileName", "raw", activity.getPackageName()); 

是否有可能使用该整数RESOURCEID开始播放该文件,而不是当前的?或者我必须确定文件res/raw/myFileName.mid的完整路径才能更改曲目?

我希望解决方案将是这样的,用真正的方法,而不是我发明的方法名称。

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(); 

这似乎并不优雅给我。

回答

2

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

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

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

相关问题