随着Android 6.0(API level 23,Marshmallow)的发布,Google引入了新的运行时权限机制,旨在更好地保护用户隐私和安全,这一变化打破了以往应用在安装时一次性授予所有权限的模式,改为在应用运行时动态请求所需权限。
1、Normal Permissions:这类权限不涉及用户隐私,通常不会对用户造成不良影响,例如网络访问、手机震动等,这些权限在应用安装时自动授予,无需用户手动确认。
2、Dangerous Permissions:涉及用户隐私或可能对设备造成影响的权限,例如读取联系人、发送短信、访问相机等,这些权限必须在应用运行时由用户明确授权。
1、检查权限是否已被授予:在需要请求权限之前,首先通过ContextCompat.checkSelfPermission()
方法检查应用是否已经获得了该权限。
2、请求权限:如果权限未被授予,则通过ActivityCompat.requestPermissions()
方法向用户请求权限,这个方法会弹出一个系统对话框,让用户选择是否授予权限。
3、处理用户响应:用户选择后,系统会回调onRequestPermissionsResult()
方法,在这个方法中,根据用户的选择(授予或拒绝)执行相应的逻辑。
权限组 | 权限名称 | 是否需要动态申请 |
CONTACTS | READ_CONTACTS | 是 |
WRITE_CONTACTS | 是 | |
GET_ACCOUNTS | 是 | |
PHONE | READ_CALL_LOG | 是 |
CALL_PHONE | 是 | |
ADD_VOICEMAIL | 是 | |
CALENDAR | READ_CALENDAR | 是 |
WRITE_CALENDAR | 是 | |
CAMERA | CAMERA | 是 |
SENSORS | BODY_SENSORS | 是 |
LOCATION | ACCESS_FINE_LOCATION | 是 |
ACCESS_COARSE_LOCATION | 是 | |
STORAGE | READ_EXTERNAL_STORAGE | 是 |
WRITE_EXTERNAL_STORAGE | 是 | |
MICROPHONE | RECORD_AUDIO | 是 |
SMS | READ_SMS | 是 |
RECEIVE_WAP_PUSH | 是 | |
RECEIVE_MMS | 是 | |
SEND_SMS | 是 |
1、问:为什么Android 6.0要引入运行时权限机制?
答:Android 6.0引入运行时权限机制主要是为了增强用户隐私和数据安全,通过让用户在应用运行时动态授权,可以确保用户更加清晰地了解自己的权限被哪些应用使用,从而避免不必要的权限泄露风险。
2、问:如何处理用户拒绝权限请求的情况?
答:当用户拒绝权限请求时,可以在onRequestPermissionsResult()
方法中处理逻辑,如果用户选择了“不再询问”,则下次申请相同权限时不会再次弹出提示框,可以通过调用shouldShowRequestPermissionRationale()
方法来判断是否应该向用户解释为什么需要这个权限,并引导用户去设置页面手动开启权限。