嵌入式视频的WebView在后台播放

时间:2012-09-07 17:41:16

标签: android webview android-webview

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

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

唯一有效的方法是调用_webView.loadData(“”,“text / html”,“utf-8”);来自我的活动finish()方法。

(基于这个答案:How do I stop Flash after leaving a WebView?由于onDestroy直到很久之后才被调用,因此无效。{/ p>

答案 2 :(得分:0)

你是什么意思:“当我降低网络视图时,视频的声音继续播放”。

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

答案 3 :(得分: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);
    }
}