happylishang / happylishang.github.io

http://elephanty.top/
MIT License
6 stars 2 forks source link

targetSdkVersion对 Android权限检查API checkSelfPermission的影响 — 看书的小蜗牛 #8

Open happylishang opened 6 years ago

happylishang commented 6 years ago

https://elephanty.top//2017/10/11/targetSdkVersion%E5%AF%B9-Android%E6%9D%83%E9%99%90%E6%A3%80%E6%9F%A5API-checkSelfPermission%E7%9A%84%E5%BD%B1%E5%93%8D/

Android6.0之后,权限分为install时的权限跟运行时权限,如果我们的targetSdkVersion>=23,install权限同runtime权限是分开的,app也要针对6.0已经做适配,没什么大问题,无论运行在旧版本还是6.0之后的手机上都ok,这也是Google推荐的适配方案。但是如果targetSdkVersion < 23 ,在6.0之后的手机上就会遇到一些问题,因为在这种情况下默认权限是全部授予的,但是可能会被用户手动取消,而Context的checkSelfPermission权限检查接口也会失效,因为这个API接口6.0之后用的是runtime-permission的模型,而targetSdkVersion < 23 时候,app只有intalled的权限,其granted值一直是true,也可以看做是全部是授权了的,就算在设置里面取消授权也不会影响installed权限的granted,而Context的checkSelfPermission的接口却是用granted这个值作为授权与否的参考,所以如果用这个接口,那得到的一定是授权了,是不准确的,如下:targetSdkVersion < 23的时候,package信息中的权限包含app申请的全部权限,