Android运行时权限中永远不会显示“不再询问”复选框
Posted
技术标签:
【中文标题】Android运行时权限中永远不会显示“不再询问”复选框【英文标题】:"Never ask again" checkbox is never shown in Android runtime permission 【发布时间】:2016-03-19 03:40:24 【问题描述】:我的手机是 Nexus6,23 级。
我的应用中的目标 sdk 版本是 22。
我在支持包中通过 Fragment 在 BaseFragment 中实现棉花糖运行时权限兼容功能。
根据sdk文档,在第一次被拒绝后,“不再询问”复选框将显示在权限对话框中。同时, shouldShowRequestPermissionRationale() 将返回 true。
但是,无论我拒绝多少次权限,我都无法在权限对话框中看到“不再询问”复选框,并且 shouldShowRequestPermissionRationale 始终返回 false。
有什么问题吗?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于Android运行时权限中永远不会显示“不再询问”复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何忘记 Android M 运行时权限对话框中的“不再询问”选项
当用户选择“不再询问”并禁用地理定位时,React native `Geolocation.getCurrentPosition` 承诺将永远不会被解决/拒绝
在请求运行时权限时选中“不再询问”框是不是会禁用未来的对话框?
Android 应用开发动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )