7

我有一个托管嵌入式视频的 WebView。当我降级 Webview 时,视频的声音会继续播放。我怎样才能阻止这个?我确实尝试webview.destroy();过,但是当我再次尝试打开 WebView 时,该强制关闭了应用程序。

4

4 回答 4

7

为此,您必须调用 WebView 的onPause()onResume()方法。您通常在 Activity 上执行此操作onPause()onResume()但您也可以在以某种方式隐藏 WebView 时执行此操作,并且它的内容也应该停止执行他们正在执行的任何操作,例如运行 Javascript 或播放 HTML5 视频。

如果您在 11 之前的 API 级别中需要这些方法,则可以像这样使用反射:WebView.class.getMethod("onPause").invoke(myWebView);

于 2013-05-01T05:13:49.957 回答
4

我假设“当我降级 Webview 时”是当您关闭视图时。无论如何,我也尝试了相同的方法 - 调用 webview.destroy(),并遇到了和你一样的崩溃。

唯一有效的方法是调用 _webView.loadData("", "text/html", "utf-8"); 从我的活动完成()方法。

(基于这个答案:How do I stop Flash after leave a WebView?这并没有真正起作用,因为直到很久以后才调用 onDestroy)。

于 2012-11-04T13:15:07.950 回答
0

你是什​​么意思:“当我降级 Webview 时,视频的声音会继续播放”。

这是自定义应用程序吗?如果是这样,您需要使用 android:hardwareAccelerated=true 构建您的应用清单文件(假设您在 ICS 或 JB 上执行此操作)。如果没有硬件加速,您只会听到音频但看不到视频(听起来就像您看到的那样)。以下是有关更改清单文件的一些信息:http: //developer.android.com/guide/topics/graphics/hardware-accel.html

于 2012-09-19T22:05:44.700 回答
0

您还可以执行 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);
    }
}
于 2017-02-14T21:51:08.773 回答