M(6.0)相关的坑(一)


tittle起得有点大,虽然不晓得以后会不会有第二篇,但是我还是觉得记一下,说不定别人用得上~

事情是这样的,今天企划的童鞋跑过来问我,怎么别人家的apk安装的时候,权限默认是全开的,而我们家的,默认都是关闭的,是不是我们家的哪里没写好

哈哈,恰恰是我们写的比人家的好(某种程度上),才会出现这样的情况,到这里,大概很多童鞋都知道怎么回事了,我就不卖关子了。 

最近刚把 SDK 升级到23,而对于6.0的机子,只要你有apk的SDK为23,那么,你默认申请的权限就是全部关闭的,也就是在gradle里面包含下面两句

targetSdkVersion 23
compileSdkVersion 23

由于M权限机子的升级,如果你用了声明了使用23版本的SDK,Android也就默认你的app是之前经过6.0机子测试的,所以也要使用6.0的权限机子:默认为关,运行app后同用户动态申请

我们来做个简单的实验,新建两个工程,一个target为22,一个为23,内容嘛, 用默认的hello world就可以了,然后在Androidmanifest.xml里面声明

<uses-permission android:name="android.permission.WRITE_CONTACTS"/>


运行的结果如下,左边的apk使用22的版本,默认是打开,而右边用的是23,默认是关闭的

M(6.0)相关的坑(一)_第1张图片   M(6.0)相关的坑(一)_第2张图片

好了 ,那么问题来了,如果我要使用通讯录,但是我没权限,那怎么办?答案也很简单,没有就申请咯

大概思路是:

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 新的运行时权限开发者需要知道的一切



你可能感兴趣的:(android,权限)