情景
在开发的过程中,最初发现小米MAX下的权限设置有问题。
以日历权限为例,
(1)当用户首次使用提醒时,系统会弹框询问是否开启权限,选择允许,一切正常;当用户选择拒绝时,一切正常,以后每次访问时都会toast需要权限。
(2)当用户在选择拒绝,并自行去设置页开启权限后,显示状态是权限开启,App获取的权限状态也是开启,但实际上并没有获取到权限,所以在后续按照有权限状态运行时会因为没有权限出现异常;在该情况下返回设置主动关闭权限,而后再回到App进入提醒时,会回到首次运行的状态,即(1)
OK,以上是这段时间经常出现的一类bug之一,本来没有当回事,以为只是权限判断的问题,改了几个类似的之后后知后觉这玩意不对劲,疯狂调试了一下午后有了以上的一个汇总。
本来这事到这就结束了,毕竟根据这个汇总,原因很显然是小米系统的问题(毕竟开发组加测试组一共近20来个手机,单单就几个小米有这个现象)。。。。
but,直到今天,意外的发现的一件事。。。。
在从未开启过开发者模式的小米手机上,从设置进去的权限页 和 开启过开发者模式的完!全!不!同!!!
下面上图(左边是开启开发者模式的权限设置页,右边是从未开启过开发者模式的权限页,也是安全中心的权限设置)(图方便,下面描述的时候就直接用左边右边了 -。-)
然后重点来了,特么这两个权限设置并不是相通的!!!而是包含关系(右边包含左边)
修改左边的状态,并不会改变右边的状态;改动右边的状态,左边的会跟着变化
很不幸,作为开发者,我们手里的手机,很显然都是开启开发者模式的,至少是曾经开启过的
so,便出现了上述问题,修改权限设置并没有生效,甚至产生不符合逻辑的操作,因为我们改动的都是左边的,而实际上生效的是右边的。。。。。
至此,此次权限问题有了一个结尾(如果不再发生bug的话),只要在右边这个设置页修改权限的话就没有问题了(右边这个可以从安全中心进入)
综上所述,还是小米系统的问题!!!
呵呵,我宠你嘛,挺萌的
再分割。。。
刚刚又发现一个新问题,在targetSDKVersion = 22
下,requestPermissions
的请求结果,即使点拒绝也是返回0.。。。简直了。。。
解决办法就是不用返回的grantResults
,直接再次用PermissionChecker.checkSelfPermission
(22)ContextCompat.checkSelfPermission
(23)判断权限有无
再另外-。-
小米MAX在targetSDKVersion = 22
好像会在运行时主动请求一次权限,该次请求有时间限制。这个不知道是不是代码问题还是确实是手机问题,因为通过代码requestPermissions请求的权限弹窗并没有倒计时。。。以后发现具体原因再说吧orz