Comportement audio HTML5
J'ai un élément audio dans une page HTML5. Je commence à jouer l'audio, puis je le mets en pause. Après cela, je retourne à l'écran d'accueil en appuyant sur le bouton Accueil et faire un appel téléphonique. Lorsque l'appel se termine, élément audio reprend automatiquement. Cela se produit sur Android 4.0.3
Le problème est que, ce n'est pas le comportement attendu et souhaité. Malheureusement, lorsque le navigateur fonctionne en arrière-plan, les événements javascript ne sont pas lancés et je ne peux pas attraper et empêcher ce comportement en utilisant JavaScript.
Toute aide est appréciée. Merci à l'avance.
5 réponses
Je n'ai pas de téléphone ICS pour l'essayer, Mais voici ce que je ferais:
pause
évidemment, garde une trace de la position de l'heure audio.
4.0 semble reprendre automatiquement là où vous avez mis en pause le fichier audio
Donc, au lieu de faire une pause, vous pouvez stop
votre fichier audio.
Malheureusement, stop
n'est pas supporté par HTML5.
Vous avez une solution délicate:
-
pause
audio - mémorise la position:
trackPos = myTrack.currentTime;
- volume du magasin:
trackVol = myTrack.volume;
- coupez-le:
myTrack.volume = 0;
Ensuite, lorsque l'utilisateur revient et frappe à nouveau play:
Si trackPos existe
- définissez la position de départ sur trackPos:
myTrack.currentTime = trackPos;
play
mytrack.volume = trackVol;
delete window.trackPos;
C'est délicat, mais devrait fonctionner si vous utilisez des contrôles JavaScript.
Si vous utilisez des contrôles natifs, la lecture et la pause seront gérées par l'interface du navigateur. Ensuite, vous devriez simplement stocker la position et commencer à obtenir Réel sale:
-
Supprimer les sources:
MyTrack.removeChid (yourSRCs)
-
Restaurer vos SRCs et la position sur le focus
Attendre que l'utilisateur de jouer
C'est un Brouillon rapide et sale, non testé. Mais ça devrait marcher
///MODIFIER///
Une démo JavaScript qui fonctionne, au moins sur mon bureau. Essayez-le sur votre ICS: JSFiddle
(enregistrez le fichier, je suppose que vous ne pouvez pas Lancez jsfiddle correctement sur un téléphone)
Essayez ce qui suit dans un bloc de script. Il devrait fonctionner.
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;
Vous n'avez pas besoin de l'événement onfocus, je suppose. Mais, ici pour un exemple de basculement.
Peut-être que vous pourriez déclarer un booléen pour garder une trace si vous avez fait une pause manuellement ou non, de sorte que vous pouvez l'évaluer sur le focus ou un autre événement approprié.
Avez-vous essayé de supprimer l'objet audio du DOM et de le restaurer en lecture?
J'attacherais un événement 'onFocus' à l'avec un commutateur booléen pour déterminer l'état précédent du lecteur audio, si vous obtenez la mise au point avec un État 'pause' précédent, arrêtez le lecteur, ou bien jouez-le.