我的手机是Nexus6,23级。
我的应用中的目标sdk版本是22。
我在支持包中的Fragment实现BaseFragment中的marshmallow运行时权限兼容功能。
根据sdk文档,“永不再问”复选框将在第一次被拒绝后显示在权限对话框中。同时,shouldShowRequestPermissionRationale()将返回true。
但是,无论多少次拒绝权限,我都无法在权限对话框中看到“Never ask again”复选框,而且shouldShowRequestPermissionRationale始终返回false。
有什么不对吗?
答案 0 :(得分:2)
有什么不对吗?
是的,就在这里:“我的应用中的目标sdk版本是22。”
您的选择是:
使用23或更高版本的targetSdkVersion
,并实施运行时权限代码(checkSelfPermission()
,requestPermissions()
等。)
使用22或更低版本的targetSdkVersion
,并不实现运行时权限代码(checkSelfPermission()
,requestPermissions()
等。)
您的组合(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;
}
}