我的 HTML5 游戏有一些在“html5”模式下使用 Howler.js 的背景音乐,这显然会触发 Chrome for Android 的媒体播放通知。这意味着当用户在任何选项卡中打开我的游戏时会出现一条通知:
游戏是一个好公民,当标签不在焦点上时会暂停音乐,所以不需要这个通知。它甚至令人困惑,因为用户可以在不进入游戏的情况下暂停和恢复游戏的背景音乐。但我找不到摆脱通知的方法。
我尝试调用stop()
而不是pause()
或mute()
在音乐对象上调用,但这不会删除通知。
再深入一点,我发现了据说可以用来控制通知的实验性MediaSession
API(W3C 草案)。但是,如果我理解正确,它无法完全禁用它!
我在我的应用程序开始时尝试了这个:
if (typeof navigator.mediaSession == 'object') {
navigator.mediaSession.playbackState = 'none'
}
但是,这仅设置声明的播放状态(在规范术语中)。并将其设置为'none'
无效:
实际播放状态按以下方式计算:
- 如果声明的播放状态为“正在播放”,则返回“正在播放”。
- 否则,返回猜测的播放状态。
而猜测的播放状态是我无法控制的;它是由浏览器根据<audio>
页面上元素的状态派生的。
是否有可能我忽略了,或者这只是当前 MediaSession 规范中的疏忽?