Поведение звука HTML5


У меня есть аудиоэлемент на странице HTML5. Я начинаю проигрывать звук, а затем приостанавливаю его. После этого я возвращаюсь на рабочий стол, нажав кнопку home и делаю телефонный звонок. Когда вызов заканчивается, звуковой элемент возобновляется автоматически. Это происходит на Android 4.0.3

Проблема в том, что это не ожидаемое и желаемое поведение. К сожалению, когда браузер работает в фоновом режиме, события javascript не выбрасываются, и я не могу поймать и предотвратить это поведение с помощью Яваскрипт.

Любая помощь приветствуется. Заранее спасибо.

5 23

5 ответов:

У меня нет телефона ICS, чтобы попробовать его, но вот что я бы сделал:

pause очевидно, отслеживает положение аудио времени. 4.0, кажется, автоматически возобновляется там, где вы приостановили аудиофайл

Так что вместо паузы вы можете stop Ваш аудиофайл. К сожалению, stop не поддерживается HTML5.

У вас есть хитрое решение:

  • pause аудио
  • запомните позицию: trackPos = myTrack.currentTime;
  • объем хранилища: trackVol = myTrack.volume;
  • приглушить его: myTrack.volume = 0;

Затем, когда пользователь возвращается и снова нажимает play:

Если trackPos существует

  • задайте начальную позицию для trackPos: myTrack.currentTime = trackPos;
  • play
  • mytrack.volume = trackVol;
  • delete window.trackPos;

Это сложно, но должно работать, если вы используете элементы управления JavaScript.

Если вы используете собственные элементы управления, хотя воспроизведение и пауза будут управляться интерфейсом браузера. Затем вы должны просто сохранить позицию и начать получать Настоящий грязный:

  • Удалить источники:

    MyTrack.removeChid (yourSRCs)

  • Восстановите ваши SRCs и положение на Фокусе

  • Дождитесь, пока пользователь сыграет

Это быстрый и грязный Черновик, не проверенный. Но это должно сработать

///править///

Рабочая демонстрация Javascript, по крайней мере на моем рабочем столе. Попробуйте это на ваших ИС: JSFiddle

(сохранить файл, я думаю, вы не можете правильно запустить jsfiddle на телефоне)

Попробуйте выполнить следующие действия в блоке скрипта. Это должно сработать.

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;

Полагаю, вам не нужно событие onfocus. Но, его здесь для примера переключения.

Возможно, вы могли бы объявить логическое значение, чтобы отслеживать, остановились ли вы вручную или нет, чтобы вы могли оценить его по фокусу или другому правильному событию.

Вы пробовали удалить аудиообъект из DOM и восстановить его при воспроизведении?

Я бы прикрепил событие "onFocus" к логическому переключателю, чтобы определить предыдущее состояние аудиоплеера, если вы получаете фокус с предыдущим состоянием "paused", а затем останавливаете плеер или воспроизводите его.