[英]Media player throwing illegal state exception
我正在尝试播放歌曲,但媒体播放器抛出 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()
您需要在setDataSource
之前reset
媒体播放器,并设置setOnErrorListener
并像重置媒体播放器一样处理错误。
private fun playSong(songPath: String) {
if (mediaPlayer != null) {
if (mediaPlayer?.isPlaying == true) {
stopPlay()
}
mediaPlayer?.reset()
} else {
mediaPlayer = MediaPlayer()
}
mediaPlayer?.setDataSource(songPath)
mediaPlayer?.setOnPreparedListener(this)
mediaPlayer?.setOnCompletionListener(this)
mediaPlayer?.setOnErrorListener(this)
mediaPlayer?.prepareAsync()
}
override fun onError(mp: MediaPlayer, what: Int, extra: Int): Boolean {
mp.reset()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.