uni-app android平台 uni.getBackgroundAudioManager 熄屏后播放音频,部分手机会自动停止播放

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

uni-app android平台 uni.getBackgroundAudioManager 熄屏后播放音频,部分手机会自动停止播放

项目信息 详情
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 win10
HBuilderX类型 正式
HBuilderX版本 3.8.12
手机系统 Android
手机系统版本 Android 12
手机厂商 小米
手机机型 Redmi k40s
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 不插电源,播一会儿就不播了,插着电源没事

预期结果:

  • 不插电源也正常播放

实际结果:

  • 不插电源,播一会儿就不播了

bug描述:

  • android uni.getBackgroundAudioManager 熄屏后,播着播着有的手机会自动停止播放,好像便宜的手机都有这个问题,用另一部手机,华为畅享50z也出现该问题。好点的手机就没事。苹果手机也没事,问题集中在Android手机

App下载地址或H5网址:


3 回复

这个问题有解决吗


我也遇到你这种相同问题,你找到解决方法了吗? uni.getBackgroundAudioManager()熄屏后,播着播着手机会自动停止播放,或者崩溃app

在uni-app中,使用 uni.getBackgroundAudioManager 在Android平台上播放音频时,部分手机在熄屏后会自动停止播放,这通常是由于系统或设备本身的省电策略、后台任务限制等原因导致的。以下是一些可能的解决方案和优化建议:


1. 检查权限

确保应用已经获取了所需的后台播放权限,尤其是 WAKE_LOCKFOREGROUND_SERVICE 权限。在 manifest.json 中配置:

{
  "permission": {
    "android": [
      "android.permission.WAKE_LOCK",
      "android.permission.FOREGROUND_SERVICE"
    ]
  }
}

2. 使用前台服务

在Android平台上,使用前台服务可以防止系统在熄屏后杀死音频播放任务。可以通过原生插件或uni-app的 plus.android API 实现。


3. 优化省电策略

某些手机(如小米、华为等)有严格的省电策略,可能会限制后台任务。可以引导用户手动设置应用的电池优化策略:

  • 进入系统设置 -> 电池 -> 电池优化 -> 找到你的应用 -> 设置为“不优化”。

4. 检查音频管理器的配置

确保 uni.getBackgroundAudioManager 的配置正确,例如:

  • 设置 titlecoverImgUrl,否则某些设备可能会认为音频无效。
  • 使用 onPlayonPause 等事件监听播放状态,确保音频未被意外停止。
const backgroundAudioManager = uni.getBackgroundAudioManager();
backgroundAudioManager.title = '音频标题';
backgroundAudioManager.coverImgUrl = '封面图片URL';
backgroundAudioManager.src = '音频文件URL';

5. 保持屏幕唤醒

在播放音频时,可以通过 plus.device.setWakelock(true) 保持屏幕唤醒,防止系统进入休眠状态:

plus.device.setWakelock(true); // 开启唤醒锁
plus.device.setWakelock(false); // 关闭唤醒锁

6. 测试不同设备

由于不同厂商的Android设备对后台任务的处理方式不同,建议在多种设备上进行测试,尤其是小米、华为、OPPO等有严格后台限制的设备。


7. 使用其他插件或SDK

如果 uni.getBackgroundAudioManager 无法满足需求,可以考虑使用其他音频播放插件,如:


8. 监听系统事件

通过监听 uni.onAppShowuni.onAppHide 事件,在应用进入后台时重新启动音频播放:

uni.onAppShow(() => {
  console.log('应用进入前台');
  backgroundAudioManager.play();
});

uni.onAppHide(() => {
  console.log('应用进入后台');
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!