Android 6.0权限管理与申请

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和其他大神的博客然后自己的理解之后的一些封装。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值