23

我在 HTML5 页面中有一个音频元素。我开始播放音频,然后暂停。之后,我通过按主页按钮返回主屏幕并拨打电话。通话结束时,音频元素会自动恢复。这发生在 Android 4.0.3

问题是,这不是预期和期望的行为。不幸的是,当浏览器在后台运行时,不会引发 javascript 事件,我无法使用 Javascript 捕捉和阻止这种行为。

任何帮助表示赞赏。提前致谢。

4

5 回答 5

8

我没有 ICS 手机可以试用,但我会这样做:

pause显然跟踪音频时间位置。4.0 似乎会自动恢复您暂停音频文件的位置

stop因此,您可以使用音频文件而不是暂停。不幸的是,stopHTML5 不支持。

你有一个棘手的解决方案:

  • pause声音的
  • 存储位置:trackPos = myTrack.currentTime;
  • 存储量:trackVol = myTrack.volume;
  • 静音:myTrack.volume = 0;

然后当用户回来并再次点击播放时:

如果 trackPos 存在

  • 将起始位置设置为 trackPos:myTrack.currentTime = trackPos;
  • play
  • mytrack.volume = trackVol;
  • delete window.trackPos;

这很棘手,但如果您使用 JavaScript 控件,它应该可以工作。

如果您使用本机控件,则播放和暂停将由浏览器界面管理。然后你应该只存储位置并开始变得非常脏:

  • 删除来源:

    myTrack.removeChid(yourSRCs)

  • 恢复您的 SRC 和焦点位置

  • 等待用户播放

这是一个快速而肮脏的草稿,未经测试。但它应该工作

///编辑///

一个有效的 Javascript 演示,至少在我的桌面上。在你的 ICS 上试试: JSFiddle

(保存文件,我猜你无法在手机上正确启动 jsfiddle)

于 2012-07-31T19:33:14.783 回答
1

在脚本块中尝试以下操作。它应该工作。

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 事件。但是,这里是一个切换的例子。

于 2012-08-03T01:31:25.027 回答
0

我将使用布尔开关附加一个“onFocus”事件以确定音频播放器的先前状态,如果您以先前的“暂停”状态获得焦点,则停止播放器,否则播放它。

于 2012-07-31T16:17:06.437 回答
0

也许你可以声明一个布尔值来跟踪你是否手动暂停,这样你就可以在焦点或其他适当的事件上评估它。

于 2012-07-30T16:29:53.237 回答
0

您是否尝试过从 DOM 中删除音频对象并在播放时恢复它?

于 2012-07-31T01:57:27.553 回答