android: permission和uses-permission

首先,先看一下permission定義的格式:html

[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.htmljava

 

propectionLevel這個屬性是必須聲明,告訴系統通知用戶的應用要求許可,或容許誰認爲得到許可的狀況下。android

permissionGroup這個是可選的,被用於協助t系統向用戶顯示權限,通常會像(listed inandroid.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:permissionGroup="android.permission-group.SYSTEM_TOOLS"  
  10.         android:protectionLevel="normal"  
  11.         android:label="@string/permlab_uninstall_shortcut"  
  12.         android:description="@string/permdesc_uninstall_shortcut"/>  
  13.     <permission  
  14.         android:name="com.android.launcher.permission.READ_SETTINGS"  
  15.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"  
  16.         android:protectionLevel="normal"  
  17.         android:label="@string/permlab_read_settings"  
  18.         android:description="@string/permdesc_read_settings"/>  
  19.     <permission  
  20.         android:name="com.android.launcher.permission.WRITE_SETTINGS"  
  21.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"  
  22.         android:protectionLevel="normal"  
  23.         android:label="@string/permlab_write_settings"  
  24.         android:description="@string/permdesc_write_settings"/>  
  25.   
  26.   
  27.     <uses-permission android:name="android.permission.CALL_PHONE" />  
  28.     <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />  
  29.     <uses-permission android:name="android.permission.GET_TASKS" />  
  30.     <uses-permission android:name="android.permission.READ_CONTACTS"/>  
  31.     <uses-permission android:name="android.permission.SET_WALLPAPER" />  
  32.     <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />  
  33.     <uses-permission android:name="android.permission.VIBRATE" />  
  34.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  35.     <uses-permission android:name="android.permission.BIND_APPWIDGET" />  
  36.     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
  37.     <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />  
  38.     <uses-permission android:name="android.permission.SET_ANIMATION_SCALE" />  


上面是本身定義的permission,下面是調用系統的權限,在上面本身定義的權限是在哪裏是用的哪?在manifest文件中的101行:app

 

 

[java]  view plain  copy
 
  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的權限。ide

 

            二者之間的不一樣之一就是,做用域不一樣,在manifest.xml文件中,<uses-permission>是和<application>同級的節點,通常<uses-permission >是在</application>後面的。但<permission>就不一樣了,是定義在<application>和</application>之間,和Activity、Service同級別的,同時使用group的權限組能夠大幅減小你同類型類似權限的聲明。(這段表述有誤,應該是同級別)測試

    其二可能就是<uses-permission>是官方定義的權限,是調用別人的東西的時候本身須要聲明的權限,<permission>是本身定義的權限,就是別人調用這個程序時須要用<uses-permission>來聲明。ui

在通常狀況下實際上不須要爲本身的應用程序聲明某個權限,除非你提供了供其餘應用程序調用的代碼或者數據。這個時候你才須要使用<permission>這個標籤,很顯然這個標籤可讓咱們聲明本身程序的權限。

附:詳細中英對照:

<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission>
容許讀寫訪問"properties"表在checkin數據庫中,改值能夠修改上傳

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission>
容許一個程序訪問CellID或WiFi熱點來獲取粗略的位置

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
容許一個程序訪問精良位置(如GPS)

<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" ></uses-permission>
容許應用程序訪問額外的位置提供命令

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" ></uses-permission>
容許程序建立模擬位置提供用於測試

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
容許程序訪問有關GSM網絡信息

<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" ></uses-permission>
容許程序使用SurfaceFlinger底層特性

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission>
容許程序訪問Wi-Fi網絡狀態信息

<uses-permission android:name="android.permission.ADD_SYSTEM_SERVICE" ></uses-permission>
容許程序發佈系統級服務

<uses-permission android:name="android.permission.BATTERY_STATS" ></uses-permission>
容許程序更新手機電池統計信息

<uses-permission android:name="android.permission.BLUETOOTH" ></uses-permission>
容許程序鏈接到已配對的藍牙設備

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" ></uses-permission>
容許程序發現和配對藍牙設備

<uses-permission android:name="android.permission.BRICK" ></uses-permission>
請求可以禁用設備

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" ></uses-permission>
容許程序廣播一個提示消息在一個應用程序包已經移除後

<uses-permission android:name="android.permission.BROADCAST_STICKY" ></uses-permission>
容許一個程序廣播經常使用intents

<uses-permission android:name="android.permission.CALL_PHONE" ></uses-permission>
容許一個程序初始化一個電話撥號不需經過撥號用戶界面須要用戶確認

<uses-permission android:name="android.permission.CALL_PRIVILEGED" ></uses-permission>
容許一個程序撥打任何號碼,包含緊急號碼無需經過撥號用戶界面須要用戶確認

<uses-permission android:name="android.permission.CAMERA" ></uses-permission>
請求訪問使用照相設備

<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" ></uses-permission>
容許一個程序是否改變一個組件或其餘的啓用或禁用

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission>
容許一個程序修改當前設置,如本地化

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>
容許程序改變網絡鏈接狀態

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>
容許程序改變Wi-Fi鏈接狀態

<uses-permission android:name="android.permission.CLEAR_APP_CACHE" ></uses-permission>
容許一個程序清楚緩存從全部安裝的程序在設備中

<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" ></uses-permission>
容許一個程序清除用戶設置

<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" ></uses-permission>
容許啓用禁止位置更新提示從無線模塊

<uses-permission android:name="android.permission.DELETE_CACHE_FILES" ></uses-permission>
容許程序刪除緩存文件

<uses-permission android:name="android.permission.DELETE_PACKAGES" ></uses-permission>
容許一個程序刪除包

<uses-permission android:name="android.permission.DEVICE_POWER" ></uses-permission>
容許訪問底層電源管理

<uses-permission android:name="android.permission.DIAGNOSTIC" ></uses-permission>
容許程序RW診斷資源

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" ></uses-permission>
容許程序禁用鍵盤鎖

<uses-permission android:name="android.permission.DUMP" ></uses-permission>
容許程序返回狀態抓取信息從系統服務

android.permission.EXPAND_STATUS_BAR
容許一個程序擴展收縮狀態欄

android.permission.FACTORY_TEST
做爲一個工廠測試程序,運行在root用戶

android.permission.FLASHLIGHT
訪問閃光燈

android.permission.FORCE_BACK
容許程序強行一個後退操做是否在頂層activities

android.permission.FOTA_UPDATE android
 一個預留權限

android.permission.GET_ACCOUNTS
訪問一個賬戶列表在Accounts Service中

android.permission.GET_PACKAGE_SIZE
容許一個程序獲取任何package佔用空間容量

android.permission.GET_TASKS
容許一個程序獲取信息有關當前或最近運行的任務,一個縮略的任務狀態,是否活動等等

android.permission.HARDWARE_TEST
容許訪問硬件
 
android.permission.INJECT_EVENTS
容許一個程序截獲用戶事件如按鍵、觸摸、軌跡球等等到一個時間流

android.permission.INSTALL_PACKAGES
容許一個程序安裝packages

android.permission.INTERNAL_SYSTEM_WINDOW
容許打開窗口使用系統用戶界面

android.permission.INTERNET
容許程序打開網絡套接字

android.permission.MANAGE_APP_TOKENS
容許程序管理(建立、催後、z- order默認向z軸推移)程序引用在窗口管理器中

android.permission.MASTER_CLEAR
恢復出廠設置權限,清除一切用戶數據

android.permission.MODIFY_AUDIO_SETTINGS
容許程序修改全局音頻設置

android.permission.MODIFY_PHONE_STATE
容許修改話機狀態,如電源,人機接口等

android.permission.MOUNT_UNMOUNT_FILESYSTEMS
容許掛載和反掛載文件系統可移動存儲

android.permission.PERSISTENT_ACTIVITY
容許一個程序設置他的activities顯示

android.permission.PROCESS_OUTGOING_CALLS
容許程序監視、修改有關播出電話

android.permission.READ_CALENDAR
容許程序讀取用戶日曆數據

android.permission.READ_CONTACTS
容許程序讀取用戶聯繫人數據

android.permission.READ_FRAME_BUFFER
容許程序屏幕波或和更多常規的訪問幀緩衝數據

android.permission.READ_INPUT_STATE
容許程序讀取底層系統日誌文件

android.permission.READ_OWNER_DATA
容許程序讀取全部者數據

android.permission.READ_SMS
容許程序讀取短信息

android.permission.READ_SYNC_SETTINGS
容許程序讀取同步設置

android.permission.READ_SYNC_STATS
容許程序讀取同步狀態

android.permission.REBOOT
請求可以從新啓動設備

android.permission.RECEIVE_BOOT_COMPLETED
容許一個程序接收到 ACTION_BOOT_COMPLETED廣播在系統完成啓動

android.permission.RECEIVE_MMS
容許一個程序監控將收到MMS彩信,記錄或處理

android.permission.RECEIVE_SMS
容許程序監控一個將收到短信息,記錄或處理

android.permission.RECEIVE_WAP_PUSH
容許程序監控將收到WAP PUSH信息

android.permission.RECORD_AUDIO
容許程序錄制音頻

android.permission.REORDER_TASKS
容許程序改變Z軸排列任務

android.permission.RESTART_PACKAGES
容許程序從新啓動其餘程序

android.permission.SEND_SMS
容許程序發送SMS短信

android.permission.SET_ACTIVITY_WATCHER
容許程序監控或控制activities已經啓動全局系統中

android.permission.SET_ALWAYS_FINISH
容許程序控制是否活動間接完成在處於後臺時

android.permission.SET_ANIMATION_SCALE
修改全局信息比例

android.permission.SET_DEBUG_APP
配置一個程序用於調試

android.permission.SET_ORIENTATION
容許底層訪問設置屏幕方向和實際旋轉

android.permission.SET_PREFERRED_APPLICATIONS
容許一個程序修改列表參數PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()方法

android.permission.SET_PROCESS_FOREGROUND
容許程序當前運行程序強行到前臺

android.permission.SET_PROCESS_LIMIT
容許設置最大的運行進程數量

android.permission.SET_TIME_ZONE
容許程序設置時間區域

android.permission.SET_WALLPAPER
容許程序設置壁紙

android.permission.SET_WALLPAPER_HINTS
容許程序設置壁紙hits

android.permission.SIGNAL_PERSISTENT_PROCESSES
容許程序請求發送信號到全部顯示的進程中

android.permission.STATUS_BAR
容許程序打開、關閉或禁用狀態欄及圖標

android.permission.SUBSCRIBED_FEEDS_READ
容許一個程序訪問訂閱RSS Feed內容提供

android.permission.SUBSCRIBED_FEEDS_WRITE
系統暫時保留改設置

android.permission.SYSTEM_ALERT_WINDOW
容許一個程序打開窗口使用 TYPE_SYSTEM_ALERT,顯示在其餘全部程序的頂層

android.permission.VIBRATE
容許訪問振動設備

android.permission.WAKE_LOCK
容許使用PowerManager的 WakeLocks保持進程在休眠時從屏幕消失

android.permission.WRITE_APN_SETTINGS
容許程序寫入API設置

android.permission.WRITE_CALENDAR
容許一個程序寫入但不讀取用戶日曆數據

android.permission.WRITE_CONTACTS
容許程序寫入但不讀取用戶聯繫人數據

android.permission.WRITE_GSERVICES
容許程序修改Google服務地圖

android.permission.WRITE_OWNER_DATA
容許一個程序寫入但不讀取全部者數據

android.permission.WRITE_SETTINGS
容許程序讀取或寫入系統設置

android.permission.WRITE_SMS
容許程序寫短信

android.permission.WRITE_SYNC_SETTINGS容許程序寫入同步設置

相關文章
相關標籤/搜索