如何侦听用户是否授予或拒绝“请勿打扰”权限?
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
}
}
}
}
这对我有用,但我不知道是否有更好的方法。
我想向用户请求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
}
}
}
}
这对我有用,但我不知道是否有更好的方法。