如何请求 Android 13 的推送通知权限?

Joh*_*ser 17 android

我已经浏览了本指南以了解 Android 13 推送通知

https://developer.android.com/about/versions/13/changes/notification-permission#user-choice

我查看了请求权限的指南

https://developer.android.com/training/permissions/requesting#java

我已将编译和目标更新为 api 32。

这是到目前为止我的代码(正在进行中)。现在我只是想显示通知提示。

        if (Build.VERSION.SDK_INT >= 32) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NOTIFICATION_POLICY) == PackageManager.PERMISSION_GRANTED)
                return;
            ActivityResultLauncher<String> launcher = registerForActivityResult(
                    new ActivityResultContracts.RequestPermission(), isGranted -> {

                    }
            );
            launcher.launch(Manifest.permission.POST_NOTIFICATIONS);
        }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我收到一个错误cannot find symbol variable POST_NOTIFICATIONS

推送通知的正确清单权限是什么?

小智 13

您需要执行几个步骤,在清单中添加发布通知权限

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中,对于运行时权限,就像我们通常要求的那样:

if (Build.VERSION.SDK_INT >= 33) {
   if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.POST_NOTIFICATIONS},101);
       }
   else {
          createChannel();
        }
      }
Run Code Online (Sandbox Code Playgroud)

然后需要照常处理权限结果


小智 11

也许我参加聚会有点晚了,我知道......但我希望这至少可以帮助其他人。您需要在模块级别的 gradle 文件中使用compileSdkVersion 33 。然后您将可以毫无问题地使用 POST_NOTIFICATIONS 权限。 等级设置


Bin*_*yam 5

如何在 android studio 中添加通知权限的运行时权限,\n面向 Android 13 的应用现在需要在发布通知之前向用户请求通知权限,\xe2\x80\x9d\n行为更改:面向 Android 13 或更高版本的应用\n https://developer.android.com/about/versions/13/behavior-changes-13

\n

添加清单:uses-permission android: name="android.permission.POST_NOTIFICATIONS

\n
\n

\n

在MainActivity的onCreate后添加:

\n
if (ContextCompat.checkSelfPermission(this, POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED) {\n            ActivityCompat.requestPermissions(this, new String[]{POST_NOTIFICATIONS}, 1);\n        }
Run Code Online (Sandbox Code Playgroud)\n