¿Cómo detener la reproducción de videos de youtube en la vista web de Android?

¿Cómo puedo detener un video de YouTube que se reproduce en mi vista web? Cuando hago clic en el botón Atrás, el video no se detiene y continúa en segundo plano.

Código:

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

Consulte la siguiente publicación sobre los hilos de WebView que nunca se detienen

Básicamente, deberás llamar al método onPause de WebView desde el método OnPause de tu propia actividad.

El único truco con esto es que no puedes llamar al método onPause de WebView directamente porque está oculto. Por lo tanto, deberá llamarlo indirectamente a través de la reflexión. El siguiente código debería ayudarlo a comenzar a configurar su propio método 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) { ... } } 

Tenga en cuenta que la variable ‘webview’ en el bloque try anterior es una variable de instancia privada para la clase y está asignada en el método onCreate de la actividad.

Solución: 1 – Después de pasar mucho tiempo, obtuve la conclusión de pausar el video que se está reproduciendo con el concepto de HTML WebView .

Simplemente anule el método onPause() en Actividad o Fragmento donde quiera que use WebView , y onPause() . Esto funciona para mi.

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

Solución: 2 – Si la solución anterior no funciona para usted, puede forzar a WebView a cargar un archivo html no existente.

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

también debe implementar el método onResume () o por segunda vez no funcionará

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

La solución anterior falló para mí en Samsung Galaxy S con Android 2.3.3. Pero logré el éxito probando la siguiente solución:

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

Estoy forzando que la vista web cargue un archivo html no existente. Esto parece estar forzando a la vista web a limpiar las cosas.

Prueba esto:

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

funciona

Y aquí está mi favorito personal:

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

Pausa la vista web si la vista solo está en pausa, pero se borra cuando finaliza la actividad.

Esto requiere al menos Android 3.0 – API 11 (Honeycomb)

Webview.loadUrl (“sobre: ​​en blanco”);

también está funcionando

Después de haber encontrado este problema, parece que OnPause podría no estar haciendo nada … para mí no fue detener lo que estaba sonando en segundo plano.

entonces mi código ahora se ve como

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

Espero que ayude a cualquiera con el mismo problema que yo

Esto funciona para mí

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

puedes intentar esto

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

si la página que está cargando es una que puede editar, entonces puede escribir un método de javascript que detenga el audio y llame cuando quiera detenerse.

Función Javascript

  function stopAudio(){ audios=document.querySelectorAll('audio'); for(i=0;i 

Desde Andorid Llama a este método

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

si la página no es editable, puede insertar el código js

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

Cómo inyectarse Vea aquí en detalle

Puedes hacerlo usando el método onPause() de WebView cuando se ejecuta el método onPause() de tu Activity :

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

Esto es lo que finalmente funcionó después de probar todos y cada uno de los códigos provistos en esta página. Uff!

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

El enfoque anterior no funcionó para mí, uno que funcionó para mí es:

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

Este código funciona perfecto para mí.

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