如何停止在Android的webview播放YouTubevideo?

如何停止在我的networking视图中播放的YouTubevideo? 当我点击后退button,video不会停止,而是继续在后台。

码:

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"); 

看到关于WebView线程永不停止的以下文章

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

唯一的技巧就是你不能直接调用WebView的onPause方法,因为它是隐藏的。 因此,您需要通过reflection来间接调用它。 下面的代码应该让你开始设置你自己的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) { ... } } 

请注意,上面的try块中的variables“webview”是该类的一个私有实例variables,并在Activity的onCreate方法中分配给它。

解决scheme:1 –花了很多时间后,我得出结论暂停正在播放HTML视图的WebView <iframe>概念。

只需在使用WebView Activity或Fragment上覆盖onPause()方法,然后调用它。 它适用于我。

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

解决scheme:2 –如果上面的解决scheme不适合你,那么你可以强制WebView加载一个不存在的HTML文件。

 mWebview.loadUrl("file:///android_asset/nonexistent.html"); 

您还必须实施onResume()方法或第二次不工作

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

上面的解决scheme在Android 2.3.3的三星Galaxy S上失败了。 但是我尝试了下面的解决方法,取得了成功:

  webview.loadUrl("file:///android_asset/nonexistent.html"); 

我迫使webview加载一个不存在的HTML文件。 这似乎是迫使webview来清理。

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==event.KEYCODE_BACK) { mWebview.loadUrl(""); mWebview.stopLoading(); finish(); } return super.onKeyDown(keyCode, event); } 

有用

这是我个人的最爱:

 @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(); } 

如果视图只是暂停,它将暂停Web视图,但在活动完成时将其清除。

这至less需要Android 3.0 – API 11(蜂窝)

Webview.loadUrl( “关于:空白”);

它也在工作

遇到这个问题后,似乎onPause可能不会做任何事情…对我来说,它并不会阻止任何在后台播放。

所以我的代码现在看起来像

 @Override protected void onPause() { mWebView.onPause(); super.onPause(); } @Override protected void onResume() { mWebView.onResume(); super.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { mWebView.saveState(outState); super.onSaveInstanceState(outState); } @Override protected void onDestroy() { mWebView.destroy(); mWebView = null; super.onDestroy(); } 

希望它能帮助和我一样的问题

尝试这个:

 @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(); } 

这对我有用。

 @Override protected void onPause() { super.onPause(); if (wViewCampaign != null){ wViewCampaign.stopLoading(); wViewCampaign.loadUrl(""); wViewCampaign.reload(); wViewCampaign = null; } } 

你可以试试这个

 webView.loadUrl("javascript:document.location=document.location"); 

如果正在加载的页面是可以编辑的页面,那么您可以编写一个JavaScript方法,当您想要停止时停止audio和呼叫。

Javascriptfunction

  function stopAudio(){ audios=document.querySelectorAll('audio'); for(i=0;i<audios.length;i++){ audios[i].stop(); } } 

从Andorid调用这个方法

 webView.loadUrl("javascript:stopAudio()"); 

如果页面不能被你编辑,你可以注入js代码

  @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); injectScriptFile(view, "js/script.js"); } 

如何在这里详细注入

你可以通过使用WebView的onPause()方法来执行Activity onPause()方法:

 @override public void onPause() { super.onPause(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ webview.onPause(); } } 
  • 适用于API >= 11Honeycomb

这是尝试在此页面上提供的每个代码后,最终工作。 UFF!

 @Override protected void onPause() { super.onPause(); if (mWebView != null) { mWebView.stopLoading(); mWebView.reload(); } } @Override protected void onResume() { super.onResume(); } 

这段代码适合我。

  @Override protected void onPause() { super.onPause(); wv.onPause(); wv.pauseTimers(); } @Override protected void onResume() { super.onResume(); wv.resumeTimers(); wv.onResume(); }