uniapp解决安卓targetSdkVersion升级为33导致通知权限置灰无法打开问题

原文地址:https://ask.dcloud.net.cn/article/40691
安卓从13开始,对通知权限加入了POST_NOTIFICATIONS权限,需要动态申请才可以发送通知, 安卓targetSdkVersion升级为33后,如果不添加权限,打开设置时通知开关是禁用状态,以下是解决步骤

  1. manifest.json源码中添加权限”<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>”,然后重新打包自定义基座,如图所示

  2. 在需要使用通知的地方执行以下函数,用于请求通知权限,通知权限一般最多弹出两次,两次后用户还没有同意的话再次请求则不会弹出提示,需要根据回调判断是否永久拒绝,跳转到通知设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function requestPermission() {  
const Build = plus.android.importClass("android.os.Build");
if (Build.VERSION.SDK_INT >= 33) {
plus.android.requestPermissions(
["android.permission.POST_NOTIFICATIONS"],
(resultObj) => {
const { granted, deniedPresent, deniedAlways } = resultObj
if (granted.includes(noticePermission)) {
createPush()
} else if (!deniedPresent.includes(noticePermission) && !deniedAlways.includes(noticePermission)) {
uni.showModal({
title: '需要通知权限',
content: '通知权限仅用于收藏视频的更新通知,是否打开?\n此提醒仅出现一次,后续有需求请自行打开通知权限。',
success(res) {
if (res.confirm) {
uni.openAppAuthorizeSetting({})
}
}
})
}
},
(error) => {
console.log("申请权限错误:" + error.code + " = " + error.message);
}
);
}
}