【问题标题】:Is there a difference between "areNotificationsEnabled()" and "checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)"\"areNotificationsEnabled()\" 和 \"checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)\" 之间有区别吗
【发布时间】:2022-11-04 19:47:25
【问题描述】:

谷歌表示,所有针对 Android 13(API 级别 33)的应用程序为了能够处理通知,都必须要求Manifest.permission.POST_NOTIFICATIONS允许。

我的问题是:这是检查是否已授予该权限的正确方法?

  1. 使用NotificationManagerCompat.areNotificationsEnabled()
  2. 使用类似ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)

    它们之间有什么区别吗?这两个选项似乎相互依赖:例如,如果我转到设备应用程序设置并禁用通知,那么我会看到通知权限也从应用程序自动撤销:

    反之亦然。

【问题讨论】:

    标签: android notifications


    【解决方案1】:

    两种检查权限的方法: NotificationManagerCompat.from(this).areNotificationsEnabled()

    ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED

    在以下情况下,在所有三个选项中返回完全相同的结果:

    • 授予权限(真)
    • 拒绝权限 (false)
    • 永远拒绝权限(假)

    因此它们之间没有区别,您可以选择您更喜欢的选项。

    • 第一个是一种更简洁的方式,您不必用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)
    

    最后,还有一些关于通知和应用设置的一般信息:

    • 是的,权限和通知选项相互依赖
    • 从 Android 13 (SDK 33) 开始,通知默认关闭
    • 清除应用数据后,所有权限都被清除,通知权限也被清除。

    【讨论】:

      【解决方案2】:

      在所有三个选项中返回完全相同的结果

      显然不是在所有设备上。尽管在设置中启用了权限,但在使用ContextCompat.checkSelfPermission 时,我一直得到 PERMISSION_DENIED。

      更改为 NotificationManagerCompat.from(this).areNotificationsEnabled() 与设置匹配。

      可能是未正确设置的三星 android 版本之类的,但 NotificationManagerCompat 似乎是更安全的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 2013-10-23
        • 2012-08-18
        • 1970-01-01
        • 2012-02-16
        • 2017-12-22
        • 2012-03-15
        相关资源
        最近更新 更多