ver*_*esh 6 audio android audio-player
我有一个音频应用程序,可以同时播放多个曲目,每个曲目都有自己的曲目mediaPlayer.每条赛道都相当长,超过两分钟.
只要将曲目编码为ogg文件,一切都在Android 4.x上运行良好.我还没有遇到运行stock 4.x的设备,这个设置有任何音频问题.
但是在Lollipop 5.x上有各种各样的音频问题 - 口吃,音轨切断,蓝牙音频几乎从来没有用过.
我发现进入5.x中的Developer选项并取消选中"使用Nuplayer(实验)"可以立即解决这些问题,并恢复到4.x级别的性能.
有没有办法我可以编程强制我的应用程序使用4.x媒体堆栈(我相信它被称为Awesomeplayer?)而不是使用新的Nuplayer系统?至少在我能发现Nuplayer问题的根源之前?
更新:在 MediaPlayer 上设置部分唤醒锁可以解决此问题:
playerToPrepare.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
部分唤醒锁不应该产生太大的影响,而且似乎 MediaPlayer 本身会在播放完成时清理它。
——原答案——
所以,我终于找到了一种方法来安全地检测是否NuPlayer会在 Lollipop 上使用。看来目前最好的策略是通知用户打开开发者设置并启用,AwesomePlayer直到谷歌修复NuPlayer。遗憾的是,没有好的方法可以为用户更改此设置,除非您作为系统应用程序进行签名,否则我们只能读取其值。
此方法检查 Android 的系统属性值,以查看用户是否在开发人员设置下启用了 AwesomePlayer 的使用。由于 Lollipop 默认情况下启用 NuPlayer,因此如果禁用此值,我们知道将使用 NuPlayer。
将SystemProperties.java放入您的项目中以访问读取系统属性,不要更改其包名称android.os(它通过其相应的 JNI 方法调用,因此需要保持不变)。
您现在可以检查手机是否为 Lollipop/5.0(如果AwesomePlayer已启用),如果不是,则采取相应措施(例如,通过打开“开发人员设置”):
public void openDeveloperSettingsIfAwesomePlayerNotActivated(final Context context) {
final boolean useAwesome = SystemProperties.getBoolean("persist.sys.media.use-awesome", false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !useAwesome) {
final Intent intent = new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
context.startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7201 次 |
| 最近记录: |