2014-12-04 15 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);

相關問題