gpt4 book ai didi

android - 设备锁定时停止播放 android 应用程序音频

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:23 26 4
gpt4 key购买 nike

我有一个情况,我们有一个使用 webview 的 Android 应用程序。当用户导航到 YouTube 视频时,它开始播放(带音频),然后用户使用设备的硬件开关锁定设备,它会继续播放音频。

当使用设备菜单将应用程序发送到后台或退出应用程序时,不会发生这种情况。

有谁知道为什么会发生这种情况以及如何阻止它?

编辑:我刚刚在此处发现了一个类似的、未答复的帖子:App enables background playing of videos, cordova issues, google play rejecting apps

最佳答案

Google 拒绝该应用程序时遇到了同样的问题,因为当您按下电源按钮关闭屏幕时,webview 继续播放 youtube 视频中的音频。

出于某种原因,似乎按下电源按钮不会触发 webview 的 onPause(),这就是音频继续播放的原因。虽然这对于说在屏幕关闭时继续播放音乐很有用,但 Google 不喜欢 YouTube 视频的这种行为。

为了让 Google 满意,您可以像这样覆盖您的 Activity/fragment 的 onPause():

@Override
public void onPause() {
super.onPause();
myCustomWebView.onPause();
}

按下电源按钮现在也会触发 webview 的 onPause()。然而,这会产生另一个问题:当屏幕关闭时,您实际上想要继续播放的音频呢?

我想出的一个修复方法是重写 WebViewClient 的 onLoadResource(),这让我可以检查资源是否来自 youtube,它决定了在时机成熟时是否应该调用 webview 的 onPause()。像这样:

myCustomWebView.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView webview, String url) {
super.onLoadResource(webview, url);
if (url.contains("youtube.com")) mShouldPause = true;
}

//...... plus any other method you want to override

});

当然,这确实意味着任何在其 url 中包含“youtube.com”的资源都会触发该标志,但对于我的需要来说,这就足够了。所以 onPause() 方法现在看起来像这样:

@Override
public void onPause() {
super.onPause();
// mShouldPause is just a private boolean
if (mShouldPause) {
myCustomWebView.onPause();
}
mShouldPause = false;
}

所以这是我想出的解决方案,没有使用反射来扰乱 webview 的内部工作。您可能想要创建一个通知,其中包含一个按钮来停止音频或将用户带回您的应用程序,这样用户就不会忘记是哪个应用程序发出声音而认为手机闹鬼了!!!

关于android - 设备锁定时停止播放 android 应用程序音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107650/

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