Android 4.4(19)上的MediaPlayer在播放时会随机停止

11

我的应用在所有设备上流媒体音频都很好,除了Nexus 5。在Nexus 5上,MediaPlayer会随机停止播放,不确定4.4版本中http://developer.android.com/about/versions/android-4.4.html#Multimedia有关音量的更改是否破坏了某些内容。

还有其他人注意到这个问题吗?似乎发生在一些用户身上,但我无法在自己的Nexus 5上重现。

更新:所以我能够在我的Nexus 5上重现这个问题。实际上,它似乎发生在剪辑结束前的最后1-5秒。MediaPlayer会调用OnCompletionListener.onCompletion()方法,这只在Nexus 5上发生,并且在某些剪辑上随机发生。我能够将其重现近30%的时间。请注意,当剪辑提前完成时,如果我尝试返回并再次播放剪辑,则第二次会完全播放整个剪辑。我知道Android 4.4刚刚发布,但希望有人能帮忙!谢谢。

更新:我已向Android提交了一个错误报告:https://code.google.com/p/android/issues/detail?id=62304


这似乎是一个4.4的问题,而不是Nexus 5的问题。这甚至更糟糕。 - StackOverflowed
3个回答

6
好的,我已经找到了解决方案。我不确定这是否是你们现在所面对的问题,但它可以解决我的问题。基本上,Android 4.4+引入了许多新的电源管理功能,其中之一包括在屏幕关闭时关闭CPU。来自Android文档的引用:
“因为Android系统试图在设备休眠时节省电量,所以系统会尝试关闭所有不必要的手机功能,包括CPU和WiFi硬件。然而,如果您的服务正在播放或流媒体音乐,则希望防止系统干扰您的播放。”
因此,如果没有CPU唤醒锁定,MediaPlayer将失去其正确流媒体的能力,导致在剪辑完成之前停止播放。这个问题的解决方案很简单:向MediaPlayer添加PARTIAL_WAKE_LOCK。正如Android文档中所述:(点此)
mMediaPlayer = new MediaPlayer();
// ... other initialization here ...
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

我猜大部分人没有在文档中看到这个。我不记得看到过,所以可能是新添加的。无论如何,希望这能解决每个人的问题!


4
尽管我已经获取了上述提及的锁,但安卓5.0似乎再次出现了这个问题。我正在努力弄清楚为什么会发生这种情况。 - shoke
嘿,Clu..你解决了这个问题吗?因为我在安卓5.0(Nexus 7)上也遇到了同样的问题...任何帮助都将不胜感激。 - sid
你有找到5.0+的解决方案吗?@clu - donmezburak
大家好。对于回复的延迟我感到抱歉。实际上,我已经停止使用MediaPlayer进行Android开发,所以对这个问题不太了解。不过,我记得有一件事是,Android 5+版本使用了一个实验性的媒体播放器。我相信可以在手机的开发者选项中取消设置。我记得我们曾经给用户发送电子邮件,告知他们禁用实验性媒体播放器。我知道这个解决方案很糟糕,但那就是我记得的情况。希望能对你有所帮助。 - shoke
如果上面的答案没有解决您的问题,请检查此链接:https://dev59.com/MG025IYBdhLWcg3wEhdb - Moz

1
最近遇到了几乎相同的问题:MediaPlayerAndroid 4.3 及以下版本上运行完美,但在 Android 4.4 上无法播放相同的视频。

决定切换到 vitamio 库,现在我的应用程序也可以在 4.4 上工作。 vitamioAPIMediaPlayer 的一样,因此迁移非常容易。

但这个解决方案仍然有一些缺点:

  • 如果您不是个人开发者,则必须购买许可证
  • 应用程序大小将增加约11兆字节

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接