Android自訂許可權permission,androidpermission
Android是一種特權分隔的作業系統,在Android上啟動並執行每個應用程式都具有各自獨立的系統標識(Linux使用者ID和組ID)。系統各部分有不同的身份標識。因此,Linux上啟動並執行各個應用程式相互獨立且與系統無關。
Android的“許可權許可”機制通過限定特定的進程能夠執行的指定操作和限定對每一個資源點對點的訪問的URI許可來提供附加細粒度的安全功能。
由於核心讓每個應用程式運行在獨立的沙箱中,應用程式必須通過聲明所需要而沙箱沒有提供的許可權來明確的分配資源和資料。Android沒有採用會使使用者體驗複雜並且不利於安全的動態授權機制。應用程式靜態聲明他們所需要的許可權,在程式安裝時Android系統會提示使用者同意它們擷取這些許可權。
Android許可權模型是基於如下兩個目標而設計的:
通知使用者:
通過列出應用程式可能執行的所有敏感的操作,讓使用者更多地意識到安裝這個應用存在的潛在風險。這假定使用者會閱讀在安裝時彈出的許可權列表,並基於這些資訊來作出是否安裝應用的決定。
降低風險:
通過限制應用程式訪問Android系統敏感的API介面,來降低應用程式對整個系統帶來的傷害(比如病毒)。
Android許可權被分為四個等級:
普通級:
這些許可權並不能真正傷害到使用者(比如更換壁紙),當程式需要這些許可權是,開發人員不需要指定程式會自動賦予這些許可權。
危險級:
這些許可權可能會帶來真的傷害(比如打電話,開啟網路連結等),如果要使用它們需要開發人員在AndroidManifest.xml中聲明對應的許可權。
簽名級:
如果應用使用的是相同的簽署憑證時,這些許可權會自動授予給聲明或者建立這些許可權的程式。設計這一層級許可權的目的是方便組件間資料共用。
簽名/系統級:
和簽名級一樣,例外的是系統鏡像是自動擷取這些許可權的,這一層級是專為裝置製造商設計的。
在開發Android應用程式的過程中,如果我們要使用系統的某些服務(比如網路、待機、讀寫檔案許可權等)都需要首先像下面這樣在AndroidManifest.xml中聲明對應的許可權,然後才可以在代碼中訪問這些服務:
<!-- 檔案讀寫權限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 訪問網路的許可權 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 螢幕喚醒許可權 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DEVICE_POWER" />
同樣,除了能夠使用Android系統提供的各種許可權外,我們還可以自訂許可權來限制其它程式訪問應用的各種服務或者組件。任何程式想要和此程式的組件互動時,都需要聲明相應的許可權時才能成功地訪問。
自訂許可權步驟如下:
以為一個服務CalledService定義存取權限為例,具體步驟如下:
1、在被調用程式Called的AndroidManifest.xml檔案中作如下定義:
<!-- Service Permission --> <permission android:name="com.uperone.permission.SERVICE" android:label="@string/app_name" android:permissionGroup="@string/app_name" android:protectionLevel="normal" > </permission>
關於各標籤屬性的意義自行腦補,都是見名知意。
<service android:name="com.uperone.called.service.CalledService" android:permission="com.uperone.permission.SERVICE"> <intent-filter> <action android:name="com.uperone.action.SERVICE" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </service>
2、在需要調用該組件的應用程式Call工程的AndroidManifest.mxl檔案中聲明對應的許可權:
<uses-permission android:name="com.uperone.permission.SERVICE" />
3、在需要調用該組件的應用程式Call工程中啟動、停止改服務:
case R.id.startServiceBtnId:{Intent intent = new Intent( "com.uperone.action.SERVICE" );startService(intent);}break;
特別注意:如果在調用需要許可權的組件時沒有在Manifest.xml中聲明許可權,則會在運行對應程式碼片段時報異常!!!!
更多組件自訂許可權參見執行個體:Android自訂許可權permission
android怎添加許可權
加在AndroidManifest.xml 檔案中manifest標籤之後以內,application以外
安卓開源Android_permission存取權限
android.permission.ACCESS_NETWORK_STATE允許程式訪問有關GSM網路資訊(Allowsapplications to access information about networks)
android.permission.ACCESS_WIFI_STATE允許程式訪問Wi-Fi網路狀態資訊(Allowsapplications to access information about Wi-Fi networks)
android.permission.BLUETOOTH允許程式串連到已配對的藍牙裝置(Allowsapplications to connect to paired bluetooth devices)
android.permission.BLUETOOTH_ADMIN允許程式發現和配對藍牙裝置(Allowsapplicationsto discover and pair bluetooth devices)
android.permission.CHANGE_WIFI_STATE允許程式改變Wi-Fi串連狀態(Allowsapplications to change Wi-Fi connectivity state)
android.permission.DEVICE_POWER允許訪問底層電源管理(Allowslow-level access to power management)
android.permission.DISABLE_KEYGUARD允許程式禁用鍵盤鎖(Allowsapplications to disable the keyguard )
android.permission.EXPAND_STATUS_BAR允許一個程式擴充收縮在狀態列,Android開發網提示應該是一個類似WindowsMobile中的托盤程式(Allows an application to expand or collapse the status bar.)
android.permission.GET_DETAILED_TASKS 檢索正在啟動並執行應用的詳細資料,惡意程式可藉此獲得其他應用的私密資訊
android.permission.GET_TASKS 檢索正在啟動並執行應用,可用於瞭解當前裝置上使用了哪些應用
android.permission.INJECT_EVENTS 將自身的輸入事件(例如按鍵)提供給其他應用,惡意程式可堅持控制手機
android.permission.INTERNAL_SYSTEM_WINDOW 允許建立未授權的內部系統視窗,普通應用絕不應該使用此許可權
android.permission.MANAGE_APP_TOKENS 建立和管理令牌,普通應用絕不應該使用此許可權
android.permission.MASTER_CLEAR 恢復出廠預設值
android.permission.MANAGE_NETWORK_POLICY
android.permission.MANAGE_USB
android.permission.MOUNT_UNMOUNT_FILESYSTEMS允許掛載和反掛載檔案系統抽取式存放裝置(Allowsmounting and unmounting file systems for removable storage. )
android.permission.......餘下全文>>