我想向用户请求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
}
}
}
}
这对我很有效,但我不知道是否有更好的方法。