以前项目中遇到的问题,今天同事问到了,在这里记录一下
语音播放使用的 wx.createInnerAudioContext()
诡异问题记录:
在安卓上都没问题,语音发送接收之后播放都没问题,就是在 IOS 上播放没声音,戴上耳机就可以听到声音,不戴耳机就没声音,音量加到最大还是没声音…
看手册:
有一个 API 叫 wx.setInnerAudioOption
obeyMuteSwitch 选项 默认值:true(仅在 iOS 生效)是否遵循静音开关,设置为 false 之后,即使是在静音模式下,也能播放声音
原因找到了,IOS 有一个静音的按钮(向下拨动就静音的那个开关),这里设置一下播放的时候是否遵循静音开关,因为默认是遵循,所以大家上班中都处于静音状态,那么播放的时候不管你声音调整多大,都会没声音,而耳机模式下就不存在这个问题,所以 这样处理一下:
可以做下版本兼容,版本不够的可以提示微信升级(我那里没做兼容 -.-)
// 设置不遵循静音开关播放
wx.setInnerAudioOption({
obeyMuteSwitch: false
})
这里有一个官方推荐的版本比较的方法:【查看】
// 官方版
// 版本对比 兼容
function compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}
const version = wx.getSystemInfoSync().SDKVersion;
if (compareVersion(version, '2.3.0') >= 0) {
wx.setInnerAudioOption({
obeyMuteSwitch: false
})
}else{
wx.showModal({
title: '提示',
content: '当前微信版本过低,静音模式下可能会导致播放音频失败,请升级到最新微信版本后重试。'
})
}