Closed LuoPeiQin closed 2 years ago
小伙子,你同时请求了精确和模糊的定位权限,但是授权的时候只给了模糊定位权限,那么肯定会导致跳过精确定位权限申请,间接导致精确定位权限授权失败,至于为什么 never 会为 true,这是因为 shouldShowRequestPermissionRationale 返回的是 false,不需要向用户弹窗解释该权限的用途(永久拒绝了该权限),当然这个 API 也有缺陷,当用户没有授权过该权限时,这个 API 会默认返回 false,而不是 true,从而会导致框架误判,这个问题暂时无解,如果你有好的解决方案欢迎提供给我。
嗯,这里我看过Google官方的说明,google不愿意提供明确的api调用来never的结果,避免大家引导用户跳转到设置页。所以shouldShowRequestPermissionRationale不太好用,是否可以考虑底层做一个存储,只有申请的权限shouldShowRequestPermissionRationale出现了true之后,再出现false才判断为never?可行吗?
嗯,这里我看过Google官方的说明,google不愿意提供明确的api调用来never的结果,避免大家引导用户跳转到设置页。所以shouldShowRequestPermissionRationale不太好用,是否可以考虑底层做一个存储,只有申请的权限shouldShowRequestPermissionRationale出现了true之后,再出现false才判断为never?可行吗?
小伙子,那你有没有考虑过以下几个场景:
用户第一次安装完应用后,并没有直接打开,而是跑到应用设置中将某个权限禁用掉,然后再从手机桌面打开,此时 shouldShowRequestPermissionRationale 的返回值为 false,加上本地没有存储过任何 shouldShowRequestPermissionRationale 的返回值为 true 的情况,会导致框架会告诉外层调用的人,用户没有永久拒绝,但是实际用户已经永久拒绝
开发者首次接入 XXPermissions,但是在此之前,用户已经永久拒绝过应用的某个权限,结果一申请自然是会被系统立马回绝,此时 shouldShowRequestPermissionRationale 的返回值为 false,加上本地没有存储过任何 shouldShowRequestPermissionRationale 的返回值为 true 的情况,会导致框架会告诉外层调用的人,用户没有永久拒绝,但是实际用户已经永久拒绝
理想很丰满,现实很骨感,这种想法存在诸多逻辑漏洞,整体流程是走不通的。
我的Android12也遇到了这个问题,只要选了每次询问权限,就再也进不去了
这一块的判断确实有点麻烦,这么一来的话,这个never的判断就变得不可靠了
@SerBad @LuoPeiQin 对于这一块确实暂时没有想到什么好办法,如果有的话欢迎提供给我,如果没有的话只能关闭 issue 了。
嗯,这里我看过Google官方的说明,google不愿意提供明确的api调用来never的结果,避免大家引导用户跳转到设置页。所以shouldShowRequestPermissionRationale不太好用,是否可以考虑底层做一个存储,只有申请的权限shouldShowRequestPermissionRationale出现了true之后,再出现false才判断为never?可行吗?
官方文档地址:请勿永久存储权限状态
问题描述
框架版本【必填】:16.2
问题描述【必填】:索尼Android 12手机定位权限never字段返回值错误,
复现步骤【必填】:1. 首次申请权限;;
测试代码-首次申请权限:
打印never值,为true D/BleTestActivity: onClick: 请求定位权限 D/BleTestActivity: onDenied: android.permission.ACCESS_FINE_LOCATION D/BleTestActivity: onDenied: never D/BleTestActivity: onGranted: checkLocationPermission
打印shouldShowRequestPermissionRationale结果
D/BleTestActivity: requestLocationPermission: ACCESS_COARSE_LOCATION = false D/BleTestActivity: requestLocationPermission: ACCESS_FINE_LOCATION = false
是否必现【必填】:是
出现问题的手机信息【必填】:Sony XQ-BQ72
出现问题的安卓版本【必填】:12
问题信息的来源渠道【必填】:自己遇到的
请回答
是部分机型还是所有机型都会出现【必答】:部分(使用OPPO Android12手机未复现)
框架最新的版本是否存在这个问题【必答】:是
是否已经查阅框架文档还未能解决的【必答】:是
issue 是否有人曾提过类似的问题【必答】:否
是否可以通过 Demo 来复现该问题【必答】:未测试 看了框架源码,最终的判断返回值在:PermissionDelegateImplV23中 return !PermissionUtils.checkSelfPermission(activity, permission) && !PermissionUtils.shouldShowRequestPermissionRationale(activity, permission);
使用原生的权限 API 是否会出现该问题【必答】:没有直接的原生值可以判断