如何以编程方式禁止在Chrome Android进程的后台播放歌曲?
这是一个简单的页面示例,它在Chrome中播放歌曲:
https://thomashunter.name/examples/chrome-audio-bug.html
var song = new Audio('song.ogg');
song.loop = 'loop';
button = document.getElementById('play');
button.addEventListener("click", function() {
song.play();
});
注意这首歌是如何在背景中继续播放的。虽然对于点唱机来说很好,但它会让网络游戏的玩家发疯。
有没有办法禁用Chrome中单个音频元素的后台播放?或者,当页面失去焦点时,是否至少有一个回调,以便我可以运行歌曲。停止()?
使用HTML5可视性API
<script>
var song = new Audio('http://zyu.me:1337/audio/Evasion.ogg');
song.loop = 'loop';
button = document.getElementById('play');
button.addEventListener("click", function() {
song.play();
});
var vis = (function(){
var stateKey,
eventKey,
keys = {
hidden: "visibilitychange",
webkitHidden: "webkitvisibilitychange",
mozHidden: "mozvisibilitychange",
msHidden: "msvisibilitychange"
};
for (stateKey in keys) {
if (stateKey in document) {
eventKey = keys[stateKey];
break;
}
}
return function(c) {
if (c) document.addEventListener(eventKey, c);
return !document[stateKey];
}
})();
vis(function(){
if(vis()){
console.log("tab is visible");
song.play();
} else {
console.log("tab is invisible");
song.pause();
}
});
</script>
您可以尝试使用visibilitychange:
document.addEventListener('visibilitychange', function(){
if (document.hidden) {
// Document is hidden
// This re-initialize the audio element
// to release the audio focus
song.load();
}
else {
// Document is focused
}
},false);
完整的示例可在此处获得https://jsfiddle.net/6001wsf9/
在Android 5.0和Chrome 43.0.2357.78上测试
问题内容: 我正在制作音频播放器。它具有暂停,倒带和时间搜索功能。如何以及由谁处理音频元素? 我可以把它放在商店旁边。我不能将其直接放在状态上,因为它可能会被克隆。然后,在减速器中,我可以与其进行交互。问题是,如果我需要将时间滑块与音频同步,则需要使用动作不断地轮询商店。从语义上讲,这也没有任何意义。 我可以创建一个自定义的React组件Audio,它可以完成我所说的一切。问题没有解决。如何刷新滑
问题内容: 我正在制作一个Java应用程序,我需要播放音频。尽管我计划循环播放背景音乐,但我主要播放的是我的大炮射击(它是大炮射击游戏)和弹丸爆炸的小声音文件。我找到了两种不同的方法来实现此目的,但是两种方法都不符合我的要求。 第一种方法实际上是一种方法: 问题是我的整个程序停止运行,直到声音文件完成或至少接近完成。 第二种方法是这样的: 我这里的问题是,每次声音文件提早结束或根本不播放时,这取决
如何后台播放音乐
播放视频,当应用程序转到后台时,它应继续播放音频,当我重新打开时,它应恢复有关我们在音频中的位置的视频。 我在一个服务中使用exoplayer,我可以在后台播放音频,但当我对视频执行相同操作时,音频正在播放,但当我回到应用程序时,视频只是一个黑屏,如果我再次重复(转到后台并回到应用程序)该步骤,它将继续播放视频。 据我所知,exoplayer正在缓冲下一帧,播放器视图无法一次渲染所有帧。 我有一个
我正在使用FCM在代码下推送通知,以便在收到通知时播放声音 我称之为OnMessageReceived方法,但声音仅在应用程序位于前台时播放,而不是在应用程序位于后台时播放