uni-app 使用其他音乐播放器播放音乐暂停后或接打电话后或发送接听语音消息后背景音乐不会自动续播

uni-app 使用其他音乐播放器播放音乐暂停后或接打电话后或发送接听语音消息后背景音乐不会自动续播

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容]

重现步骤

[步骤]
播放背景音乐,然后使用其他音乐播放器播放音乐或接打电话或发送接听语音消息

[结果]
使用其他音乐播放器播放音乐暂停之后或接打电话之后或发送接听语音消息之后背景音乐不会自动续播

[期望]
在其他音乐播放器播放音乐时或接打电话时或发送接听语音消息时背景音乐暂停,在以上场景结束后背景音乐可以继续播放

[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]

IDE 版本号
HBuilderX 2.6.5.20200314

uni-app运行环境说明

[运行端是h5或app或某个小程序?]
App

[运行端版本号]

项目创建方式 编译模式
HBuilderX创建 自定义组件模式

App运行环境说明

Android版本号 iOS版本号 手机型号
iPhone 7 MI MAX 3

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]
统一应用软件 实例-接口-媒体-背景音频

[可重现代码片段]

相关链接 :


更多关于uni-app 使用其他音乐播放器播放音乐暂停后或接打电话后或发送接听语音消息后背景音乐不会自动续播的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

有找到解决方法吗

更多关于uni-app 使用其他音乐播放器播放音乐暂停后或接打电话后或发送接听语音消息后背景音乐不会自动续播的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个是系统行为,如果想恢复续播,在应用App.vue页面的onShow中自己判断当前状态

onShow 里怎么判断呢?Uniapp 播放背景音乐.转后台 切换其他APP,其他APP播放了音频.Uniapp 背景音乐暂停.其他APP音频播放结束.onShow里会有信息??? 我觉得音频播放组件能返回音频焦点判断(AudioManager)事件最好了

回复 DCMarvel: 你好,后续解决了吗

回复 百倍: 需要写原生插件 或用Native.js 获取AudioManager

回复 DCMarvel: 请问插件市场有吗?或者官方文档?

监听中断、录音或播放音频、被系统占用而中断(ios):https://ext.dcloud.net.cn/plugin?id=12278

这个问题是由于音频播放的焦点管理导致的。在Android和iOS系统中,当有其他音频播放器或系统电话占用音频焦点时,你的应用音频会被暂停,但系统不会自动恢复播放。

解决方案:

  1. 监听音频焦点变化事件:
// 在App.vue或页面中
onShow() {
    // 监听音频恢复事件
    plus.audio.addEventListener('resume', this.resumeAudio);
},
onHide() {
    plus.audio.removeEventListener('resume', this.resumeAudio);
},
methods: {
    resumeAudio() {
        // 恢复播放逻辑
        if(this.audioPlayer && this.isPausedBySystem) {
            this.audioPlayer.play();
            this.isPausedBySystem = false;
        }
    }
}
  1. 处理音频焦点丢失:
// 在播放音频时
playBackgroundMusic() {
    const bgAudio = plus.audio.createPlayer('file://path/to/music.mp3');
    bgAudio.play();
    
    // 监听暂停事件
    bgAudio.addEventListener('pause', (e) => {
        if(e.type === 'interrupt') {  // 系统中断导致的暂停
            this.isPausedBySystem = true;
        }
    });
}
  1. 对于语音消息场景,需要在录音完成后手动恢复播放:
stopRecord() {
    // 停止录音逻辑
    this.$nextTick(() => {
        if(this.backgroundAudioPaused) {
            this.resumeBackgroundAudio();
        }
    });
}
回到顶部