普通权限(Normal Permission)与危险权限(Dangerous Permission)
Android系统中,权限被明确分成了普通权限(Normal Permission)与危险权限(Dangerous Permission)两种。Android应用的许多功能都需要获得相应的权限才能生效(读取联系人信息、调用手机摄像头等)。在Android 6.0之前,所有的权限只需要在Manifest文件中使用<uses-permission>元素声明即可,普通权限直接会被系统批准,而危险权限会在安装时向用户请求。如果请求得不到允许,应用的安装过程将被撤销。而自Android 6.0始,普通权限可以使用传统的方法静态获取,而危险权限必须在应用运行时动态获取。
区别普通权限与危险权限的关键因素是看该权限是否会侵犯到用户的隐私。像设置系统时区(time zone)这样的权限基本不会涉及到用户的隐私,因此它属于普通权限;而读取联系人信息这样的权限明显会触及到用户的私密数据,因此它属于危险权限。
危险权限及权限组(Permission Group)
为了便于管理,Android系统将功能相似的权限,如 READ_EXTERNAL_STORAGE 与 WRITE_EXTERNAL_STORAGE等编成了数个权限组(Permission Group)。同一个组内的所有权限会被同时授予。具体的情况有以下两种:
- 如果应用申请一个已在Manifest文件中声明的危险权限,而此时应用还未获得该危险权限所属的权限组中的任何一个权限,那么系统会弹出一个对话框,要求用户同意授予该权限组内的权限(不会指明是组内哪一个权限)。
- 如果应用申请一个已在Manifest文件中声明的危险权限,而此时应用已经获得了该危险权限所属的权限组中的任意一个权限,那么系统会立即批准该请求,而不会和用户发生任何交互。
危险权限组列表如下:
(1)CALENDAR:
- READ_CALENDAR
- WRITE_CALENDAR
(2)CAMERA:
- CAMERA
(3)CONTACTS:
- READ_C