解决APP在华为手机上背景音频中断

现象

在APP上有一个背景音乐播放的功能,按道理讲,只要有音乐在播放,即使把APP放到后台运行,那么就可以一直播放结束。其他手机都能够正常播放结束,可是偏偏在华为手机上,确出现了播放一段时间后音频就停止了,但是,APP并没有退出运行,就只是音频中断了,可是,有可能过一会儿,它又自己开始播放了,类似于网络不好一样。测试环境是在公司,网络造成的原因很小,因为这个问题只在华为上面出现。

解决方法

一、设置启动模式

老手机:设置-》应用管理-》选择某个应用-》电量-》关闭自动启动管理
新手机:设置-》应用-》应用启动管理-》选择某个应用-》关闭自动启动管理

二、使用代码的方式开启电池优化白名单

1、 在配置文件中添加相应的权限

image-20210709151432652

2、 代码调用开启获取优化白名单

image-20210709151616821

三、华为相关问题说明

四、代码

1
2
3
4
5
6
7
8
// 权限配置
{
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\"/>"
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 授权代码

const main = plus.android.runtimeMainActivity();
const packName = main.getPackageName();
const Context = plus.android.importClass("android.content.Context");
const PowerManager = plus.android.importClass("android.os.PowerManager");
// 获取电源类
const pm = main.getSystemService(Context.POWER_SERVICE);
const inWhiteList = pm.isIgnoringBatteryOptimizations(packName);
console.log('白名单:', inWhiteList); //是否白名单
if (!inWhiteList) {
try{
const Uri = plus.android.importClass("android.net.Uri");
const Settings = plus.android.importClass("android.provider.Settings");
const packageURI = Uri.parse("package:" + packName);
const intents = plus.android.newObject("android.content.Intent", Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, packageURI); // 电池
main.startActivity(intents);
console.log(intents)
console.log('执行完毕')
}catch{
console.log('调起失败')
}
}