什么意味着MediaPlayer上的消息"内部/外部状态不匹配"?

sil*_*aut 3 android android-mediaplayer

我使用MediaPlayer并通常以编程方式设置播放器的状态,例如:

 if(mp.isPlaying()) {
    mp.pause();
    animationPausedMusic();

  }

private void animationPausedMusic() {

  // Changing button image to play button
    btn_play.setBackgroundResource(R.drawable.play);

  ... // more code
}
Run Code Online (Sandbox Code Playgroud)

但有时logcat给我的信息是:

"纠正了内部/外部状态不匹配"

然后播放和暂停功能不再起作用.

这条消息是什么意思?我该如何解决?

小智 5

在浏览了android的媒体播放器本机框架后,我发现在源文件中有mediaplayer.cpp内部函数bool MediaPlayer::isPlaying()开发人员正在检查currentState媒体播放器是否处于STARTED状态但是媒体播放器没有播放任何媒体,所以它试图改变状态到PAUSED状态,以便为API用户保持状态一致性.(这里是他打印消息"ALOGE("内部/外部状态不匹配已纠正");")

现在,如果您浏览下面的媒体播放器状态图:

在此输入图像描述

您会注意到,MediaPlayer在调用start()之后移动到'STARTED'状态时可能会发生这种情况,此时由于某些模糊原因尚未启动回放并且您触发MediaPlayer.isPlaying()方法调用,Framework将此视为状态不一致并进入'PAUSED'状态,这就是为什么你看不到任何进一步发挥的原因.

但是,如果有人有更好的理解,请分享您的想法!