【发布时间】:2022-11-04 19:47:25
【问题描述】:
谷歌表示,所有针对 Android 13(API 级别 33)的应用程序为了能够处理通知,都必须要求Manifest.permission.POST_NOTIFICATIONS允许。
我的问题是:这是检查是否已授予该权限的正确方法?
【问题讨论】:
标签: android notifications
谷歌表示,所有针对 Android 13(API 级别 33)的应用程序为了能够处理通知,都必须要求Manifest.permission.POST_NOTIFICATIONS允许。
我的问题是:这是检查是否已授予该权限的正确方法?
【问题讨论】:
标签: android notifications
两种检查权限的方法:
NotificationManagerCompat.from(this).areNotificationsEnabled()
和
ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
在以下情况下,在所有三个选项中返回完全相同的结果:
因此它们之间没有区别,您可以选择您更喜欢的选项。
if(Build.VERSION.SDK_INT >= 33) 检查您的代码private fun Context.permissionGranted(permission: String): Boolean =
ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
不幸的是,使用第二个选项,您仍然必须使用 SDK 检查包围您的代码,所以它看起来像:
if (Build.VERSION.SDK_INT >= 33) permissionGranted(Manifest.permission.POST_NOTIFICATIONS)
最后,还有一些关于通知和应用设置的一般信息:
【讨论】:
在所有三个选项中返回完全相同的结果
显然不是在所有设备上。尽管在设置中启用了权限,但在使用
ContextCompat.checkSelfPermission时,我一直得到 PERMISSION_DENIED。更改为
NotificationManagerCompat.from(this).areNotificationsEnabled()与设置匹配。可能是未正确设置的三星 android 版本之类的,但 NotificationManagerCompat 似乎是更安全的选择。
【讨论】: