Java 检测音乐播放完毕

Java 检测音乐播放完毕,java,android,android-audiomanager,android-music-player,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(), asse

我有音乐,我可以通过

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();
如何检测此音乐是否停止播放,以便开始播放下一个音乐

我试着通过


但这似乎不起作用(总是返回true)。是否有其他方法通知我停止播放的音乐,以便我可以启动下一个音乐?

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

注册在播放过程中到达媒体源结尾时调用的回调


有关详细信息:

使用
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();
int[]myAudio={R.raw.audio1,R.raw.audio2,R.raw.audio3};
int mTrackFinish=0;
MediaPlayer mp=MediaPlayer.create(这个,myAudio[0]);
mp.setOnCompletionListener(新的OnCompletionListener()
{
@凌驾
完成时的公共作废(MediaPlayer mp)
{
mTrackFinish++;
mp.reset();
if(mTrackFinish
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();