【问题标题】:Stop android app audio playing when device locked设备锁定时停止 android 应用程序音频播放
【发布时间】:2016-05-09 04:15:19
【问题描述】:

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

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

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

编辑:我刚刚在这里找到了一个类似的未答复帖子:App enables background playing of videos, cordova issues, google play rejecting apps

【问题讨论】:

  • 请问这个也需要添加哪个文件?

标签: android cordova audio background


【解决方案1】:

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

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

为了让 Google 满意,您可以像这样覆盖您的活动/片段的 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 的内部工作。您可能想要创建一个通知,其中包含一个停止音频或将用户带回您的应用的按钮,这样用户就不会忘记哪个应用发出声音并认为手机闹鬼!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多