7

我的 HTML5 游戏有一些在“html5”模式下使用 Howler.js 的背景音乐,这显然会触发 Chrome for Android 的媒体播放通知。这意味着当用户在任何选项卡中打开我的游戏时会出现一条通知:

游戏是一个好公民,当标签不在焦点上时会暂停音乐,所以不需要这个通知。它甚至令人困惑,因为用户可以在不进入游戏的情况下暂停和恢复游戏的背景音乐。但我找不到摆脱通知的方法。

我尝试调用stop()而不是pause()mute()在音乐对象上调用,但这不会删除通知。

再深入一点,我发现了据说可以用来控制通知的实验性MediaSessionAPIW3C 草案)。但是,如果我理解正确,它无法完全禁用它!

我在我的应用程序开始时尝试了这个:

if (typeof navigator.mediaSession == 'object') {
  navigator.mediaSession.playbackState = 'none'
}

但是,这仅设置声明的播放状态(在规范术语中)。并将其设置为'none'无效:

实际播放状态按以下方式计算:

  • 如果声明的播放状态为“正在播放”,则返回“正在播放”。
  • 否则,返回猜测的播放状态

猜测的播放状态是我无法控制的;它是由浏览器根据<audio>页面上元素的状态派生的。

是否有可能我忽略了,或者这只是当前 MediaSession 规范中的疏忽?

4

1 回答 1

2

可能是您正在寻找的。

如果您可以在 5 秒内循环播放音乐(例如 NES 天),则通知不会显示。

否则,使用不带“音频”元素的 Web 音频 API。所以,使用流。

否则,“使用 audio.src = '' 关闭媒体通知。” 参考

于 2019-09-10T05:26:16.250 回答