我在 HTML5 页面中有一个音频元素。我开始播放音频,然后暂停。之后,我通过按主页按钮返回主屏幕并拨打电话。通话结束时,音频元素会自动恢复。这发生在 Android 4.0.3
问题是,这不是预期和期望的行为。不幸的是,当浏览器在后台运行时,不会引发 javascript 事件,我无法使用 Javascript 捕捉和阻止这种行为。
任何帮助表示赞赏。提前致谢。
我在 HTML5 页面中有一个音频元素。我开始播放音频,然后暂停。之后,我通过按主页按钮返回主屏幕并拨打电话。通话结束时,音频元素会自动恢复。这发生在 Android 4.0.3
问题是,这不是预期和期望的行为。不幸的是,当浏览器在后台运行时,不会引发 javascript 事件,我无法使用 Javascript 捕捉和阻止这种行为。
任何帮助表示赞赏。提前致谢。
我没有 ICS 手机可以试用,但我会这样做:
pause
显然跟踪音频时间位置。4.0 似乎会自动恢复您暂停音频文件的位置
stop
因此,您可以使用音频文件而不是暂停。不幸的是,stop
HTML5 不支持。
你有一个棘手的解决方案:
pause
声音的trackPos = myTrack.currentTime;
trackVol = myTrack.volume;
myTrack.volume = 0;
然后当用户回来并再次点击播放时:
如果 trackPos 存在
myTrack.currentTime = trackPos;
play
mytrack.volume = trackVol;
delete window.trackPos;
这很棘手,但如果您使用 JavaScript 控件,它应该可以工作。
如果您使用本机控件,则播放和暂停将由浏览器界面管理。然后你应该只存储位置并开始变得非常脏:
删除来源:
myTrack.removeChid(yourSRCs)
恢复您的 SRC 和焦点位置
等待用户播放
这是一个快速而肮脏的草稿,未经测试。但它应该工作
///编辑///
一个有效的 Javascript 演示,至少在我的桌面上。在你的 ICS 上试试: 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 事件。但是,这里是一个切换的例子。
我将使用布尔开关附加一个“onFocus”事件以确定音频播放器的先前状态,如果您以先前的“暂停”状态获得焦点,则停止播放器,否则播放它。
也许你可以声明一个布尔值来跟踪你是否手动暂停,这样你就可以在焦点或其他适当的事件上评估它。
您是否尝试过从 DOM 中删除音频对象并在播放时恢复它?