天天看點

permission和uses-permission的差別

tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial">

[java]  ​​view plain​​ ​​copy​​

  1. <permission android:description="string resource"  
  2.             android:icon="drawable resource"  
  3.             android:label="string resource"  
  4.             android:name="string"  
  5.             android:permissionGroup="string"  
  6.             android:protectionLevel=["normal" | "dangerous" |   
  7.                                      "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​​

  1.  <permission  
  2.         android:name="com.android.launcher.permission.INSTALL_SHORTCUT"  
  3.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"  
  4.         android:protectionLevel="normal"  
  5.         android:label="@string/permlab_install_shortcut"  
  6.         android:description="@string/permdesc_install_shortcut" />  
  7.     <permission  
  8.         android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"  
  9.         android:label="@string/permlab_uninstall_shortcut"  
  10.         android:description="@string/permdesc_uninstall_shortcut"/>  
  11.         android:name="com.android.launcher.permission.READ_SETTINGS"  
  12.         android:label="@string/permlab_read_settings"  
  13.         android:description="@string/permdesc_read_settings"/>  
  14.         android:name="com.android.launcher.permission.WRITE_SETTINGS"  
  15.         android:label="@string/permlab_write_settings"  
  16.         android:description="@string/permdesc_write_settings"/>  
  17.     <uses-permission android:name="android.permission.CALL_PHONE" />  
  18.     <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />  
  19.     <uses-permission android:name="android.permission.GET_TASKS" />  
  20.     <uses-permission android:name="android.permission.READ_CONTACTS"/>  
  21.     <uses-permission android:name="android.permission.SET_WALLPAPER" />  
  22.     <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />  
  23.     <uses-permission android:name="android.permission.VIBRATE" />  
  24.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  25.     <uses-permission android:name="android.permission.BIND_APPWIDGET" />  
  26.     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
  27.     <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />  
  28.     <uses-permission android:name="android.permission.SET_ANIMATION_SCALE" />  

上面是自己定義的permission,下面是調用系統的權限,在上面自己定義的權限是在哪裡是用的哪?在manifest檔案中的101行:

  1. <receiver  
  2.             android:name="com.android.launcher2.InstallShortcutReceiver"  
  3.             android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">  
  4.             <intent-filter>  
  5.                 <action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />  
  6.             </intent-filter>  
  7.         </receiver>  

InstallShortcutReceive使用了上面定義的INSTALL_SHORTCUT的權限。

            兩者之間的不同之一就是,作用域不同,在manifest.xml檔案中,<uses-permission>是和<application>同級的節點,一般<uses-permission >是在</application>後面的。但<permission>就不同了,是定義在<application>和</application>之間,和Activity、Service同級别的,同時使用group的權限組可以大幅減少你同類型相似權限的聲明。(這段表述有誤,應該是同級别)

    其二可能就是<uses-permission>是官方定義的權限,是調用别人的東西的時候自己需要聲明的權限,<permission>是自己定義的權限,就是别人調用這個程式時需要用<uses-permission>來聲明。

在一般情況下實際上不需要為自己的應用程式聲明某個權限,除非你提供了供其他應用程式調用的代碼或者資料。這個時候你才需要使用<permission>這個标簽,很顯然這個标簽可以讓我們聲明自己程式的權限。