App Manifest詳解
權限
權限是對設備上一部分代碼或數據的訪問限制。施加權限去保護重要代碼和數據不被亂用,以傷害用戶體驗。
每一個權限使用唯一的標籤定義。通常,標籤指明瞭限制的行爲,如下面這些Android定義的權限:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一個特徵最多被一個權限保護。
如果應用程序要訪問一個受權限保護的特徵,它必須在manifest中用<uses-permission>
元素聲明它所需要的權限。當應用被安裝在設備上時,安裝器通過檢查被應用程序證書籤名的權限來決定是否授予請求的權限,很多情況下,會直接詢問用戶是否授予該權限。一旦權限被授予,該應用程序就可以使用這個受保護的特徵了。如果沒有授予,它嘗試訪問這些權限都會失敗,而不會給用戶任何通知。
應用程序可以使用權限保護它自己的組件(activities, services, broadcast receivers, and content providers),它可以使用任何Android定義的(被列在android.Manifest.permission)或被其他應用程序聲明的權限。
應用程序可以定義自己的權限,新的權限使用<permission>
素聲明。例如,一個activity可以像下面一樣被保護:
<manifest . . . >
<permission android:name="com.example.project.DEBIT_ACCT" . . . />
<uses-permission android:name="com.example.project.DEBIT_ACCT" />
. . .
<application . . .>
<activity android:name="com.example.project.FreneticActivity"
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . .
</activity>
</application>
</manifest>
注意,在這個示例中,DEBIT_ACCT
權限不僅需要使用<permission>
元素聲明,還需要使用<uses-permission>
元素請求權限。爲了該應用程序的其他組件能夠建立這個受保護的activity,該權限必須被請求,儘管這個保護已經被應用程序自身所使用。
如果爲權限屬性設置的權限已在某個位置聲明過(如android.permission.CALL_EMERGENCY_NUMBERS
),則沒有必要用<permission>
元素再次對其進行聲明。但,仍然必須用<uses-permission>
請求這個權限。
<permission-tree>
爲將要被定義在代碼中的一組權限聲明瞭一個命名空間。<permission-group>
元素爲權限集(所有使用<permission>
元素在manifest中聲明或在其他位置聲明的權限)定義了一個標籤。它僅影響當呈現給用戶時,這些權限被怎樣組織。<permission-group>
元素不能指定那個權限屬於哪個組,它僅給這個組一個名字。通過在<permission>
元素的permissionGroup
屬性中指定一個組的名字,來將這個權限放置在這個組中。