首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测音乐播放完毕

检测音乐播放完毕
EN

Stack Overflow用户
提问于 2017-08-27 00:58:55
回答 2查看 1.8K关注 0票数 1

我有我通过的音乐

代码语言:javascript
复制
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();

我应该如何检测这音乐是否停止播放,以便我可以开始播放下一个?

我一直在不断地检查(每秒一次),通过

代码语言:javascript
复制
((AudioManager) application.getSystemService(Context.AUDIO_SERVICE)).isMusicActive();

但这似乎不起作用(总是返回true)。有没有其他方法通知我停止播放音乐,这样我就可以开始下一个音乐了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-27 07:27:28

使用MediaPlayer.onCompletionListener在曲目结束时侦听事件。下一个音频文件将在此之后播放。一个例子

代码语言:javascript
复制
player.prepare();
player.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer player) {
        player.stop();
        // next audio file
    }
 });
 player.start();

另一个建议是,为了一个接一个地播放多个音频,不必创建嵌套的onCompletionListener。相反,请使用以下代码。

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2017-08-27 01:03:58

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

在回放过程中到达媒体源结束时,注册要调用的回调。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45900869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档