Android6.0 运行时权限

Android6.0中为提高用户安全性,加入了RuntimePermission。对部分高危权限进行进一步的限制。

RuntimePermission特点:

  1. targetSDK版本低于Android23,程序安装时会默认授权所有在清单文件中注册的权限,不需要运行时权限。

  2. App是从低版本兼容,升级而来,程序拥有低版本时授权的所有权限。

  3. 申请授权运行时权限:

    检查权限是否被授权:
      ContextCompat.checkSelfPermission(context,permission)
      Permission: Manifest.permission.
    Return:
      PackageManager.PERMISSION_DENIED 权限未被授权
      PackageManager.PERMISSION_GRANTED 权限已被授权

    请求授权:
      ActivityCompat.requestPermissions(activity,permissions,requestCode);

    权限授权回调:
      @Override
      public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      }

RuntimePermission封装:

运行时权限与Activity是高度耦合的,方法的使用需要Activity作为参数,回调需要重写Activity中的方法。对RuntimePermission进行封装,有几种方式:

  1. 使用一个透明的Activity,将RuntimePermission相关操作封装,在需要使用时直接调用,调用结束finish掉该Activity。

  2. 使用Fragment,将Fragment添加到当前Activity中,Fragment本身无大小。RxPermissions。

  3. 在BaseActivity中封装RuntimePermission相关方法。用回调实现是否授权成功后的操作。在非Activity中调用,可以创建ActivityCollector类获取TopActivity传入方法。

Android6.0危险权限:

权限组 权限名称 权限效果
CALENDAR READ_CALENDAR 读取日历
WRITE_CALENDAR 写入日历
CAMERA CAMERA 相机拍照
CONTACTS READ_CONTACTS 读取联系人
WRITE_CONTACTS 写入联系人
GET_ACCOUNTS 获取手机号码
LOCATION ACCESS_FINE_LOCATION 获取精确位置
ACCESS_COARSE_LOCATION 获取大概位置
MICROPHONE RECORD_AUDIO 录音
PHONE READ_PHONE_STATE 读取通话状态
CALL_PHONE 拨出电话
READ_CALL_LOG 读取通话记录
WRITE_CALL_LOG 写入通话记录
ADD_VOICEMAIL 新增语音留言
USE_SIP 使用SIP网络电话
PROCESS_OUTGOING_CALLS 存取拨出电话
SENSORS BODY_SENSORS 读取体感资料
SMS SEND_SMS 发送短信
RECEIVE_SMS 接收短信
READ_SMS 读取短信
RECEIVE_WAP_PUSH 接收WAP推送信息
RECEIVE_MMS 接收多媒体短信
STORAGE READ_EXTERNAL_STORAGE 读取外部存储
WRITE_EXTERNAL_STORAGE 写入外部存储

参考:

Android 6.0 运行时权限讲解--郭霖

你可能感兴趣的:(Android6.0 运行时权限)