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



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

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

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

编辑:我刚刚在这里发现了一个类似的、未回答的帖子:应用程序启用视频的后台播放,cordova问题,谷歌播放拒绝应用程序

我遇到了谷歌拒绝该应用程序的同样问题,因为当你按下电源按钮关闭屏幕时,网络视图会继续播放youtube视频中的音频。

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

为了让谷歌高兴,你可以覆盖你的活动/片段的onPause(),如下所示:

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

按下电源按钮现在也会触发网络视图的onPause()。然而,这又产生了另一个问题:当屏幕关闭时,你真正想继续播放的音频呢?

我想出的一个修复方法是覆盖WebViewClient的onLoadResource(),这使我可以检查资源是否来自youtube,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内部工作的情况下提出的解决方案。你可能想创建一个通知,其中有一个按钮来停止音频或将用户带回你的应用程序,这样用户就不会忘记是哪个应用程序发出了声音,并认为手机闹鬼了!!!

最新更新