egret iOS微信浏览器默认不播放背景音乐

egret iOS微信浏览器默认不播放背景音乐

最近在做一个小项目,用的是egret+微信浏览器环境,在安卓上运行没有任何问题,但是到了万恶的苹果上不行了,立马有问题了,BGM不能自动播放,查了一下发现是IOS系统为了节省用户的流量,禁止了audio标签的自动播放,哈哈哈,特么的,对用户真是太贴心了(不得不吐槽一下,都已经用上苹果了,还会在乎那几个流量费?)。本不想改了,但是这时候万恶的产品经理说,不行,这个必须要能自动播放。没办法,人在屋檐下不得不低头,百度一通,找到一个,一试还真行。在这里贴出来记录一下。
1.首先要在index.html这个文件里添加一个函数用于引导播放:

function playsound(sound, loop) {
        if (sound == null) {
            console.log('sound err')
            return;
        }
        var times = loop ? 0 : 1;
        if (typeof WeixinJSBridge != 'undefined') {
            WeixinJSBridge.invoke('getNetworkType', {}, function (e) {
                return sound.play(0, times).volume = 0;
            });
        } else {
            return sound.play(0, times).volume = 0;
        }
    }    

2.第二步在自己的声音管理单例里边添加一个方法,用于播放静音引导,使用的就是第一步的引导函数:

public playNullSound() {
	let nullSound: egret.Sound = RES.getRes("yindao_mp3");
	window["playsound"](nullSound, false);
}

3.第三步在需要播放音乐地方先用上面的函数播放一段静音引导,然后再设置一个setTimeOut延迟播放正确的音乐,具体如下:

SoundManager.getInstance().playNullSound();

egret.setTimeout(()=>{
     SoundManager.getInstance().playBgm('BGM_mp3');
}, this, 200);

注意事项:
1.需要用到的声音资源需要预加载,否则无法通过RES.getRes()获取。
2.playBgm具体就不写了,官方文档都有,很简单。

参考:
https://www.cnblogs.com/mieQ/p/7614061.html

栏目
728_90 cn stocks