如何在Android webview中停止播放YouTube视频?

Dro*_*oid 62 youtube video android webview

如何停止在我的网页浏览中播放的YouTube视频?当我点击后退按钮时,视频不会停止,而是在后台继续播放.

码:

webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false); 
webView.getSettings().setSupportZoom(false);
webView.loadData(myUrl,"text/html", "utf-8");
Run Code Online (Sandbox Code Playgroud)

And*_*son 88

请参阅以下帖子,了解WebView线程永不停止

基本上你需要从你自己的Activity的onPause方法调用WebView的onPause方法.

唯一的技巧是你不能直接调用WebView的onPause方法,因为它是隐藏的.因此,您需要通过反射间接调用它.以下代码可以帮助您开始设置自己的Activity的onPause方法:

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

    try {
        Class.forName("android.webkit.WebView")
                .getMethod("onPause", (Class[]) null)
                            .invoke(webview, (Object[]) null);

    } catch(ClassNotFoundException cnfe) {
        ...
    } catch(NoSuchMethodException nsme) {
        ...
    } catch(InvocationTargetException ite) {
        ...
    } catch (IllegalAccessException iae) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面try块中的变量"webview"是类的私有实例变量,并在Activity的onCreate方法中赋值.

  • 答案不是最新的.API已更改,webview.onPause()现已可用.正确的似乎是:http://stackoverflow.com/questions/5946698/how-to-stop-youtube-video-playing-in-android-webview/25380464#25380464 (7认同)
  • 我试图把逻辑放在"后退按键"中.但它没有用.这个有效 (2认同)

vis*_*dra 68

解决方案:1 - 花了很多时间后,我得出结论暂停正在播放<iframe>HTML的WebView 概念的视频.

只需覆盖onPause()您使用的Activity或Fragment上的方法WebView,然后调用它.这个对我有用.

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

@Override
public void onResume() {
    super.onResume();
    mWebView.onResume();
}
Run Code Online (Sandbox Code Playgroud)

解决方案:2 - 如果上述解决方案对您不起作用,则可以强制WebView加载不存在的html文件.

mWebview.loadUrl("file:///android_asset/nonexistent.html");
Run Code Online (Sandbox Code Playgroud)


CLu*_*era 17

你还必须实现onResume()方法或第二次它不起作用

@Override
public void onResume()
{
    super.onResume();
    webView.onResume();
}

@Override
public void onPause()
{
    super.onPause();
    webView.onPause();
}
Run Code Online (Sandbox Code Playgroud)


dan*_*gel 15

上面的解决方案在三星Galaxy S和Android 2.3.3上失败了.但我尝试以下解决方法取得了成功:

    webview.loadUrl("file:///android_asset/nonexistent.html");
Run Code Online (Sandbox Code Playgroud)

我强迫webview加载一个不存在的html文件.这似乎迫使webview清理.


Joo*_*lah 7

试试这个:

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

@Override
public void onResume() {
    super.onResume();
    myWebView.resumeTimers();
    myWebView.onResume();
}


@Override
protected void onDestroy() {
    myWebView.destroy();
    myWebView = null;
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)


Bjö*_*hel 5

这是我个人的最爱:

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        webView.loadUrl("about:blank");
    } else {
        webView.onPause();
        webView.pauseTimers();
    }
}

@Override
protected void onResume() {
    super.onResume();
    webView.resumeTimers();
    webView.onResume();
}
Run Code Online (Sandbox Code Playgroud)

如果仅暂停视图,它将暂停Web视图,但是在活动结束时将其清除。

这至少需要Android 3.0-API 11(蜂窝)