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