【问题标题】:How to get result of POST_NOTIFICATION permission request on Android 13?如何在 Android 13 上获取 POST_NOTIFICATION 权限请求的结果?
【发布时间】:2022-11-25 02:08:09
【问题描述】:

我正在使用具有前台服务的第 3 方屏幕录制库,当屏幕录制开始时,系统会在 Android 13 上自动显示新的通知后权限对话框。有没有办法注册一个侦听器以获取有关该权限是否有效的数据授予与否?

我尝试在屏幕录制开始之前手动请求发布通知权限,但请求后没有显示权限对话框。

requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)  

这一切只发生在 Android 13 上。

【问题讨论】:

  • 你的targetSdkVersion 是什么?仅针对 API 33 允许您手动请求通知权限。

标签: android android-13


【解决方案1】:

像这样请求:

private void request_notification_api13_permission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (this.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.POST_NOTIFICATIONS}, 22);
        }
    }
}

检查结果如下:

   @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 22) {
        if (grantResults.length > 0)
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

               // permission granted, perform required code

            } else {
                // not granted
            }
    }
}

您可以将数字 22 更改为您想要的任何数字。

【讨论】:

    【解决方案2】:
    • 在应用的清单文件中声明权限

       <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
      
    • 请求用户的许可

      if (Build.VERSION.SDK_INT >= 33) {
      if (ContextCompat.checkSelfPermission(activity, POST_NOTIFICATIONS) != PermissionChecker.PERMISSION_GRANTED) {
             requestPermissionLauncher.launch(POST_NOTIFICATIONS);
      
                  } else {
                       //permission already granted
      
                    }
                }
      
    • 注册权限回调,处理用户对 系统权限对话框。保存返回值,实例 ActivityResultLauncher,作为实例变量。

      private ActivityResultLauncher<String> requestPermissionLauncher =
                registerForActivityResult(new RequestPermission(), 
                         isGranted -> {
                    if (isGranted) {
                        // Permission is granted. Continue the action or workflow in your 
                            app.
                    } else {
                          // Explain to the user that the feature is unavailable because the
            // feature requires a permission that the user has denied. At the
            // same time, respect the user's decision. Don't link to system
            // settings in an effort to convince the user to change their
            // decision.
                    }
                });
      

    希望它会有所帮助!

    【讨论】:

      猜你喜欢
      • 2022-08-08
      • 1970-01-01
      • 2017-02-09
      • 2022-11-25
      • 2023-02-06
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多