tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial">
[java] view plain copy
- <permission android:description="string resource"
- android:icon="drawable resource"
- android:label="string resource"
- android:name="string"
- android:permissionGroup="string"
- android:protectionLevel=["normal" | "dangerous" |
- "signature" | "signatureOrSystem"] />
上面代碼來自官方文檔: http://developer.android.com/guide/topics/security/security.html。
propectionLevel這個屬性是必須聲明,告訴系統通知使用者的應用要求許可,或允許誰認為獲得許可的情況下。
permissionGroup這個是可選的,被用于協助t系統向使用者顯示權限,一般會像(listed in
android.Manifest.permission_group
)這個一樣設定為标準系統組,很少自定義,最好使用已經定義的,使用起來也友善。
lable,name和cicon用于描述權限。
在launcher2的manifest源代碼中,分别有permission和uses-permission的定義,
[java]
view plain
copy
- <permission
- android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_install_shortcut"
- android:description="@string/permdesc_install_shortcut" />
- <permission
- android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
- android:label="@string/permlab_uninstall_shortcut"
- android:description="@string/permdesc_uninstall_shortcut"/>
- android:name="com.android.launcher.permission.READ_SETTINGS"
- android:label="@string/permlab_read_settings"
- android:description="@string/permdesc_read_settings"/>
- android:name="com.android.launcher.permission.WRITE_SETTINGS"
- android:label="@string/permlab_write_settings"
- android:description="@string/permdesc_write_settings"/>
- <uses-permission android:name="android.permission.CALL_PHONE" />
- <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
- <uses-permission android:name="android.permission.GET_TASKS" />
- <uses-permission android:name="android.permission.READ_CONTACTS"/>
- <uses-permission android:name="android.permission.SET_WALLPAPER" />
- <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.BIND_APPWIDGET" />
- <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
- <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.SET_ANIMATION_SCALE" />
上面是自己定義的permission,下面是調用系統的權限,在上面自己定義的權限是在哪裡是用的哪?在manifest檔案中的101行:
- <receiver
- android:name="com.android.launcher2.InstallShortcutReceiver"
- android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
- <intent-filter>
- <action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
- </intent-filter>
- </receiver>
InstallShortcutReceive使用了上面定義的INSTALL_SHORTCUT的權限。
兩者之間的不同之一就是,作用域不同,在manifest.xml檔案中,<uses-permission>是和<application>同級的節點,一般<uses-permission >是在</application>後面的。但<permission>就不同了,是定義在<application>和</application>之間,和Activity、Service同級别的,同時使用group的權限組可以大幅減少你同類型相似權限的聲明。(這段表述有誤,應該是同級别)
其二可能就是<uses-permission>是官方定義的權限,是調用别人的東西的時候自己需要聲明的權限,<permission>是自己定義的權限,就是别人調用這個程式時需要用<uses-permission>來聲明。
在一般情況下實際上不需要為自己的應用程式聲明某個權限,除非你提供了供其他應用程式調用的代碼或者資料。這個時候你才需要使用<permission>這個标簽,很顯然這個标簽可以讓我們聲明自己程式的權限。