uni-app中const audioContext = uni.createInnerAudioContext();默认音乐播放会打断酷狗、QQ音乐等声音且无法自动恢复

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app中const audioContext = uni.createInnerAudioContext();默认音乐播放会打断酷狗、QQ音乐等声音且无法自动恢复

测试过的手机

努比亚 Z50s

操作步骤

如问题描述

预期结果

播放后,打断其他播放器,音频焦点允许我临时获取; 播放后,其他播放器能够自动恢复,音频焦点允许我主动释放;

实际结果

播放后,其他播放器永久被打断,无法恢复。

bug描述

使用默认的音频播放进行创建

const audioContext = uni.createInnerAudioContext();  

play()后,如果酷狗设置的是不与其他音乐同时播放,则直接被打断

希望能做成,我播放后,能正常打断,但是我关闭后,酷狗能自动恢复。

我观察了高德导航等,发送通知后,酷狗都可以自动恢复。现在的播放器,打断了,就其他软件都恢复不了了。


1 回复

在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();

请注意,interruptionModemixWithOtherAudio属性可能并不在所有平台上都支持,具体取决于uni-app的运行环境和底层实现。如果这些属性在某些平台上不起作用,你可能需要查阅uni-app的官方文档或相关平台的开发指南,以获取更详细的兼容性信息和替代方案。

回到顶部