gpt4 book ai didi

android - 在 Android Lollipop 5.x 上使用 NuPlayer 阻止我的音频应用程序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:23 29 4
gpt4 key购买 nike

我有一个同时播放多个音轨的音频应用程序,每个音轨都有自己的 mediaPlayer。每首歌曲都相当长,超过两分钟。

只要轨道被编码为 ogg 文件,一切都在 Android 4.x 上运行良好。我还没有遇到运行 stock 4.x 的设备在使用此设置时出现任何音频问题。

但在 Lollipop 5.x 上存在各种各样的音频问题 - 卡顿、音轨中断以及蓝牙音频几乎无法正常工作。

我发现在 5.x 中进入开发人员选项并取消选中“使用 Nuplayer(实验性)”可以立即解决这些问题并恢复到 4.x 的性能水平。

有没有办法以编程方式强制我的应用程序使用 4.x 媒体堆栈(我相信它叫做 Awesomeplayer?)而不使用新的 Nuplayer 系统?至少在我发现 Nuplayer 问题的根源之前?

最佳答案

更新:在 MediaPlayer 上设置部分唤醒锁可解决此问题:

playerToPrepare.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);

部分唤醒锁应该不会有太大的影响,而且似乎 MediaPlayer 本身会在播放完成时清理它。

-- 原始答案 ---

所以,我终于找到了一种方法来安全地检测 NuPlayer 是否会在 Lollipop 上使用。似乎目前最好的策略是通知用户打开开发者设置并启用 AwesomePlayer,直到 Google 修复 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);
}
}

关于android - 在 Android Lollipop 5.x 上使用 NuPlayer 阻止我的音频应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565108/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com