2012-06-14 103 views
23

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

问题是,这不是预期的和期望的行为。不幸的是,当浏览器在后台运行时,JavaScript事件不会被抛出,并且我无法使用Javascript捕获和阻止此行为。

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

+0

你在android上使用什么浏览器? –

+0

默认安卓浏览器 – serdar

+0

其实这是所需的行为,它发生在甚至基本的诺基亚symbian手机,假设你听歌,你之间有一个电话,然后从你离开的地方,这些设备的歌曲继续甚至不支持多任务处理,但这个功能无处不在。 – AurA

回答

8

我没有一个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;

这是棘手,但如果你是应该工作使用Ja vaScript控件。

如果您使用本地控件,但播放和暂停将由浏览器界面管理。那么你应该只存储位置,并开始得到真正的肮脏:

  • 删除来源:

    myTrack.removeChid(yourSRCs)

  • 恢复您的SRC和位置上的焦点

  • 等待用户玩

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

///编辑///

的工作的Javascript演示,至少在我的桌面上。尝试在您的ICS: JSFiddle

(保存文件,我想你无法启动的jsfiddle正常在手机上)

+0

这一切都在理论上是有道理的,但我尝试做这样的事情,它只是恢复并继续播放至少30秒。我没有尝试将音量设置为零。但我确实将音频src和音频设置为null,应该完全擦除它!我想相信,但不幸的是,我真的需要看到这个工作演示。 – mahemoff

+0

如果你可以使用JavaScript控件我可以为你设置一个快速演示 – arkihillel

+1

在这里,你去,添加它 – arkihillel

0

也许你可以声明一个布尔跟踪是否需要在手动或不暂停,所以你可以评估其对焦点或其它合适的事件。

0

您是否尝试从DOM中删除音频对象并将其恢复播放?

0

我一个“的onfocus”事件附加到一个布尔开关,以确定音频播放器的以前的状态,如果你得到的焦点与先前的“暂停”状态,则停止播放,否则播放。

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

+0

我见过的问题是缺乏Android浏览器实施的实际问题。除非在Android浏览器上测试此代码,否则它不太可能工作。 – mahemoff

+0

同意 - 音频API(和视频)在Android浏览器上不是很好。我不确定切换到其他应用是否会触发模糊事件,但我编写的代码是基于标准的,并且可以在大多数浏览器中使用。 –