当前位置: 首页>后端>正文

Android 13.0 适配——运行时通知权限

前言

在Android 13上对通知的行为做了一些变更,例如通知运行时权限,主要用于从应用发送非豁免通知的运行时权限:POST_NOTIFICATIONS,如果不申请并且允许则无法发送通知。有助于用户专注于最重要的通知。


Android 13.0 适配——运行时通知权限,第1张
notification.jpg
声明权限

如果targetSdk>=33,首先需要在应用的清单文件中先声明权限:

<manifest>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application>
        XXXXX
    </application>
</manifest>
运行时权限申请

然后完成从Android 6.0开始的那套运行时权限申请流程,可以看一下我的另一篇文章:
Android 6.0 适配——管理运行时权限

权限对话框的选择
选择允许
  • 发送通知
  • 发送与前台服务相关的通知
选择不允许
  • 无法发送通知,除非该应用符合豁免条件,例如与媒体会话有关的通知
  • 一旦用户选择不允许,下次系统将不会再出现权限申请的弹窗
  • 手动引导用户去打开权限:

首先判断是否有通知权限

val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.areNotificationsEnabled()

如果没有通知权限,跳到设置界面打开通知权限

    private fun startNotificationSetting() {
        val applicationInfo = applicationInfo
        try {
            val intent = Intent()
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
            intent.putExtra("app_package", applicationInfo.packageName)
            intent.putExtra("android.provider.extra.APP_PACKAGE", applicationInfo.packageName)
            intent.putExtra("app_uid", applicationInfo.uid)
            startActivity(intent)
        } catch (e: Exception) {
            val intent = Intent()
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            intent.action = "android.settings.APPLICATION_DETAILS_SETTINGS"
            intent.data = Uri.fromParts("package", applicationInfo.packageName, null)
            startActivity(intent)
        }
    }
滑开对话框,不按任何一个按钮
  • 没有任何变化,下次进入对应位置时仍可以弹出通知权限对话框
注意点

应用无需请求POST_NOTIFICATIONS权限即可启动前台服务,但是应用仍必须在启动前台服务时提供一个通知。

结尾

这个更新呢重点还是在于改善用户的体验,用户能够自主选择是否接受应用推送的通知,减少被打扰的情况。


https://www.xamrdz.com/backend/3vn1944784.html

相关文章: