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.

23
demandé sur serdar 2012-06-14 18:59:35

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)

8
répondu arkihillel 2012-08-01 05:24:15

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.

1
répondu Joe Johnson 2012-08-03 02:08:18

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é.

0
répondu Diogo Schneider 2012-07-30 16:29:53

Avez-vous essayé de supprimer l'objet audio du DOM et de le restaurer en lecture?

0
répondu wmarbut 2012-07-31 01:57:27

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.

0
répondu user1555320 2012-07-31 16:17:06