java - 检测音乐播放完毕

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

最佳答案

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

关于java - 检测音乐播放完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900869/

相关文章:

javac 问题编译源代码

java - 如何调试堆栈跟踪未引用我的类的 NullPointerException?

android - 当我使用单选按钮时出现空指针异常

android - 在 Android 版本 4.2.2 中通话电话在 MODE_IN_CALL 中不起作用

Android:如何生成频率?

java - Java 中的接口(interface)、类和构造函数

java - CRC纠错库?

Android:AudioRecord 中推荐的 bufferSizeInBytes 值

android - iOS 和 Android 中的 TableView

Android:如何检查手机音频输出?