android 权限申请流程

危险权限

权限组 权限
CALENDAR(读写日历) 1.READ_CALENDAR 2.WRITE_CALENDAR
CAMERA(相机权限) CAMERA
CONTACTS(读写联系人权限) 1.READ_CONTACTS 2.WRITE_CONTACTS 3.GET_ACCOUNTS
LOCATION(定位权限) 1.ACCESS_FINE_LOCATION 2.ACCESS_COARSE_LOCATION
MICROPHONE RECORD_AUDIO
PHONE 1.READ_PHONE_STATE 2.CALL_PHONE 3.READ_CALL_LOG 4.WRITE_CALL_LOG 5.ADD_VOICEMAIL 6.USE_SIP 7.PROCESS_OUTGOING_CALLS
SENSORS BODY_SENSORS
SMS 1.SEND_SMS 2.RECEIVE_SMS 3.READ_SMS 4.RECEIVE_WAP_PUSH 5.RECEIVE_MMS
STORAGE 1. READ_EXTERNAL_STORAGE 2.WRITE_EXTERNAL_STORAGE

权限申请

android 6.0以后要动态生成权限 权限通过一个,同组权限默认全部通过,例如申请了read_external_storage,权限通过,则同时拥有write权限.但是8.0以后则同组权限不会认定为通过.需要手动申请,这时系统会自动批准通过.
面对此种情况,我们可以申请全部全线

申请权限流程

首次安装

  1. 判断权限是否开启
  2. 有, 执行正常主流程
    没有, 请求权限(系统弹出权限对话框)
    (1)同意: 执行正常主流程
    (2)不同意:必要权限(app中需要,没有代码执行不了)可自定义弹框提示,点击确定去设置页面开启,如果不是必要权限不处理,执行正常主流程
    (3)不同意+不在提示:必要权限可弹出弹框提示,点击确定去设置页面开启,如果不是必要权限不处理--执行正常主流程
  3. 再次打开app 或者再次需要此权限时
    对(1)(2)处理如上,但是(3)需要特殊处理
    当选择“不在提示+拒绝” 请求权限系统不会再次弹出对话框
    在第一次选择“不在提示+拒绝”设置标记 noNote = true;
    第二次,如果 noNote = true,自定义弹框提示,点击确定去设置页面开启

一般首页只做权限申请,不强制用户必须选择
当某个页面需要特殊权限,在强制提醒用户开启权限

不同的手机权限设置页面打开方式不同,需要适配

  1. 是否显示请求权限弹窗
  @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults != null){
            for(int i = 0;i

你可能感兴趣的:(android 权限申请流程)