我的应用程序在除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
答案 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)
最近遇到了几乎相同的问题:MediaPlayer
在Android 4.3
及以下版本上完美运行,但无法在Android 4.4
上播放相同的视频。
决定切换到vitamio
库,现在我的应用程序也适用于4.4。 vitamio
API
与MediaPlayer
的{{1}}相同,因此迁移非常简单。
但是这个解决方案仍有一些缺点:
答案 2 :(得分:1)
此问题可能与错误相关:http://code.google.com/p/android/issues/detail?id=63032
与上述错误相关的问题在4.4.1 / 4.4.2中已修复。怀疑是问题的更改日志条目具有以下信息: