Android 6.0版本(Api 23)推出了很多新的特性, 大幅提升了用户体验, 同时也为程序员带来新的负担. 动态权限管理就是这样, 一方面让用户更加容易的控制自己的隐私, 一方面需要重新适配应用权限,Android将权限分为普通权限和危险权限,危险权限需要在使用时让用户手动允许。危险权限一共9组24个权限,表格如下:
权限组名 | 权限名 |
CALENDAR | READ_CALENDAR,WRITE_CALENDAR |
CAMERA | CAMERA |
CONTACTS | READ_CONTACTS,WRITE_CONTACTS,GET_ACCOUNTS |
LOCATION | ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION |
MICROPHONE | RECORD_AUDIO |
PHONE | READ_PHONE_STATE,CALL_PHONE, READ_CALL_LOG,WRITE_CALL_LOG,ADD_VOICEMAIL,USE_SIP,PROCESS_OUTGOING_CALLS |
SENSORS | BODY_SENSORS |
SMS | SEND_SMS,RECEIVE_SMS,READ_SMS,RECEIVE_WAP_PUSH,RECEIVE_MMS |
STORAGE | READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE |
android.permission.READ_CALENDAR允许程序读取用户日历数据
android.permission.WRITE_CALENDAR允许一个程序写入但不读取用户日历数据
android.permission.CAMERA,允许访问摄像头进行拍照
android.permission.READ_CONTACTS允许程序读取用户联系人数据
android.permission.WRITE_CONTACTS允许程序写入但不读取用户联系人数据
android.permission.GET_ACCOUNTS访问一个帐户列表在Accounts Service中
android.permission.ACCESS_FINE_LOCATION允许一个程序访问精良位置(如GPS)
android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi热点来获取粗略的位置
android.permission.RECORD_AUDIO允许程序录制音频
android.permission.CALL_PHONE允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认
android.permission.READ_PHONE_STATE 访问电话状态
android.permission.READ_CALL_LOG 查看电话日志
android.permission.WRITE_CALL_LOG写入电话日志
android.permission.ADD_VOICEMAIL 允许应用程序添加系统中的语音邮件
android.permission.USE_SIP 允许程序使用SIP视频服务
android.permission.PROCESS_OUTGOING_CALLS 允许应用程序监视、修改、忽略拨出的电话
android.permission.BODY_SENSORS 允许该应用存取监测您身体状况的传感器所收集的数据,例如您的心率
android.permission.SEND_SMS允许程序发送SMS短信
android.permission.RECEIVE_SMS允许程序监控一个将收到短信息,记录或处理
android.permission.READ_SMS允许程序读取短信息
android.permission.RECEIVE_WAP_PUSH允许程序监控将收到WAP PUSH信息
android.permission.RECEIVE_MMS允许一个程序监控将收到MMS彩信,记录或处理
android.permission.WRITE_EXTERNAL_STORAGE 允许程序写入外部存储,如SD卡上写文件
android.permission.READ_EXTERNAL_STORAGE 访问您设备上的照片、媒体内容和文件
想要了解更全权限可以看我之前的文章:
Android Manifest下有两个内部类, 一个是permission ,还有一个是permission_group。对于Permission, 可能做过Android开发的人应该都知道, 这就是权限。 在这个类中定义了很多的权限,比如网络访问权限、蓝牙设备访问权限、振动器使用权限等等
属性:
android:description
权限的用户可读说明,比标签更长,信息更丰富。该说明可能会显示以向用户说明权限 - 例如,当系统询问用户是否向其他应用授予权限时。
此属性必须设置为对字符串资源的引用;与 label
属性不同,它不能是原始字符串。
android:icon
对表示权限的图标的可绘制资源的引用。
android:label
可向用户显示的权限的名称。
为方便起见,您可以在开发应用时将此标签直接设置为原始字符串。不过,当准备好发布应用时,应将标签设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。
android:name
权限的名称。这是将在代码中(例如,在
元素和应用组件的 permission
属性中)用于引用权限的名称。
注意:系统不允许多个软件包声明具有相同名称的权限,除非所有软件包都使用相同的证书进行签名。如果某个软件包声明了一个权限,则系统不允许用户安装具有相同权限名称的其他软件包,除非这些软件包使用与第一个软件包相同的证书进行签名。为了避免命名冲突,我们建议为自定义权限使用反向域式命名,例如 com.example.myapp.ENGAGE_HYPERSPACE
。
android:permissionGroup
将此权限分配给一个组。此属性的值是该组的名称,必须使用此应用或其他应用中的
元素声明。如果未设置此属性,则此权限不会属于某个组。
android:protectionLevel
说明权限中隐含的潜在风险,并指示系统在确定是否将权限授予请求授权的应用时应遵循的流程。
每个保护级别都包含基本权限类型以及零个或多个标记。例如,"dangerous"
保护级别没有标记。相反,保护级别 "signature|privileged"
是 "signature"
基本权限类型和 "privileged"
标记的组合。
下表列出了所有基本权限类型。如需查看标记列表,请参阅 protectionLevel
。
可以看到,这边先定义了一个PermissionGroup : android.permission-group.COST_MONEY, 然后又定义了两个Permission :
android.permission.SEND_SMS 和 android.permission.CALL_PHONE , 需要注意的是,这两个权限中都一个android:permissionGroup属性,这个属性就指定了这个权限所属的PermissionGroup。
而PermissionGroup在定义时,仅仅制定了label和descrip , 就是说明一下这个权限组的作用,没什么其他用处。
permissiongroup,就是permission里面的一个tag。主要作用是用来显示application需要的权限,比如你使用了
那么在android的setting->applications->manage applications->你的应用程序,显示的是需要“Network communication”权限,这个“Network communication”就是permissionGroup的label。所以说permissiongroup只是一个逻辑分组,作用也只有显示应用程序权限给用户看的。当然需要额外说明的是, 并不是所有的Permission都有PermissionGroup, 有的可能没有分组。 这些没有分组的Permission也会自己指定label, 以便告知用户这个权限的作用。