前言
在Android 13上對(duì)通知的行為做了一些變更剩檀,例如通知運(yùn)行時(shí)權(quán)限今豆,主要用于從應(yīng)用發(fā)送非豁免通知的運(yùn)行時(shí)權(quán)限:POST_NOTIFICATIONS贝咙,如果不申請(qǐng)并且允許則無(wú)法發(fā)送通知趴樱。有助于用戶(hù)專(zhuān)注于最重要的通知咏瑟。
聲明權(quán)限
如果targetSdk>=33檐涝,首先需要在應(yīng)用的清單文件中先聲明權(quán)限:
<manifest>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application>
XXXXX
</application>
</manifest>
運(yùn)行時(shí)權(quán)限申請(qǐng)
然后完成從Android 6.0開(kāi)始的那套運(yùn)行時(shí)權(quán)限申請(qǐng)流程遏匆,可以看一下我的另一篇文章:
Android 6.0 適配——管理運(yùn)行時(shí)權(quán)限
權(quán)限對(duì)話(huà)框的選擇
選擇允許
- 發(fā)送通知
- 發(fā)送與前臺(tái)服務(wù)相關(guān)的通知
選擇不允許
- 無(wú)法發(fā)送通知,除非該應(yīng)用符合豁免條件谁榜,例如與媒體會(huì)話(huà)有關(guān)的通知
- 一旦用戶(hù)選擇不允許幅聘,下次系統(tǒng)將不會(huì)再出現(xiàn)權(quán)限申請(qǐng)的彈窗
- 手動(dòng)引導(dǎo)用戶(hù)去打開(kāi)權(quán)限:
首先判斷是否有通知權(quán)限
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.areNotificationsEnabled()
如果沒(méi)有通知權(quán)限,跳到設(shè)置界面打開(kāi)通知權(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)
}
}
滑開(kāi)對(duì)話(huà)框窃植,不按任何一個(gè)按鈕
- 沒(méi)有任何變化帝蒿,下次進(jìn)入對(duì)應(yīng)位置時(shí)仍可以彈出通知權(quán)限對(duì)話(huà)框
注意點(diǎn)
應(yīng)用無(wú)需請(qǐng)求POST_NOTIFICATIONS權(quán)限即可啟動(dòng)前臺(tái)服務(wù),但是應(yīng)用仍必須在啟動(dòng)前臺(tái)服務(wù)時(shí)提供一個(gè)通知巷怜。
結(jié)尾
這個(gè)更新呢重點(diǎn)還是在于改善用戶(hù)的體驗(yàn)葛超,用戶(hù)能夠自主選擇是否接受應(yīng)用推送的通知,減少被打擾的情況延塑。