在 Android 13 及以上(API 33+)消息通知权限必须声明并 主动请求 android.permission.POST_NOTIFICATIONS 运行时权限,检查消息通知权限可以使用plus.android.checkPermission方法。
在 Android 13 以下(API 32 及更低)目前 不需要主动请求此权限,因为系统使用旧模型,但需要检测通知是否被用户关闭、并在必要时引导用户去设置开启。
放代码
// 获取Android版本号
function getAndroidVersion() {
// #ifdef APP-PLUS
const androidVersion = parseInt(plus.os.version)
$Log('Android版本号:', androidVersion)
return androidVersion
// #endif
}
// 判断Android版本是否小于13
function isAndroidVerBelow13() {
return getAndroidVersion() <= 12
}
// Android权限检查
function checkAndroidPermission(permissionID) {
return new Promise(resolve => {
plus.android.checkPermission(
permissionID,
function (result) {
$Log('PermissionUtil', '检查权限结果', result)
if (result.checkResult === 0) {
resolve(true)
} else {
resolve(false)
}
},
function (error) {
$Log('PermissionUtil', '检查权限错误:' + error)
resolve(false)
}
)
})
}
// 检查消息权限,兼容Android 13以下
function checkAndroidPermissionNotification() {
return new Promise(resolve => {
try {
if (isAndroidVerBelow13()) {
$Log('PermissionUtil', '开始检查消息权限 Android 13以下')
const context = plus.android.runtimeMainActivity()
const NotificationManagerCompat = plus.android.importClass('androidx.core.app.NotificationManagerCompat')
const nm = NotificationManagerCompat.from(context)
const enabled = nm.areNotificationsEnabled()
$Log('PermissionUtil', '检查消息权限结果 Android 13以下 res ===>', enabled)
resolve(enabled)
} else {
$Log('PermissionUtil', '开始检查消息权限 Android 13以上')
checkAndroidPermission('android.permission.POST_NOTIFICATIONS').then(res => {
$Log('PermissionUtil', '检查消息权限结果 Android 13以上 res ===>', res)
resolve(res)
})
}
} catch (error) {
$Log('PermissionUtil', '检查消息权限错误:' + error)
resolve(false)
}
})
}