¿Cómo puedo pausar el contenido de Flash en un WebView de Android cuando mi actividad no es visible?

Estoy experimentando con el uso de un WebView para mostrar contenido Flash dentro de mi actividad. Todo está funcionando bastante bien, pero cuando el usuario toca la tecla de inicio para poner la actividad en segundo plano, el contenido de Flash sigue funcionando (el sonido sigue reproduciéndose, etc.)

He notado que tanto el navegador de Android de acciones como el de Dolphin Browser parecen evitar este problema y pausar apropiadamente el contenido de Flash cuando la actividad de navegación se pone en segundo plano.

Idealmente, me gustaría una solución que mata el WebView completamente si la actividad está terminando, pero lo detiene de otra manera (básicamente copiando el comportamiento predeterminado del navegador)

Aquí está una prueba simple que junté que carga un juego en Kongregate que tiene cierta música de fondo:

public class BrowserTest extends Activity { private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWebView = new WebView(this); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setPluginsEnabled(true); mWebView.loadUrl("http://m.kongregate.com/games/Jiggmin/the-game-of-disorientation-mobile"); setContentView(mWebView); } @Override protected void onPause(){ super.onPause(); mWebView.pauseTimers(); if(isFinishing()){ mWebView.loadUrl("about:blank"); setContentView(new FrameLayout(this)); } } @Override protected void onResume(){ super.onResume(); mWebView.resumeTimers(); } } 

He echado un vistazo a la última fuente para el navegador de valores, y parece estar haciendo algo similar (llamando a pauseTimers / resumeTimers), aunque me temo que el código que he estado buscando está fuera de fecha, porque está llamando a funciones que don Parece que ya no existe.

Hice verificar que la llamada a pauseTimers está trabajando probando con un simple JavaScript setInterval que actualiza un contador. ¿Hay algo más obvio que debería estar tratando con respecto a la ventana o ver la gestión?

La documentación para el reproductor Flash móvil dice:

Flash Player también pausará automáticamente la reproducción SWF, no está a la vista o la aplicación de primer plano, por ejemplo, cuando se recibe una llamada o se apaga la alarma, para reducir la utilización de la CPU, el uso de la batería y el uso de la memoria.

Esto parece estar funcionando perfectamente tanto en el navegador de valores como en el navegador de Dolphin, pero no en mi aplicación. Cualquier ideas / soluciones sería muy apreciada!

Actualización: Aquí está la función que terminamos añadiendo a nuestra actividad para que esto funcione. Lo llamamos con "onPause" en la función onPause de la actividad y "onResume" en la función onResume de la actividad:

 private void callHiddenWebViewMethod(String name){ if( mWebView != null ){ try { Method method = WebView.class.getMethod(name); method.invoke(mWebView); } catch (NoSuchMethodException e) { Log.error("No such method: " + name, e); } catch (IllegalAccessException e) { Log.error("Illegal Access: " + name, e); } catch (InvocationTargetException e) { Log.error("Invocation Target Exception: " + name, e); } } } 

2 Solutions collect form web for “¿Cómo puedo pausar el contenido de Flash en un WebView de Android cuando mi actividad no es visible?”

No veo donde ves que BrowserActivity o algo está llamando a pauseTimers() . Veo donde onPause() para BrowserActivity finalmente las rutas a onPause() de WebView . Sin embargo, onPause() de WebView tiene la anotación @hide y por lo tanto no forma parte del SDK. Fuera del manguito, parecería que onPause () es lo que quieres, dado el comentario:

Llame a esto para pausar cualquier procesamiento adicional asociado con esta vista y su DOM asociado / plugins / javascript / etc. Por ejemplo, si la vista se toma fuera de la pantalla, podría llamarse para reducir el tráfico innecesario de la CPU y / o de la red. Cuando la vista vuelva a estar "activa", llame aResume ().

Tenga en cuenta la referencia a "plugins", que no se menciona en la documentación pauseTimers() .

Intentaría usar la reflexión para ver si onPause() (y más tarde onResume() , cuando quieres que las cosas empiecen de nuevo) hace lo que necesitas. Si lo hace, por favor, publique un problema a b.android.com acerca de esto, pidiéndoles que agregue estos métodos (o equivalentes) al SDK. Su requisito parece que será uno común, y una solución que va más allá del SDK no es una buena solución.

 @Override protected void onPause() { super.onPause(); this.callHiddenWebViewMethod("onPause"); } @Override protected void onResume() { super.onResume(); this.callHiddenWebViewMethod("onResume"); } 

Así es como lo llamas en tu actividad … Funciona como un encanto.

  • Android PhoneGap obtener guiñada, tono, rollo, relativo a las coordenadas de tierra
  • Android webview permanecer en la aplicación
  • WebView no carga la página web
  • Cómo obtener la actividad de vista Web para desaparecer con PDF Link Action_view
  • ¿Cómo buscar el contenido del sitio web y ponerlo en la forma en que queremos en el diseño de la aplicación para Android?
  • ¿Qué significa "instalar plugin de Flash" en WebView?
  • Android: mostrar / ocultar fragmento deja un área vacía
  • No se reproduce el video de YouTube en WebView
  • Android carga los datos html en las pestañas personalizadas de cromo
  • Android - Añadir GestureDetector a la vista web
  • Android - AdSense en WebView (para BlackBerry Playbook - Android Runtime)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.