个人觉得关于国产机权限方面的事情,按照正常流程走,代码完全行得通。就像很多博客写的一样,拒绝了怎么办接收了怎么办。但是关于shouldShowRequestPermissionRationale这个方法有的手机得不到正确的值,所以还是不要用好了,用了也没效果。下面是小米6.0的测试结果:
一。小米M4,6.01
1.在安全中心设置成允许:永远返回0,即允许权限,可以读取联系人
2.在安全中心设置成拒绝:第一次-1,然后永远0,不能读取联系人
3.设置成询问模式:第一次-1,然后弹出小米的对话框,选择拒绝,然后永远返回0且不能读取
4.设置成询问模式:第一次-1,然后弹出小米对话框,选择允许,然后永远返回0,且能读取联系人
5.不设置申请权限,直接崩溃
结论:1.小米6.0系统拥有双重权限系统,miui拥有最高权限,android拥有第二权限,猜测,保留android权限系统,是为了通过google中的某些设定
2.(1)当在miui设置成允许时:android自动允许权限,即checkSelfPermission返回0.
(2)当在miui设置成拒绝时:此时,checkSelfPermission,返回-1,需要开发者手动申请权限,miui会默认申请成功,并不会弹出android系统的权限申请框,
(3)设置成询问时:checkSelfPermission,返回-1,需要开发者手动申请权限,miui会默认申请成功,并不会弹出android系统的权限申请框,
不论用户选择允许还是拒绝,checkSelfPermission都会返回0,此时根据用户的选择miui决定是否授予权限
3.心得:手动申请权限实际上是为了糊弄android系统,但是开发者必须的这样做,正常来说代码逻辑如下是可以正常运行的:
关于小米6.0:按照google官方正常逻辑来跑,是可以的,运行效果和小米6.0以下的系统是一样的。shouldShowRequestPermissionRationale这个方法是没有效果的。
其它国产机有的按照google的那一套,有的是自己的权限管理系统。这个也没关系,反正能运行就好了。