Android mediaplayer 切换歌曲时 重复执行 setOnCompletionListener 方法

185 阅读1分钟

Android mediaplayer 切换歌曲时 错误执行 setOnCompletionListener 方法

当我们正常使用 mediaplayer 播放音乐,我们切换了音乐,这个时候他就会报错:

image.png

这是什么原因呢?

因为:每次需要播放歌曲时都需要创建 MediaPlayer 对象。

所以:每次为另一首歌曲创建 MediaPlayer 对象后,都需要设置 OnCompletionListener。

解决方法

  • 拦截错误
  • 切换音乐资源时重新创建 MediaPlayer

拦截错误

// 因为直接切歌会发生错误,所以增加错误监听器。返回true。就不会回调onCompletion方法了。  
player.setOnErrorListener(new OnErrorListener() {  
    @Override  
    public boolean onError(MediaPlayer mp, int what, int extra) {  
        return true;  
    }  
});

切换歌曲时重新创建 MediaPlayer 对象

.....

//加载音乐资源  
val songMusicMP3 = ApiService.request.getSongMusicMP3(songId)  
  
//判断是否正在播放-停止播放  
if (mediaPlayer!!.isPlaying) {  
    mediaPlayer!!.stop()  
}  
//重新创建 MediaPlayer
mediaPlayer=MediaPlayer()

.....

参考文献

android - setOnCompletionListener 仅在第一次检测完成