检测是否可以请求或永久拒绝许可

Bas*_*sti 5 permissions android android-permissions

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

问题
我无法找到正确的检测方法,只有一次拒绝许可或者上次检查"永不再问"复选框并永久拒绝许可.
请记住,我不想知道在onRequestPermissionsResult回调中.如果当前授予,拒绝或永久拒绝许可,我需要在onCreate of my Activity中知道.

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

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

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

Sag*_*gar 9

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

遗憾的是,当用户选择" Never ask again " 时,没有官方API可用于检测是否永久拒绝权限

有一个工作围绕着哪些用途shouldShowRequestPermissionRationale.创建一个SharedPreference,其中包含默认值false和返回的存储值shouldShowRequestPermissionRationale.在更新值之前,请检查值是否为true.如果是,true那么不要更新它.

每当您想要检查权限时,请从中SharedPreference返回值和返回的当前值shouldShowRequestPermissionRationale.如果 shouldShowRequestPermissionRationale返回false但值为SharedPreferenceis true,则可以推断出Never ask again用户选择的值.

您可以参考我描述此方法的博客.

  • 当我在 Android 11 上测试它时,它遇到了重大问题。如果用户进入设置并选择“每次询问”,此方法仍会将其返回为“永久拒绝” (3认同)
  • @Basti 基于[文档](https://developer.android.com/training/permissions/requesting#explain) `shouldShowRequestPermissionRationale` 仅当用户之前拒绝了请求时才返回 true。这应该足够可靠 (2认同)

vis*_*nny 8

shouldShowRequestPermissionRationale根据先前权限请求中的用户首选项返回 true 或 false。

如果用户刚刚拒绝许可(不是永远)shouldShowRequestPermissionRationale将返回true。如果永远拒绝许可,则返回false。诀窍在于,即使用户允许权限 thenshouldShowRequestPermissionRationale也会返回false

因此,我们可以结合这两个条件来决定是否选择“不再询问”。

因此,如果用户未获得许可并shouldShowRequestPermissionRationale返回false,则意味着用户选择不再请求许可。


归档时间:

查看次数:

1000 次

最近记录:

6 年,10 月 前