【uniapp】uniapp开发原生Android应用,Android 13以下检查消息通知权限

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)
    }
  })
}