用户按下后Android WebView不会停止

我正在WebView中播放YouTubevideo。 我可以播放它,但是当这个人离开屏幕时,我无法阻止播放音频。

我在onDestroy和onPause中尝试了各种各样的东西,或完全取出它们,但它们似乎没有什么区别。

有人知道为什么音频会继续播放并且即使在关闭应用并且用户打开其他应用后也不会停止播放?

这是我全class的代码:

import com.flurry.android.FlurryAgent; import utils.SendEmail; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.KeyEvent; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebSettings.PluginState; import android.widget.Button; public class YoutubeActivity extends Activity { WebView webview = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webview = new WebView(this); setContentView(webview); webview.getSettings().setAppCacheEnabled(false); webview.getSettings().setJavaScriptEnabled(true); webview.setInitialScale(1); webview.getSettings().setPluginState(PluginState.ON); WebSettings webSettings = webview.getSettings(); webSettings.setLoadsImagesAutomatically(true); webSettings.setLoadWithOverviewMode(true); webSettings.setBuiltInZoomControls(true); webSettings.setUseWideViewPort(true); webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } }); webview.setWebChromeClient(new WebChromeClient(){}); webSettings.setDomStorageEnabled(true); webSettings.setAppCacheEnabled(true); webSettings.setAppCachePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/cache"); webSettings.setDatabaseEnabled(true); webSettings.setDatabasePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/databases"); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( YoutubeActivity.this); String url_to_watch = prefs.getString( "url_to_watch" , null ); webview.loadUrl(url_to_watch); } @Override public void onPause() { super.onPause(); try { if ( webview != null ) { webview.clearCache(true); webview.getSettings().setAppCacheEnabled(false); webview.stopLoading(); webview.destroy(); sendEmail ("in pause " , ""); webview = new WebView(this); } this.finish(); } catch ( Exception e ) { } } @Override public void onDestroy() { super.onDestroy(); try { if ( webview != null ) { webview = new WebView(this); // To try to reset the webview - didn't work. } } catch ( Exception e ) { } } @Override public void onStop() { super.onStop(); FlurryAgent.onEndSession(this); try { if ( webview != null ) { webview.clearView(); webview.getSettings().setAppCacheEnabled(false); webview.stopLoading(); webview.destroy(); sendEmail ("in stop " , ""); } } catch ( Exception e ) { } this.finish(); } @Override protected void onResume() { super.onResume(); try { webview.onResume(); } catch ( Exception e ) { } } @Override protected void onRestart() { super.onRestart(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } // Subject , body public void sendEmail( String subject , String body ) { String[] params = new String[] { "http://www.problemio.com/problems/send_email_mobile.php", subject, body }; SendEmail task = new SendEmail(); task.execute(params); } //@Override public void onPageFinished(WebView view, String url) { //super.onPageFinished(view, url); view.clearCache(true); } public void onBackPressed ( ) { final AlertDialog.Builder linkedin_builder = new AlertDialog.Builder(this); linkedin_builder.setMessage("" + "Go back to the home screen?") .setCancelable(false) .setNegativeButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { if ( webview != null ) { webview.destroy(); } Intent myIntent = new Intent(YoutubeActivity.this, MainActivity.class); YoutubeActivity.this.startActivity(myIntent); } }) .setPositiveButton("NO", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }) ; AlertDialog alert = linkedin_builder.create(); alert.show(); } @Override protected void onStart() { super.onStart(); FlurryAgent.onStartSession(this, "4VYNFK3V6RCZ53CZ3J32"); } } 

有关什么可能阻止音频播放以及可能导致音频播放的任何想法? 谢谢!

Solutions Collecting From Web of "用户按下后Android WebView不会停止"

试试这个,希望它有所帮助:

 @Override public void onPause() { myWebView.onPause(); myWebView.pauseTimers(); super.onPause(); } @Override public void onResume() { super.onResume(); myWebView.resumeTimers(); myWebView.onResume(); } @Override protected void onDestroy() { myWebView.destroy(); myWebView = null; super.onDestroy(); } 

你应该致电:

 webView.loadUrl("about:blank"); 

它将销毁所有音频/video以及Javasript对象,并停止webview上的所有运行function

取自https://stackoverflow.com/a/17690221/3032209 :

您应该分别从Activity的onPause()和onResume()调用WebView的onPause()和onResume()。

暂停与此WebView及其关联的DOM,插件,JavaScript等相关的任何额外处理。例如,如果此WebView从屏幕上移除,则可以调用此方法以减少不必要的CPU或网络流量。 当此WebView再次“活动”时,请调用onResume()。

在某些或所有设备中,没有任何东西可以帮助我。 这是我猜的确切解决方案。 为我工作得很好。

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

或者对于API> = 11,您可以使用_webview.onPause(); 在活动的/片段的onPause上

 public void onPause() { // TODO Auto-generated method stub super.onPause(); _webview.onPause(); } 

在activity的onDestroy()

 @Override protected void onDestroy() { super.onDestroy(); webView.destroy(); } 

您可以使用Activity onPause()方法来执行此操作:

 @override public void onPause() { super.onPause(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { webview.onPause(); } } 

添加validation以在API中使用> = 11(Honeycomb)