android - 媒体播放器抛出非法状态异常
问题描述
我正在尝试播放歌曲,但媒体播放器抛出 IllegalState 异常。这就是我尝试播放歌曲的方式
private fun playSong(songPath: String) {
if (mediaPlayer != null) {
if (mediaPlayer!!.isPlaying) {
stopPlay()
mediaPlayer!!.setDataSource(songPath)
mediaPlayer!!.setOnPreparedListener(this)
mediaPlayer!!.setOnCompletionListener(this)
mediaPlayer!!.prepareAsync()
} else {
mediaPlayer!!.setDataSource(songPath)
mediaPlayer!!.setOnPreparedListener(this)
mediaPlayer!!.setOnCompletionListener(this)
mediaPlayer!!.prepareAsync()
}
} else {
mediaPlayer = MediaPlayer()
mediaPlayer!!.setDataSource(songPath)
mediaPlayer!!.setOnPreparedListener(this)
mediaPlayer!!.setOnCompletionListener(this)
mediaPlayer!!.prepareAsync()
}
这就是我停止游戏的方式
private fun stopPlay() {
mediaPlayer!!.pause()
mediaPlayer!!.stop()
}
媒体播放器抛出的异常是
java.lang.IllegalStateException
at android.media.MediaPlayer._setDataSource(Native Method)
解决方案
当您重新使用相同的媒体播放器实例时,您应该在 setDataSource 之前调用 reset()。
if (mediaPlayer != null) {
if (mediaPlayer?.isPlaying == true) {
stopPlay()
}
mediaPlayer?.reset()
} else {
mediaPlayer = MediaPlayer()
}
mediaPlayer?.setDataSource(songPath)
mediaPlayer?.setOnPreparedListener(this)
mediaPlayer?.setOnCompletionListener(this)
mediaPlayer?.prepareAsync()