阅读Android SDK时可以发现, Android Manifest下有两个内部类, 一个是permission ,还有一个是permission_group。
这两个内部类是干什么的呢? 有什么区别呢?
对于Permission, 可能做过Android开发的人应该都知道, 这就是权限。 在这个类中定义了很多的权限,比如网络访问权限、蓝牙设备访问权限、振动器使用权限等等..
一般用法就是在 AndroidManifest.xml 中进行定义, 如下例:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yfz" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".LesMain" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 支持ACTION_SEND --> <intent-filter> <action android:name="android.intent.action.SEND"> </action> <category android:name="android.intent.category.DEFAULT"> </category> <data android:mimeType="text/plain"> </data> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> <!-- 访问网络 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 使用振动的权限 --> <uses-permission android:name="android.permission.VIBRATE"></uses-permission> <!-- 键盘锁权限Allows applications to disable the keyguard --> <uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission> <!-- 调用相机权限 --> <uses-permission android:name="android.permission.CAMERA"/> <!-- 悬浮窗 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> </manifest>
这里面的<uses-permission android:name="android.permission.xxx" />就是权限定义。
一般我们都是在这边定义好, 不知道能不能动态授权噢.. 下次研究下!
那么permission_group是干什么的呢?
从SDK中可以看到, 这个类中只有很少的几个常量定义。究竟什么作用?
其实Android在定义 permission 时, 为每个Permission都进行了分组, 每一个Permission都有一个PermissionGroup属性。
来看一下Android源码(在frameworks/base/core/res /AndroidManifest.xml):
<!-- Used for permissions that can be used to make the user spend money without their direct involvement. For example, this is the group for permissions that allow you to directly place phone calls, directly send SMS messages, etc. --> <permission-group android:name="android.permission-group.COST_MONEY" android:label="@string/permgrouplab_costMoney" android:description="@string/permgroupdesc_costMoney" /> <!-- Allows an application to send SMS messages. --> <permission android:name="android.permission.SEND_SMS" android:permissionGroup="android.permission-group.COST_MONEY" android:protectionLevel="dangerous" android:label="@string/permlab_sendSms" android:description="@string/permdesc_sendSms" /> <!-- Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed. --> <permission android:name="android.permission.CALL_PHONE" android:permissionGroup="android.permission-group.COST_MONEY" android:protectionLevel="dangerous" android:label="@string/permlab_callPhone" android:description="@string/permdesc_callPhone" />
可以看到,这边先定义了一个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需要的权限,
比如你使用了<uses-permission android:name="android.permission.INTERNET" />权限,
那么在android的setting->applications->manage applications->你的应用程序,显示的是需要“Network communication”权限,这个“Network communication”就是permissionGroup的label。
所以说permissiongroup只是一个逻辑分组,作用也只有显示应用程序权限给用户看的。
当然需要额外说明的是, 并不是所有的Permission都有PermissionGroup, 有的可能没有分组。 这些没有分组的Permission也会自己指定label, 以便告知用户这个权限的作用。