1

我的音樂,我通過檢測音樂播放完畢

AssetFileDescriptor assetDescriptor = getAssets().openFd(filename); 
    MediaPlayer mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(), assetDescriptor.getStartOffset(), assetDescriptor.getLength()); 
    mediaPlayer.prepareAsync(); 
    mediaPlayer.setVolume(1, 1); 
    mediaPlayer.start(); 

我應該如何檢測,如果這樣的音樂停止播放,這樣我就可以開始玩下一個玩嗎? 我試圖不斷地檢查(每秒鐘一次),通過

((AudioManager) application.getSystemService(Context.AUDIO_SERVICE)).isMusicActive(); 

但是,這似乎並沒有工作,(總是返回true)。有沒有其他方法讓我知道音樂停止播放,以便我可以開始下一個?

回答

1

使用MediaPlayer.onCompletionListener聽事件,當一個曲目結束。下一個音頻文件將在此之後播放。一個例子

player.prepare(); 
player.setOnCompletionListener(new OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer player) { 
     player.stop(); 
     // next audio file 
    } 
}); 
player.start(); 

增加了一個建議,在多個音頻播放之後,您不必創建嵌套的onCompletionListener。而是使用下面的代碼。

int[] myAudio = {R.raw.audio1, R.raw.audio2, R.raw.audio3}; 
int mTrackFinish = 0; 
MediaPlayer mp = MediaPlayer.create(this, myAudio[0]); 
mp.setOnCompletionListener(new OnCompletionListener() 
{ 
@Override 
public void onCompletion(MediaPlayer mp) 
{ 
mTrackFinish++; 
mp.reset(); 
if(mTrackFinish < myAudio.length) 
     // play some audio from list 
    else 
     mTrackFinish=0; 
     mp.release(); 
     mp = null; // either set counter to 0 and start again or call end of list 

} 
}); 
mp.start();