阅读Android SDK时可以发现, Android Manifest下有两个内部类, 一个是permission ,还有一个是permission_group。
这两个内部类是干什么的呢? 有什么区别呢?
对于Permission, 可能做过Android开发的人应该都知道, 这就是权限。 在这个类中定义了很多的权限,比如网络访问权限、蓝牙设备访问权限、振动器使用权限等等..
一般用法就是在 AndroidManifest.xml 中进行定义, 如下例:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest
- xmlns:android="http://schemas./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>
-
- <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>
-
- <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" />
-
- <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, 以便告知用户这个权限的作用。 ------ 附加:
这里也有一个讨论的帖子:http://www./forum.php?mod=viewthread&tid=45287,结论是一致的。
|