uni-app 使用音频组件uni.createInnerAudioContext时设置obeyMuteSwitch报错
uni-app 使用音频组件uni.createInnerAudioContext时设置obeyMuteSwitch报错
示例代码:
const playAudio = (taskIndex) => {
console.log("执行新的播放任务")
playWaiting = false
var innerAudioContext = uni.createInnerAudioContext();
let task = playAudioTask[taskIndex]
if (task.type=="0")
innerAudioContext.src = "/static/audio/orderassign.m4a"
if (task.type=="1")
innerAudioContext.src = "/static/audio/ordertimeout.m4a"
innerAudioContext.volume = 1
innerAudioContext.obeyMuteSwitch = false
innerAudioContext.play()
innerAudioContext.onEnded(() => {
innerAudioContext.destroy()
innerAudioContext = null
playAudioTask.splice(taskIndex, 1);
playWaiting = true
});
}
操作步骤:
准备进入APP后,轮训播放音频任务,在创建播放音频任务时,设置 innerAudioContext.obeyMuteSwitch = false
时报错
预期结果:
正常播放音频
实际结果:
uni.createInnerAudioContext()
对象报错,任务未执行
bug描述:
使用音频组件 uni.createInnerAudioContext
, 设置 obeyMuteSwitch = false
报错,貌似说没有 set
权限,可以参见附件
错误描述: Cannot set property obeyMuteSwitch of #<Dd> which has only a getter
在uni-app中使用音频组件uni.createInnerAudioContext
时,如果你遇到设置obeyMuteSwitch
属性报错的问题,这通常是因为对属性的使用方式不正确或者该属性在当前平台不被支持。obeyMuteSwitch
属性用于控制音频是否遵守系统静音开关,即在系统静音时是否静音播放音频。
首先,确保你使用的uni-app版本支持obeyMuteSwitch
属性。这个属性是在较新的版本中引入的,如果你的uni-app版本较旧,可能需要更新到最新版本。
下面是一个使用uni.createInnerAudioContext
并尝试设置obeyMuteSwitch
属性的代码示例。请注意,如果设置该属性时报错,可能是因为属性名拼写错误、属性值类型错误,或者该属性在当前平台上不被支持。
// 创建一个内部音频上下文实例
const innerAudioContext = uni.createInnerAudioContext();
// 设置音频的src属性
innerAudioContext.src = 'https://example.com/audio.mp3';
// 尝试设置obeyMuteSwitch属性为true,表示遵守系统静音开关
try {
innerAudioContext.obeyMuteSwitch = true;
console.log('obeyMuteSwitch设置为true');
} catch (error) {
// 如果设置属性时发生错误,捕获错误并打印
console.error('设置obeyMuteSwitch属性时发生错误:', error);
// 可以在这里添加额外的错误处理逻辑,比如回退到默认设置
}
// 播放音频
innerAudioContext.play();
// 监听音频播放状态变化
innerAudioContext.onTimeUpdate(() => {
console.log('当前播放时间:', innerAudioContext.currentTime);
});
// 监听音频自然播放结束事件
innerAudioContext.onEnded(() => {
console.log('音频播放结束');
});
在上述代码中,我们尝试设置obeyMuteSwitch
属性,并使用try-catch语句捕获可能发生的错误。如果设置属性时发生错误,你可以在catch块中添加适当的错误处理逻辑。
如果确认你的uni-app版本支持该属性,但仍然报错,那么可能是平台兼容性问题。在某些平台上(如小程序、App等),obeyMuteSwitch
属性可能不被支持。此时,你可以查阅uni-app的官方文档或社区论坛,了解该属性在不同平台上的支持情况,并根据需要进行相应的调整。