检测音乐播放完毕

时间:2017-08-27 00:58:56

标签: java android android-audiomanager android-music-player

我有通过

播放的音乐
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)。有没有其他方法让我收到音乐停止播放的通知,以便我可以开始下一个音乐?

2 个答案:

答案 0 :(得分:1)

MediaPlayer有一个名为setOnCompletionListener的方法,它执行以下操作:

  

注册在播放期间到达媒体源结尾时要调用的回调。

有关详细信息:https://developer.android.com/reference/android/media/MediaPlayer.html#setOnCompletionListener%28android.media.MediaPlayer.OnCompletionListener%29

答案 1 :(得分: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();