tittle起得有点大,虽然不晓得以后会不会有第二篇,但是我还是觉得记一下,说不定别人用得上~
事情是这样的,今天企划的童鞋跑过来问我,怎么别人家的apk安装的时候,权限默认是全开的,而我们家的,默认都是关闭的,是不是我们家的哪里没写好
哈哈,恰恰是我们写的比人家的好(某种程度上),才会出现这样的情况,到这里,大概很多童鞋都知道怎么回事了,我就不卖关子了。
最近刚把 SDK 升级到23,而对于6.0的机子,只要你有apk的SDK为23,那么,你默认申请的权限就是全部关闭的,也就是在gradle里面包含下面两句
targetSdkVersion 23 compileSdkVersion 23
我们来做个简单的实验,新建两个工程,一个target为22,一个为23,内容嘛, 用默认的hello world就可以了,然后在Androidmanifest.xml里面声明
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
运行的结果如下,左边的apk使用22的版本,默认是打开,而右边用的是23,默认是关闭的
好了 ,那么问题来了,如果我要使用通讯录,但是我没权限,那怎么办?答案也很简单,没有就申请咯
大概思路是:
1. 查看权限时候已经具备
2.如果已经有权限就进行下一步操作
3.如果没有权限就向用户申请
4.申请到权限,进行下一步操作
5.申请不到,弹出提示,告诉用户,没有权限,相关功能用不了
申请权限的代码也很简单
int hasWriteContacts = checkSelfPermission( Manifest.permission.WRITE_CONTACTS ); if( !permissions.isEmpty() ) { requestPermissions(Manifest.permission.WRITE_CONTACTS , REQUEST_CODE_SOME_FEATURES_PERMISSIONS ); }
onRequestPermissionsResult
写的比我好很多的参考文章:
开发者须知:Android M 的权限机制
Android M 新的运行时权限开发者需要知道的一切