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