危险权限
权限组
权限
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)不同意:必要权限(app中需要,没有代码执行不了)可自定义弹框提示,点击确定去设置页面开启,如果不是必要权限不处理,执行正常主流程
(3)不同意+不在提示:必要权限可弹出弹框提示,点击确定去设置页面开启,如果不是必要权限不处理--执行正常主流程
再次打开app 或者再次需要此权限时
对(1)(2)处理如上,但是(3)需要特殊处理
当选择“不在提示+拒绝” 请求权限系统不会再次弹出对话框
在第一次选择“不在提示+拒绝”设置标记 noNote = true;
第二次,如果 noNote = true,自定义弹框提示,点击确定去设置页面开启
一般首页只做权限申请,不强制用户必须选择
当某个页面需要特殊权限,在强制提醒用户开启权限
不同的手机权限设置页面打开方式不同,需要适配
是否显示请求权限弹窗
@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
if(PackageManager.PERMISSION_DENIED == grantResults[i]){
// 未申请时(默认) = false
// 同意 = false
// 申请拒绝+不在询问(认为用户不在需要此权限) = false
//申请拒绝 = ture
//下面就是拒绝+不在提示 = false
if(!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])){
Toast.makeText(this,"权限拒绝,不在询问",Toast.LENGTH_SHORT).show();
}
}
}
}
}