前言
在Android 13上對通知的行為做了一些變更,例如通知運行時權限,主要用于從應用發(fā)送非豁免通知的運行時權限:POST_NOTIFICATIONS,如果不申請并且允許則無法發(fā)送通知。有助于用戶專注于最重要的通知。

notification.jpg
聲明權限
如果targetSdk>=33,首先需要在應用的清單文件中先聲明權限:
<manifest>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application>
XXXXX
</application>
</manifest>
運行時權限申請
然后完成從Android 6.0開始的那套運行時權限申請流程,可以看一下我的另一篇文章:
Android 6.0 適配——管理運行時權限
權限對話框的選擇
選擇允許
- 發(fā)送通知
- 發(fā)送與前臺服務相關的通知
選擇不允許
首先判斷是否有通知權限
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權限即可啟動前臺服務,但是應用仍必須在啟動前臺服務時提供一個通知。
結(jié)尾
這個更新呢重點還是在于改善用戶的體驗,用戶能夠自主選擇是否接受應用推送的通知,減少被打擾的情況。