MediaPlayer在Android 4.4(19)上随机停止

时间:2013-11-11 23:34:28

标签: android-mediaplayer android-4.4-kitkat

我的应用程序在除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

3 个答案:

答案 0 :(得分:5)

好的,我找到了解决方案。我不确定这是否是你现在所面临的问题,但它解决了我的问题。基本上,Android 4.4+引入了许多新的电源管理功能,其中之一包括在屏幕关闭时关闭CPU。引用Android文档:

  

因为Android系统会尝试在设备上节省电池电量   正在睡觉,系统试图关闭手机的任何功能   这是不必要的,包括CPU和WiFi硬件。   但是,如果您的服务正在播放或流媒体音乐,您需要   防止系统干扰您的播放。

因此,如果没有CPU唤醒锁定,MediaPlayer将无法正常流式传输,导致它在剪辑完成之前停止播放。解决方案很简单:向MediaPlayer添加PARTIAL_WAKE_LOCK。 As documented on Android

mMediaPlayer = new MediaPlayer();
// ... other initialization here ...
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

我想我们中的一些人未能在文档中看到这一点。我不记得看到这个,所以也许只是添加了。无论如何,希望这能为每个人解决问题!

答案 1 :(得分:1)

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

决定切换到vitamio库,现在我的应用程序也适用于4.4。 vitamio APIMediaPlayer的{​​{1}}相同,因此迁移非常简单。

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

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

答案 2 :(得分:1)

此问题可能与错误相关:http://code.google.com/p/android/issues/detail?id=63032

与上述错误相关的问题在4.4.1 / 4.4.2中已修复。怀疑是问题的更改日志条目具有以下信息: