【问题标题】:"Never ask again" checkbox is never shown in Android runtime permissionAndroid运行时权限中永远不会显示“不再询问”复选框
【发布时间】:2016-03-19 03:40:24
【问题描述】:
我的手机是 Nexus6,23 级。
我的应用中的目标 sdk 版本是 22。
我在支持包中通过 Fragment 在 BaseFragment 中实现棉花糖运行时权限兼容功能。
根据sdk文档,在第一次被拒绝后,“不再询问”复选框将显示在权限对话框中。同时, shouldShowRequestPermissionRationale() 将返回 true。
但是,无论我拒绝多少次权限,我都无法在权限对话框中看到“不再询问”复选框,并且 shouldShowRequestPermissionRationale 始终返回 false。
有什么问题吗?
【问题讨论】:
标签:
android
android-6.0-marshmallow
【解决方案1】:
你是否在被拒绝后再次调用 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;
}
}
【解决方案2】:
有什么问题吗?
是的,就在这里:“我的应用程序中的目标 sdk 版本是 22。”
您的选择是:
使用23或更高的targetSdkVersion,并实现运行时权限代码(checkSelfPermission()、requestPermissions()等)
使用 22 或更低的 targetSdkVersion,并且不实现运行时权限代码(checkSelfPermission()、requestPermissions() 等)
您组合的预期结果(targetSdkVersion of 22 并尝试使用运行时权限代码)是未记录的 AFAIK。