“永不再问”复选框永远不会显示在Android运行时权限中

时间:2015-12-13 17:07:33

标签: android android-6.0-marshmallow

我的手机是Nexus6,23级。

我的应用中的目标sdk版本是22。

我在支持包中的Fragment实现BaseFragment中的marshmallow运行时权限兼容功能。

根据sdk文档,“永不再问”复选框将在第一次被拒绝后显示在权限对话框中。同时,shouldShowRequestPermissionRationale()将返回true。

但是,无论多少次拒绝权限,我都无法在权限对话框中看到“Never ask again”复选框,而且shouldShowRequestPermissionRationale始终返回false。

有什么不对吗?

2 个答案:

答案 0 :(得分:2)

  

有什么不对吗?

是的,就在这里:“我的应用中的目标sdk版本是22。”

您的选择是:

  1. 使用23或更高版本的targetSdkVersion,并实施运行时权限代码(checkSelfPermission()requestPermissions()等。)

  2. 使用22或更低版本的targetSdkVersion,并实现运行时权限代码(checkSelfPermission()requestPermissions()等。)

  3. 您的组合(targetSdkVersion为22并尝试使用运行时权限代码)的预期结果是未记录的AFAIK。

答案 1 :(得分:0)

你被拒绝后再次调用requestPermissions()了吗? 首次拒绝后再次调用requestPermissions()时,将显示“再也不要询问”复选框。

像这样:

private void checkPermission(){
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if(checkSelfPermission(Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED){
            requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS}, PERMISSION_REQUEST);
        }
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode){
        case PERMISSION_REQUEST:
            checkPermission();
            break;
    }
}