如何监听用户授予或拒绝"请勿打扰"权限



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

但是,我如何听取用户对此请求的同意或拒绝?也许他不允许DND的许可,我怎么知道?

您应该看看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.");
}
}

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

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

最新更新