如何侦听用户是否授予或拒绝“请勿打扰”权限?

How do I listen for user grant or denial of Do Not Disturb permission?

我想向用户请求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

        }  

但是我如何侦听用户是否同意或拒绝此请求?也许他不允许免打扰权限,我怎么知道?

你应该看看 Android Request App。有注释的例子可以帮助你理解。

您完成了请求许可的第一部分,然后您必须使用 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.");
        }
    }

我使用 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          
        }

然后我使用 isNotificationPolicyAccessGranted()

onActivityResult 中检查了结果
@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 
                }
            }
        }
    }

这对我有用,但我不知道是否有更好的方法。