23 votes

Comportement audio HTML5

J'ai un élément audio dans une page HTML5. Je lance la lecture de l'audio, puis je la mets en pause. Ensuite, je retourne à l'écran d'accueil en appuyant sur le bouton home et je passe un appel téléphonique. Lorsque l'appel se termine, l'é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 tourne en arrière-plan, les événements javascript ne sont pas lancés et je ne peux pas attraper et empêcher ce comportement à l'aide de Javascript.

Toute aide est la bienvenue. Merci d'avance.

8voto

H17737 Points 185

Je n'ai pas de téléphone ICS pour l'essayer, mais voici ce que je ferais :

pause garde évidemment la trace de la position temporelle de l'audio. La version 4.0 semble reprendre automatiquement le fichier audio à l'endroit où vous l'avez mis en pause.

Ainsi, au lieu de faire une pause, vous pourriez stop votre fichier audio. Malheureusement, ce n'est pas le cas, stop n'est pas pris en charge par HTML5.

Vous avez une solution délicate :

  • pause audio
  • enregistrer la position : trackPos = myTrack.currentTime;
  • le volume du magasin : trackVol = myTrack.volume;
  • le mettre en sourdine : myTrack.volume = 0;

Puis, lorsque l'utilisateur revient et appuie à nouveau sur play :

si trackPos existe

  • fixe la position de départ à trackPos : myTrack.currentTime = trackPos;
  • play
  • mytrack.volume = trackVol;
  • delete window.trackPos;

Cette opération est délicate mais devrait fonctionner si vous utilisez des contrôles JavaScript.

Si vous utilisez les contrôles natifs, la lecture et la pause seront gérées par l'interface du navigateur. Dans ce cas, il suffit de stocker la position et de commencer à se salir les mains :

  • supprimer les sources :

    myTrack.removeChid( yourSRCs )

  • rétablir vos CRS et vous positionner sur le focus

  • attendre que l'utilisateur joue

Il s'agit d'une ébauche rapide, qui n'a pas été testée. Mais cela devrait fonctionner

///EDIT///

Une démo Javascript qui fonctionne, du moins sur mon bureau. Essayez-la sur votre ICS : JSFiddle

(sauvegarder le fichier, j'imagine qu'on ne peut pas lancer correctement jsfiddle sur un téléphone)

1voto

Joe Johnson Points 1025

Essayez ce qui suit dans un bloc script. Cela 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 il est là pour donner un exemple de basculement.

0voto

Diogo Schneider Points 49

Peut-être pourriez-vous déclarer un booléen pour savoir si vous avez fait une pause manuelle ou non, afin de pouvoir l'évaluer lors d'un focus ou d'un autre événement approprié.

0voto

wmarbut Points 1701

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

0voto

user1555320 Points 395

Je joindrais un événement "onFocus" à l'événement avec un commutateur booléen pour déterminer l'état précédent du lecteur audio, si vous obtenez le focus avec un état précédent "pausé", alors arrêtez le lecteur, ou bien jouez-le.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X