Comportamiento de audio HTML5
Tengo un elemento de audio en una página HTML5. Comienzo a reproducir el audio y luego lo detengo. Después de eso vuelvo a la pantalla de inicio presionando el botón de inicio y hacer una llamada telefónica. Cuando termina la llamada, el elemento de audio se reanuda automáticamente. Esto ocurre en Android 4.0.3
El problema es que, este no es el comportamiento esperado y deseado. Lamentablemente, cuando el navegador se ejecuta en segundo plano, los eventos javascript no se lanzan y no puedo capturar y evitar este comportamiento con Javascript.
- ¿Alternativas a window.scrollMaxY?
- Interceptar llamada de red desde Android Java / JNI
- Android 2.2 y 2.3 descarga de PDF a través de HTTPS parece roto
- Navegador Android: touchcancel está siendo disparado aunque touchmove tiene preventDefault
- La navegación privada está obsoleta en Android WebView desde la API 17. ¿Cuál es la alternativa?
Cualquier ayuda es apreciada. Gracias por adelantado.
- -webkit-transform no funciona en la vista web de Android
- WebView hace que SQLiteDiskIOException
- Cada navegador basado en WebKit bloquea sitios usando Omniture. ¿Por qué?
- CSS: -webkit-touch-callout alternativas para android
- OnPageFinished no disparar correctamente al procesar la página web
- ¿Hay alguna forma de eliminar el retraso de clics en los dispositivos móviles de contacto?
- Obtiene la última URL cargada de webview sin hacer un webView.goBack () en Android
- Añadir encabezados personalizados a las solicitudes de recursos de WebView - android
No tengo un teléfono ICS para probarlo, pero esto es lo que haría:
pause
obviamente, mantiene un seguimiento de la posición del tiempo de audio. 4.0 parece que reanuda automáticamente donde detuvo el archivo de audio
Así que en lugar de pausar puede stop
su archivo de audio. Desafortunadamente, stop
no es compatible con HTML5.
Usted tiene una solución difícil:
-
pause
audio - Almacene la posición:
trackPos = myTrack.currentTime;
- Volumen de la tienda:
trackVol = myTrack.volume;
- Silenciarlo:
myTrack.volume = 0;
Entonces cuando el usuario vuelve y golpea jugar de nuevo:
Si trackPos existe
- Establecer la posición inicial a trackPos:
myTrack.currentTime = trackPos;
-
play
-
mytrack.volume = trackVol;
-
delete window.trackPos;
Esto es complicado pero debería funcionar si está utilizando controles JavaScript.
Si utiliza controles nativos, aunque la reproducción y la pausa se gestionarían mediante la interfaz del navegador. Entonces usted debe apenas almacenar la posición y comenzar a conseguir REAL sucio:
-
Eliminar las fuentes:
MyTrack.removeChid (suSRCs)
-
Restaurar sus SRCs y la posición en el enfoque
-
Espere a que el usuario juegue
Es un tiro rápido y sucio, no probado. Pero debería funcionar
///EDITAR///
Una demo de JavaScript que funciona, al menos en mi escritorio. Pruébelo en su ICS: JSFiddle
(Guardar el archivo, supongo que no se puede iniciar jsfiddle correctamente en un teléfono)
Pruebe lo siguiente en un bloque de secuencia de comandos. Deberia de funcionar.
var ppAudio = function(event){ var ppMethod = (event.type == "blur")? "pause" : "play", audio = document.getElementsByTagName("audio"), l = audio.length; for (;l--;) audio[l][ppMethod](); }; // window.onfocus = ppAudio; window.onblur = ppAudio;
No necesitas el evento onfocus, supongo. Pero, su aquí para un ejemplo de toggling.
Tal vez usted podría declarar un booleano para mantener la pista si se detuvo manualmente o no, por lo que podría evaluar en el foco u otro evento adecuado.
¿Ha intentado eliminar el objeto de audio del DOM y restaurarlo en el juego?
Adjuntaría un evento 'onFocus' al con un conmutador booleano para determinar el estado anterior del reproductor de audio, si obtienes el foco con un estado de pausa anterior y luego detener el reproductor, o bien reproducirlo.
- Después de la actualización – crash com.google.android.gms: play-services: 5.2.8
- Cómo imprimir un archivo de texto con WiFi Direct