uni-app 华为荣耀角标无法通过plus.runtime.setBadgeNumber清除
uni-app 华为荣耀角标无法通过plus.runtime.setBadgeNumber清除
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
### 操作步骤:
荣耀畅玩20,收到厂商离线推送时,使用 plus.runtime.setBadgeNumber(0) 清空角标
### 预期结果:
能正常清空APP的角标
### 实际结果:
plus.runtime.setBadgeNumber无效
### bug描述:
荣耀畅玩20(目前荣耀测试机只有这个机型) plus.runtime.setBadgeNumber api对该机型完全无效
3 回复
刚用别的荣耀试了下,是可以
我的也不起作用也是华为的,是需要什么权限设置吗
在 uni-app
中,使用 plus.runtime.setBadgeNumber
方法来设置或清除应用角标(Badge Number)是常见的操作。然而,某些设备(如华为荣耀)可能由于系统定制或权限问题,导致角标无法正常清除。
以下是一些可能的原因和解决方案:
1. 系统定制问题
华为和荣耀设备使用的是 EMUI 系统,该系统对应用角标的管理可能与原生 Android 系统有所不同。某些系统版本可能不支持通过标准 API 清除角标。
2. 权限问题
在 Android 系统中,应用需要特定的权限才能设置或清除角标。如果应用没有获取到相应的权限,可能会导致角标无法清除。
3. 解决方案
3.1 检查权限
确保应用已经获取了 WRITE_SETTINGS
和 REQUEST_INSTALL_PACKAGES
权限。你可以在 manifest.json
文件中添加以下权限:
{
"permissions": [
"android.permission.WRITE_SETTINGS",
"android.permission.REQUEST_INSTALL_PACKAGES"
]
}
3.2 使用华为推送服务
如果你在华为设备上使用推送服务,建议集成华为推送服务(HMS Push Kit)。通过华为推送服务,你可以更好地管理角标。
3.3 手动清除角标
如果通过 plus.runtime.setBadgeNumber(0)
无法清除角标,可以尝试以下方法:
if (uni.getSystemInfoSync().platform === 'android') {
const main = plus.android.runtimeMainActivity();
const NotificationManager = plus.android.importClass('android.app.NotificationManager');
const context = main.getApplicationContext();
const notificationManager = context.getSystemService(context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
}