转自:https://blog.youkuaiyun.com/lhp15575865420/article/details/79210696
在Android6.0之前只需在AndroidManfiest.xml文件写明权限即可。但是在Android6.0之后也就是SDK>=23时,一些隐私权限需要动态申请,而且在用户同意授权之后APP才能拥有该权限。
如下9组权限需要动态申请。而且一组权限只要一个授权授权同意,全组都可用。
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
动态权限总共有三个方法:
ContextCompat.checkSelfPermission() 检查权限是否已经授权
ActivityCompat.requestPermissions() 动态申请权限,并弹出对话框
onRequestPermissionResult() 在Activity里面重写该犯法是权限申请之后的回调方法。
当然,动态权限申请也要在AndroidManifest.xml里面写明。
如果有多项权限需要动态申请。那么只需要把权限写入permission数组即可。下面也给出修改后的代码