uni-app中const audioContext = uni.createInnerAudioContext();默认音乐播放会打断酷狗、QQ音乐等声音且无法自动恢复
uni-app中const audioContext = uni.createInnerAudioContext();默认音乐播放会打断酷狗、QQ音乐等声音且无法自动恢复
测试过的手机
努比亚 Z50s
操作步骤
如问题描述
预期结果
播放后,打断其他播放器,音频焦点允许我临时获取; 播放后,其他播放器能够自动恢复,音频焦点允许我主动释放;
实际结果
播放后,其他播放器永久被打断,无法恢复。
bug描述
使用默认的音频播放进行创建
const audioContext = uni.createInnerAudioContext();
play()
后,如果酷狗设置的是不与其他音乐同时播放,则直接被打断
希望能做成,我播放后,能正常打断,但是我关闭后,酷狗能自动恢复。
我观察了高德导航等,发送通知后,酷狗都可以自动恢复。现在的播放器,打断了,就其他软件都恢复不了了。
在uni-app中,使用uni.createInnerAudioContext()
创建的内嵌音频上下文默认行为是独占音频播放,即当应用内的音频开始播放时,会打断其他正在播放的音频(如酷狗、QQ音乐等),并且不会自动恢复这些被打断的音频。这种行为是由小程序或App的运行环境决定的,通常是为了提供更好的用户体验(避免多个音频同时播放导致的混乱)。
然而,如果你希望你的应用中的音频播放不要打断其他音乐播放器,并且也不希望被其他音乐播放器打断,你需要设置音频的后台播放和与其他音频混音的属性。在uni-app中,这通常涉及到对InnerAudioContext
对象的相关属性进行设置。
以下是一个示例代码,展示了如何配置InnerAudioContext
对象以避免打断其他音乐播放器:
// 创建音频上下文
const audioContext = uni.createInnerAudioContext();
// 设置音频源
audioContext.src = 'path/to/your/audio/file.mp3';
// 配置音频上下文,以避免打断其他音乐播放器
audioContext.obeysMuteSwitch = true; // 遵循系统静音开关(用户静音手机时,音频也会静音)
audioContext.interruptionMode = 'none'; // 不打断其他音乐
audioContext.mixWithOtherAudio = true; // 与其他音频混音播放
// 播放音频
audioContext.play();
// 监听音频播放中断事件(虽然设置了不打断,但还是有必要监听以处理异常情况)
audioContext.onInterruptionBegin = function (res) {
console.log('音频播放被中断', res);
};
audioContext.onInterruptionEnd = function (res) {
console.log('音频播放中断结束,可以恢复播放', res);
// 如果需要,可以在这里尝试恢复播放
// audioContext.play();
};
// 监听播放结束事件
audioContext.onEnded = function () {
console.log('音频播放结束');
};
// 其他音频控制逻辑,如暂停、停止等
// audioContext.pause();
// audioContext.stop();
请注意,interruptionMode
和mixWithOtherAudio
属性可能并不在所有平台上都支持,具体取决于uni-app的运行环境和底层实现。如果这些属性在某些平台上不起作用,你可能需要查阅uni-app的官方文档或相关平台的开发指南,以获取更详细的兼容性信息和替代方案。