如何忘记Android M运行时权限对话框中的"永不再问"选项

Win*_*der 7 android android-6.0-marshmallow runtime-permissions

在此输入图像描述

我想知道存储"永不再问"复选框布尔标志的位置以及如何清除它的值?不一定是以编程方式,而是手动 - 通过设置,命令或某些工具.尝试清除应用程序数据,卸载,卸载和清除,尝试手动切换权限来回打开/关闭,尝试甚至为模拟器设置较新的Marshmallow图像,但没有运气!

Com*_*are 8

清除数据(设置>应用程序>您的应用程序>存储>清除数据)和卸载应用程序都会清除此标志的状态,同时清除与应用程序的运行时权限相关的所有其他内容.

通过此示例应用程序在运行Android 6.0的Nexus 5上测试了此行为.

我似乎记得在某个地方看到了一个手动选项,但我现在找不到它.它可能是M Developer Preview版本中存在的东西,并且已经被拉到最终的6.0版本中.


Nab*_*ari 7

您可以通过清除应用程序设置中的数据来“忘记”它。

编辑: 正如@me_ 所指出的,在某些设备中,仅清除应用程序数据可能不会重置“不再询问”条件。在这种情况下,手动打开然后关闭应用程序设置中的权限即可解决问题。

但是,如果您想查看是否已将权限设置为不再请求,则可以使用该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);
                }
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:我已经在这个答案中回答了完整的实现。