您的位置:首页 > 移动开发 > Android开发

Android 6.0权限管理与申请

2017-10-30 15:27 148 查看
android6.0之后为了保护用户隐私,一些权限是需要在程序运行时动态检测并需要用户手动设置是否给与这些权限。

权限分为:

normal permissions:在清单文件中添加就行了。

dangerous permissions:即使在清单文件中添加了,也需要在运行时通过用户授权。

下面看下dangerous permissions有哪些:

group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR

group:android.permission-group.CAMERA
permission:android.permission.CAMERA

group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS

group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS


这些权限组里面有很多权限,只要该权限组中有一个权限被allow,那么该组的所有权限都会被allow。

具体使用:

一、在第一次需要dangerous权限的地方检查权限是否授权:

if (ContextCompat.checkSelfPermission(
Activity activity, android.Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
//申请授权
}else{
//
}


PackageManager.PERMISSION_GRANTED表示已授权。

PackageManager.PERMISSION_DENIED表示未授权。

二、申请授权:

ActivityCompat.requestPermissions(
Activity activity,
new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION},
int REQUEST_CODE);


第一个参数:activity对象;

第二个参数:需要申请授权的权限数组;

第三个参数:用于 回调时候检测;

通过第二个参数可以看出可以一次性申请多个权限

三、处理权限申请的回调:

@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch(requestCode){
case REQUEST_CODE: {
if (grantResults.length > 0
&& grantResults[权限下标] == PackageManager.PERMISSION_GRANTED) {
//说明该下标对应的权限申请成功
//有多少个权限需要申请,grantResults的长度就等于多少,且grantResults数组元素的值分别对应于每个权限申请的结果。
} else {

//该权限申请失败
}
return;
}
}


以上就是权限申请的步骤了,然后添加几个api介绍:

if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,Manifest.permission.READ_CONTACTS))
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.

}


这个方法的作用是在上次用户已经拒绝这个权限申请后再次需要申请这个权限是,需要给用户一个解释,向用户展示一个提示框为什么需要这个权限。

那么合在一起的写法就是:

如果这个权限没有获取,先判断这个权限是否之前被拒绝过,如果拒绝过就弹个解释框,如果没拒绝过就去申请这个权限。然后在申请权限的回调中去坐相应的业务处理。

封装:也是借鉴hongyang和其他大神的博客然后自己的理解之后的一些封装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: