首页 > 解决方案 > 媒体播放器抛出非法状态异常

问题描述

我正在尝试播放歌曲,但媒体播放器抛出 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)

标签: android

解决方案


当您重新使用相同的媒体播放器实例时,您应该在 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()

推荐阅读