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

notification.jpg
聲明權(quán)限
如果targetSdk>=33,首先需要在應(yīng)用的清單文件中先聲明權(quán)限:
<manifest>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application>
XXXXX
</application>
</manifest>
運行時權(quán)限申請
然后完成從Android 6.0開始的那套運行時權(quán)限申請流程,可以看一下我的另一篇文章:
Android 6.0 適配——管理運行時權(quán)限
權(quán)限對話框的選擇
選擇允許
- 發(fā)送通知
- 發(fā)送與前臺服務(wù)相關(guān)的通知
選擇不允許
- 無法發(fā)送通知,除非該應(yīng)用符合豁免條件,例如與媒體會話有關(guān)的通知
- 一旦用戶選擇不允許,下次系統(tǒng)將不會再出現(xiàn)權(quán)限申請的彈窗
- 手動引導(dǎo)用戶去打開權(quán)限:
首先判斷是否有通知權(quán)限
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.areNotificationsEnabled()
如果沒有通知權(quán)限,跳到設(shè)置界面打開通知權(quán)限
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)
}
}
滑開對話框,不按任何一個按鈕
- 沒有任何變化,下次進入對應(yīng)位置時仍可以彈出通知權(quán)限對話框
注意點
應(yīng)用無需請求POST_NOTIFICATIONS權(quán)限即可啟動前臺服務(wù),但是應(yīng)用仍必須在啟動前臺服務(wù)時提供一個通知。
結(jié)尾
這個更新呢重點還是在于改善用戶的體驗,用戶能夠自主選擇是否接受應(yīng)用推送的通知,減少被打擾的情況。