Поведение HTML5 Audio
У меня есть аудио-элемент на странице HTML5. Я начинаю играть аудио, а затем приостанавливаю его. После этого я вернусь на рабочий стол, нажав кнопку "домой" и сделав телефонный звонок. Когда вызов заканчивается, аудио-элемент возобновляется автоматически. Это происходит на Android 4.0.3
Проблема в том, что это не ожидаемое и желаемое поведение. К сожалению, когда браузер работает в фоновом режиме, события javascript не выбрасываются, и я не могу поймать и предотвратить это поведение с помощью Javascript.
Любая помощь приветствуется. Спасибо заранее.
Ответы
Ответ 1
У меня нет телефона ICS, чтобы попробовать, но вот что я сделал бы:
pause
, очевидно, отслеживает положение аудиопотока.
4.0 автоматически возобновляется, когда вы приостановили аудиофайл
Итак, вместо паузы вы могли бы stop
записать аудиофайл.
К сожалению, stop
не поддерживается HTML5.
У вас есть сложное решение:
-
pause
аудио
- сохранить позицию:
trackPos = myTrack.currentTime;
- объем магазина:
trackVol = myTrack.volume;
- отключить звук:
myTrack.volume = 0;
Затем, когда пользователь возвращается и снова проигрывает:
, если trackPos существует
- установите начальную позицию в trackPos:
myTrack.currentTime = trackPos;
-
play
-
mytrack.volume = trackVol;
-
delete window.trackPos;
Это сложно, но должно работать, если вы используете элементы управления JavaScript.
Если вы используете собственные элементы управления, хотя воспроизведение и пауза будут управляться интерфейсом браузера. Затем вы должны просто сохранить позицию и начать получать REAL грязно:
-
удалите источники:
myTrack.removeChid(yourSRCs)
-
восстановить ваши SRC и положение в фокусе
-
подождите, пока пользователь будет проигрывать
Это быстрый и грязный проект, не проверенный. Но он должен работать
//////РЕДАКТИРОВАТЬ
Рабочая демонстрация Javascript, по крайней мере, на моем рабочем столе. Попробуйте на своем ICS:
JSFiddle
(сохраните файл, я думаю, вы не можете правильно запустить jsfiddle на телефоне)
Ответ 2
Попробуйте выполнить следующее в блоке script. Он должен работать.
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. Но вот здесь пример для переключения.
Ответ 3
Возможно, вы могли бы объявить логическое значение для отслеживания, которое вы приостановили вручную или нет, чтобы вы могли оценить его в фокусе или другом правильном событии.
Ответ 4
Вы пытались удалить звуковой объект из DOM и восстановить его при воспроизведении?
Ответ 5
Я бы привязал событие onFocus к логическому переключателю, чтобы определить предыдущее состояние аудиоплеера, если вы сосредоточитесь с предыдущим "приостановленным" состоянием, а затем остановите плеер или запустите его.