如何停止在我的网页浏览中播放的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");
请参阅以下有关WebView threads never stopping的文章
基本上你需要从你自己的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) {
...
}
}
请注意,上面try块中的变量“webview”是类的私有实例变量,并在Activity的onCreate方法中赋值。
你可以试试这个
@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);
}
如果正在加载的页面是您可以编辑的页面,那么您可以编写一个javascript方法来停止音频并在您想要停止时调用。
Javascript功能
@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();
}
来自Android调用此方法
webView.loadUrl("javascript:document.location=document.location");
如果你不能编辑页面,你可以注入js代码
function stopAudio(){
audios=document.querySelectorAll('audio');
for(i=0;i<audios.length;i++){
audios[i].stop();
}
}
webView.loadUrl("javascript:stopAudio()");
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
injectScriptFile(view, "js/script.js");
}
为我工作。
How to Inject See Here in Detail
你可以使用你的This的方法@Override
protected void onPause() {
super.onPause();
if (wViewCampaign != null){
wViewCampaign.stopLoading();
wViewCampaign.loadUrl("");
wViewCampaign.reload();
wViewCampaign = null;
}
}
执行WebView的方法onPause()
来实现:
onPause()
Activity
(@override
public void onPause() {
super.onPause();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
webview.onPause();
}
}
)这是在尝试本页面提供的每个代码后最终工作的内容。 UFF!
API >= 11
上面的方法对我不起作用,一个对我有用的方法是:
Honeycomb
我尝试了以上所有答案,但大多数都不适合我。所以我只想编写自己的解决方案,在webview中播放的所有类型的媒体中都能正常工作
@Override
protected void onPause() {
super.onPause();
if (mWebView != null) {
mWebView.stopLoading();
mWebView.reload();
}
}
@Override
protected void onResume() {
super.onResume();
}
在我的情况下,播放器在WebView为“onPause”后继续运行。所以我在播放视频或音乐之前检查WebView是否附加到窗口。
用于检查WebView的“isAttachedToWindow()”的JavaScriptInterface方法返回true / false。
(而且我没有忘记在Activity / Fragment中调用onPause / onResume。)
这段代码非常适合我。
@Override
protected void onPause() {
super.onPause();
((AudioManager)getSystemService(
Context.AUDIO_SERVICE)).requestAudioFocus(
new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {}
}, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
}
解决方案:1 - 花了很多时间后,我得出结论暂停正在播放HTML的WebView <iframe>
概念的视频。
只要在你使用qazxsw poi的地方覆盖Activity或Fragment上的qazxsw poi方法,并调用它。这个对我有用。
onPause()
解决方案:2 - 如果上述解决方案对您不起作用,则可以强制WebView加载不存在的html文件。
WebView
你还必须实现onResume()方法或第二次它不起作用
@Override
public void onPause() {
super.onPause();
mWebView.onPause();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();
}
上面的解决方案在三星Galaxy S和Android 2.3.3上失败了。但我尝试以下解决方法取得了成功:
mWebview.loadUrl("file:///android_asset/nonexistent.html");
我强迫webview加载一个不存在的html文件。这似乎迫使webview清理。
试试这个:
@Override
public void onResume()
{
super.onResume();
webView.onResume();
}
@Override
public void onPause()
{
super.onPause();
webView.onPause();
}
这是我个人的最爱:
webview.loadUrl("file:///android_asset/nonexistent.html");
如果视图仅暂停,它会暂停webview,但在活动结束时将其清除。
这需要至少Android 3.0 - API 11(Honeycomb)
@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();
}
有用
Webview.loadUrl( “关于:空白”);
它也在工作
在遇到这个问题后,似乎onPause可能没有做任何事情......对我而言,它并没有停止在后台播放的任何内容。
所以我的代码现在看起来像
@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();
}
希望它可以帮助任何与我有同样问题的人