如何停止在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 >= 11
(Honeycomb
)
这是尝试在此页面上提供的每个代码后,最终工作。 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(); }