我有一个托管嵌入式视频的 WebView。当我降级 Webview 时,视频的声音会继续播放。我怎样才能阻止这个?我确实尝试webview.destroy();
过,但是当我再次尝试打开 WebView 时,该强制关闭了应用程序。
4 回答
为此,您必须调用 WebView 的onPause()
和onResume()
方法。您通常在 Activity 上执行此操作onPause()
,onResume()
但您也可以在以某种方式隐藏 WebView 时执行此操作,并且它的内容也应该停止执行他们正在执行的任何操作,例如运行 Javascript 或播放 HTML5 视频。
如果您在 11 之前的 API 级别中需要这些方法,则可以像这样使用反射:WebView.class.getMethod("onPause").invoke(myWebView);
我假设“当我降级 Webview 时”是当您关闭视图时。无论如何,我也尝试了相同的方法 - 调用 webview.destroy(),并遇到了和你一样的崩溃。
唯一有效的方法是调用 _webView.loadData("", "text/html", "utf-8"); 从我的活动完成()方法。
(基于这个答案:How do I stop Flash after leave a WebView?这并没有真正起作用,因为直到很久以后才调用 onDestroy)。
你是什么意思:“当我降级 Webview 时,视频的声音会继续播放”。
这是自定义应用程序吗?如果是这样,您需要使用 android:hardwareAccelerated=true 构建您的应用清单文件(假设您在 ICS 或 JB 上执行此操作)。如果没有硬件加速,您只会听到音频但看不到视频(听起来就像您看到的那样)。以下是有关更改清单文件的一些信息:http: //developer.android.com/guide/topics/graphics/hardware-accel.html
您还可以执行 Java 脚本以在活动的 onPause 生命周期回调上暂停视频/音频,在下面的示例中,我已经为音频完成了它(它有效)。希望将“音频”更改为“视频”对您有用。
@Override
protected void onPause() {
executeJavascript("javascript:document.querySelector('audio').pause();", new ValueCallback() {
@Override
public void onReceiveValue(Object value) {
Trace.d(TAG, value.toString());
}
});
super.onPause();
}
和
private void executeJavascript(String javascript, ValueCallback callback){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
mWebView.evaluateJavascript(javascript, callback);
} else {
mWebView.loadUrl(javascript);
}
}