首页 > 解决方案 > 检测是否可以请求或永久拒绝许可

问题描述

情况
我的一个片段访问了相机。所以当然我需要先检查我的活动中的权限,然后再重定向到它。如果用户拒绝该权限,则 Activity 完成并将他重定向到他所在的上一个 Activity。
此外,我想在 Activity 启动并检测到权限被永久拒绝时显示一个不同的片段。(android权限对话框上的小复选框“不再询问”)

问题
我找不到合适的检测方法,权限是否仅被拒绝一次,或者如果上次选中“不再询问”复选框并永久拒绝权限。
请记住,我不想在 onRequestPermissionsResult 回调中知道这一点。如果权限当前被授予、拒绝或永久拒绝,我需要在我的活动的 onCreate 中知道。

我尝试过
ActivityCompat#shouldShowRequestPermissionRationale的似乎是检测过去是否拒绝了许可。如果它只被拒绝一次而不是永久拒绝,它也会返回 true。

PermissionChecker#checkPermission()似乎没有注意到永久和仅一次拒绝许可状态之间的任何区别。

问题
是否有任何方法可以检测权限是否被拒绝但仍然可以请求,或者是否被永久拒绝?

标签: androidpermissionsandroid-permissions

解决方案


是否有任何方法可以检测权限是否被拒绝但仍然可以请求,或者是否被永久拒绝?

不幸的是,当用户选择“不再询问”时,没有可用的官方 API 来检测权限是否被永久拒绝

有一种解决方法使用shouldShowRequestPermissionRationale. 使用默认值创建一个 SharedPreferencefalse并在其中存储返回的值shouldShowRequestPermissionRationale。在更新值之前,请检查设置的值是否为true. 如果是,true则不要更新它。

每当您要检查权限时,请从 中获取值SharedPreference和返回的当前值shouldShowRequestPermissionRationale。如果 shouldShowRequestPermissionRationalereturnfalse但 value from SharedPreferenceis true,则可以推断出Never ask again是用户选择的。

您可以参考我的博客,我在其中描述了这种方法。


推荐阅读