Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android “信息”是什么意思;“内部/外部状态不匹配已纠正”;在MediaPlayer?_Android_Android Mediaplayer - Fatal编程技术网

Android “信息”是什么意思;“内部/外部状态不匹配已纠正”;在MediaPlayer?

Android “信息”是什么意思;“内部/外部状态不匹配已纠正”;在MediaPlayer?,android,android-mediaplayer,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); ... //

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

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

  }

private void animationPausedMusic() {

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

  ... // more code
}
但有时logcat会告诉我这样的信息:

“纠正内部/外部状态不匹配”

然后播放和暂停功能就不起作用了


这个信息是什么意思?我如何解决它呢?

我最近遇到了这个问题,就像其他一些问题一样,这是一个bug(标记为过时的唉)

我发现这个错误发生在播放MIDI文件时,但只是偶尔发生。在mp.start()之后快速调用mp.isplay()时会发生这种情况

如果您能设法暂时不调用mp.isPlaying(),则不会发生错误。在我的例子中,十分之一秒左右决定了是否出错。这很尴尬,但很管用

e、 g

此外,我在稍后暂停时签入

mp.pause()
if(mp.isPlaying()){
    //shouldn't be playing, must be in error
    mp.stop();
    mp.release();
    mp = new MediaPlayer();
    //any other initialization here

}

虽然在查看android的媒体播放器本机框架后,如果在调用isplay()之前有一段等待时间,则不会出现问题,但我在function
bool MediaPlayer::isplay()中的源文件中发现
开发者正在检查媒体播放器的
当前状态
是否处于
启动
状态,但媒体播放器没有播放任何媒体,因此它尝试将状态更改为
暂停
状态,以便为API用户保持状态一致性。(在这里,他正在打印消息“ALOGE(”内部/外部状态不匹配已更正“;”)

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

您可能会注意到,当调用start()后,
MediaPlayer
移动到“STARTED”状态,此时由于某种模糊的原因尚未开始播放,并且您触发了
MediaPlayer.isPlaying()
方法调用时,可能会发生这种情况,框架将此视为状态不一致,并移动到“暂停”状态,这就是为什么您无法看到任何进一步的情况


然而,如果有人有更好的理解,请分享你的想法

显然,这条消息的原因不止一个。以下解决方案对我有效。它可能对你有用,也可能不有用。在实例化MediaPlayer对象后,我立即调用了MediaPlayer.reset()方法:

    MediaPlayer mp = new MediaPlayer();
    mp.reset();

可能是See和我看了这篇文章的重复,但它们对我没有帮助。你是否尝试过按照其中一篇评论中的建议,在活动的暂停和恢复中添加暂停/播放代码?没有,但这可能适用于此人所做的程序,但不适用于我的应用程序。因为它不会在暂停或恢复时出现。我已经尝试过了,但它并不能解决我的问题
    MediaPlayer mp = new MediaPlayer();
    mp.reset();