如何忘记 Android M 运行时权限对话框中的 "Never ask again" 选择
How to forget the "Never ask again" choice in Android M runtime permission dialog
我想知道 "Never ask again" 复选框布尔标志存储在哪里以及如何清除它的值?不一定以编程方式,而是手动 - 通过设置、命令或某些工具。尝试清除应用程序数据、卸载、卸载和清除,尝试手动来回切换权限 on/off,甚至尝试为模拟器设置更新的 Marshmallow 图像,但没有成功!
找到了:
系统设置 > 应用程序 > 重置应用程序首选项(在菜单中)
清除数据(“设置”>“应用”>“您的应用”>“存储”>“清除数据”)和卸载应用都会清除此标志的状态,同时清除与应用的运行时权限相关的所有其他内容。
此行为已通过 this sample app.
在 Nexus 5 运行 Android 6.0 上进行测试
我好像记得在某个地方看到过这个的手动选项,但我现在找不到了。它可能存在于 M Developer Preview 版本中,并在最终的 6.0 版本中被取消。
您可以通过清除应用设置中的数据来"forget"它。
编辑:
正如@me_ 所指出的,仅清除应用程序数据可能不会重置某些设备中的 "don't ask again" 条件。在这种情况下,手动打开然后关闭应用程序设置中的权限就可以解决问题。
但是如果你想知道一个权限是否被设置为不再请求,你可以使用 onRequestPermissionsResult()
方法以编程方式检查它。
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
for(String permission: permissions){
if(ActivityCompat.shouldShowRequestPermissionRationale(this, permission)){
//denied
}else{
if(ActivityCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED){
//allowed
} else{
//set to never ask again
Log.e("set to never ask again", permission);
}
}
}
}
PS:我已在 回答中回答完整实施。
https://www.youtube.com/watch?v=F8hQfmYTEaQ
您应该在设置->应用程序权限区域中手动启用和禁用权限。
我尝试了此页面上给出的所有建议。 None 他们成功了。手动启用和禁用返回对话框。
单击上面的 youtube post 以验证这是正确答案
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
boolean dontAsk = false;
if (requestCode == REQUEST_CAM_STORAGE_PERMISSION) {
for (String allowedPermissions : permissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(context, allowedPermissions)) {
Log.e("Permission: ", "User Has Denied Permission");
} else if (PermissionChecker.checkCallingOrSelfPermission(context, allowedPermissions) != PackageManager.PERMISSION_GRANTED) {
Log.e("Permission: ", "User Has Denied Permission with Don't Ask Again");
dontAsk = true;
break;
} else {
Log.e("Permission: ", "User Has Allowed Permission");
}
}
if (!dontAsk) {
Log.e("Permission: ", "Dont'Ask False");
checkPermission();
} else {
Log.e("Permission: ", "Dont'Ask True");
startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + this.getPackageName())));
}
}
}
唯一对我有用的解决方案是:
- 进入应用权限
- 启用和禁用所有权限
然后它会忘记 "Never ask again" 选择
我想知道 "Never ask again" 复选框布尔标志存储在哪里以及如何清除它的值?不一定以编程方式,而是手动 - 通过设置、命令或某些工具。尝试清除应用程序数据、卸载、卸载和清除,尝试手动来回切换权限 on/off,甚至尝试为模拟器设置更新的 Marshmallow 图像,但没有成功!
找到了:
系统设置 > 应用程序 > 重置应用程序首选项(在菜单中)
清除数据(“设置”>“应用”>“您的应用”>“存储”>“清除数据”)和卸载应用都会清除此标志的状态,同时清除与应用的运行时权限相关的所有其他内容。
此行为已通过 this sample app.
在 Nexus 5 运行 Android 6.0 上进行测试我好像记得在某个地方看到过这个的手动选项,但我现在找不到了。它可能存在于 M Developer Preview 版本中,并在最终的 6.0 版本中被取消。
您可以通过清除应用设置中的数据来"forget"它。
编辑: 正如@me_ 所指出的,仅清除应用程序数据可能不会重置某些设备中的 "don't ask again" 条件。在这种情况下,手动打开然后关闭应用程序设置中的权限就可以解决问题。
但是如果你想知道一个权限是否被设置为不再请求,你可以使用 onRequestPermissionsResult()
方法以编程方式检查它。
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
for(String permission: permissions){
if(ActivityCompat.shouldShowRequestPermissionRationale(this, permission)){
//denied
}else{
if(ActivityCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED){
//allowed
} else{
//set to never ask again
Log.e("set to never ask again", permission);
}
}
}
}
PS:我已在
https://www.youtube.com/watch?v=F8hQfmYTEaQ
您应该在设置->应用程序权限区域中手动启用和禁用权限。
我尝试了此页面上给出的所有建议。 None 他们成功了。手动启用和禁用返回对话框。
单击上面的 youtube post 以验证这是正确答案
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
boolean dontAsk = false;
if (requestCode == REQUEST_CAM_STORAGE_PERMISSION) {
for (String allowedPermissions : permissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(context, allowedPermissions)) {
Log.e("Permission: ", "User Has Denied Permission");
} else if (PermissionChecker.checkCallingOrSelfPermission(context, allowedPermissions) != PackageManager.PERMISSION_GRANTED) {
Log.e("Permission: ", "User Has Denied Permission with Don't Ask Again");
dontAsk = true;
break;
} else {
Log.e("Permission: ", "User Has Allowed Permission");
}
}
if (!dontAsk) {
Log.e("Permission: ", "Dont'Ask False");
checkPermission();
} else {
Log.e("Permission: ", "Dont'Ask True");
startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + this.getPackageName())));
}
}
}
唯一对我有用的解决方案是:
- 进入应用权限
- 启用和禁用所有权限
然后它会忘记 "Never ask again" 选择