Как прослушать разрешение пользователя или отказ в разрешении «Не беспокоить»? - PullRequest
0 голосов
/ 19 марта 2020

Я хочу запросить у пользователя разрешение ACCESS_NOTIFICATION_POLICY, поэтому я использовал следующий код:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && !notificationManager.isNotificationPolicyAccessGranted()) {
            //Permission not granted so we will ask for it.
            Intent intent = new Intent(
                    android.provider.Settings
                            .ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
            startActivity(intent);

            //did the user allow the Don't Disturb  permission or just ignore it?

        } else {
            //Permission granted

        }  

Но как мне прослушать предоставление или отклонение пользователем этого запроса? может, он не разрешил разрешение ДНР, откуда мне знать?

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я использовал startActivityForResult вместо startActivity следующим образом:

NotificationManager notificationManager = 
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        assert notificationManager != null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && !notificationManager.isNotificationPolicyAccessGranted()) {
            //Permission not granted so we will ask for it.
            Intent intent = new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
            startActivityForResult(intent, 55);
        } else {
            //Permission was granted          
        }

, затем я проверил результат в onActivityResult, используя isNotificationPolicyAccessGranted()

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 55) {
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                NotificationManager mNotificationManager = (NotificationManager) getApplication().getSystemService(Context.NOTIFICATION_SERVICE);
                assert mNotificationManager != null;
                if (mNotificationManager.isNotificationPolicyAccessGranted()) {
                    //DND permission is granted 
                    //do something 
                }else{
                    //DND permission isn't granted 
                    //request the permission again or do something else 
                }
            }
        }
    }

это сработало для меня, но я не знаю, есть ли лучший способ.

0 голосов
/ 19 марта 2020

Вы должны взглянуть на Android Запрос приложения . Есть пример с комментариями, которые помогут вам понять.

Вы выполнили первую часть, которая запрашивает разрешение, затем вы должны обработать ответ с помощью onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)

Вы можете написать что-то вроде этого :

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        NotificationManager mNotificationManager = (NotificationManager) getApplication().getSystemService(Context.NOTIFICATION_SERVICE);
        if (mNotificationManager.isNotificationPolicyAccessGranted()) {
            Log.d("POLICY_PERMISSION", "DND permission granted for Phone.");
        } else {
            Log.d("POLICY_PERMISSION", "DND permission not granted for Phone.");
        }
    }
...