Android mediaplayer 切换歌曲时 错误执行 setOnCompletionListener 方法
当我们正常使用 mediaplayer 播放音乐,我们切换了音乐,这个时候他就会报错:
这是什么原因呢?
因为:每次需要播放歌曲时都需要创建 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()
.....