<提供者>

語法:
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string" >
    ...
</provider>
包含於:
<application>
可包含:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
說明:
宣告內容供應器元件。內容供應器是 ContentProvider 的子類別,可為應用程式管理的資料提供結構化存取權。應用程式中的所有內容供應器都必須在資訊清單檔案的 <provider> 元素中定義,否則系統無從得知這些內容供應器的存在,也不會加以執行。

您只應宣告屬於應用程式一部分的內容供應器,請勿在應用程式中,宣告您在其他應用程式中使用的內容供應器。

Android 系統會根據「主機名稱」字串 (供應器的「內容 URI」一部分) 儲存內容供應器的參照。舉例來說,假設您想要存取儲存了醫療照護專業人員相關資訊的內容供應器。如要這麼做,您必須呼叫 ContentResolver.query() 方法,取用可用於識別供應器的 URI 和其他引數:

content://com.example.project.healthcareprovider/nurses/rn

content:「配置」可將 URI 識別為指向 Android 內容供應器的內容 URI。主機名稱 com.example.project.healthcareprovider 是用來識別供應器本身。Android 系統會從已知供應器及其主機名稱的清單中查詢主機名稱。子字串 nurses/rn 是一個「路徑」,可供內容供應器用來識別供應器資料子集。

<provider> 元素中定義供應器時,請只加入主機名稱,不要在 android:name 引數中加入配置或路徑。

如要瞭解如何使用及開發內容供應器,請參閱「內容供應器」。

屬性:
android:authorities
包含一或多個 URI 主機名稱的清單,用於識別內容供應器提供的資料。如要列出多個主機名稱,請使用半形分號區隔名稱。為了避免衝突,請為主機名稱使用 Java 式的命名慣例,例如 com.example.provider.cartoonprovider。通常這是實作供應器的 ContentProvider 子類別名稱。

這項屬性沒有預設值,且至少須指定一個主機名稱。

android:enabled
指出內容供應者是否可由系統例項化。"true" 表示可以,"false" 表示不可以。預設值為 "true"

<application> 元素有專屬的 enabled 屬性,適用於包括內容供應器在內的所有應用程式元件。<application><provider> 屬性都必須是 "true" (此為兩者的預設設定),才能啟用內容供應器。如有任一屬性為 "false",系統會停用供應器,並且無法進行例項化。

android:directBootAware

指出內容供應器是否具有「直接啟動感知特性」,即是否可在使用者解鎖裝置前執行。

注意:直接啟動期間,應用程式中的內容供應器只能存取儲存在「受裝置保護」儲存空間中的資料。

預設值為 "false"

android:exported
指出內容供應器是否可供其他應用程式使用。
  • "true":供應器可供其他應用程式使用。任何應用程式都能使用供應器的內容 URI 來存取供應器,前提是須具備針對該供應器指定的權限。
  • "false":供應器無法供其他應用程式使用。如果設定 android:exported="false",則只有您的應用程式能夠存取供應器。應用程式必須具備與供應器相同的使用者 ID (UID),或是已透過 android:grantUriPermissions 元素暫時獲得供應器的存取權,才能存取供應器。

這項屬性是在 API 級別 17 中導入,因此如果裝置搭載 API 級別 16 以下版本,則會表現出這項屬性設為 "true" 時的行為。如果將 android:targetSdkVersion 設為 17 以上,則針對搭載 API 級別 17 以上版本的裝置,其預設值會是 "false"

您可以透過 permission 屬性設定權限,這樣就能設定 android:exported="false",同時限制供應器的存取權。

android:grantUriPermissions
指出通常無法存取內容供應器資料的對象能否獲得存取權,並暫時略過 readPermissionwritePermissionpermission,以及 exported 屬性設下的限制。

"true" 表示可以獲得權限,"false" 表示無法獲得權限。如果設為 "true",表示可授予內容供應器所有資料的存取權。如果設為 "false",則只能授予 <grant-uri-permission> 子元素 (如果有) 中所列資料子集的存取權。預設值為 "false"

如要為應用程式元件授予一次性存取權,讓該元件存取受權限保護的資料,其中一個方法是直接授予權限。舉例來說,如果電子郵件包含附件,郵件應用程式可能會呼叫適當的檢視器來開啟附件,即便該檢視器沒有查看內容供應器所有資料的一般權限。

在這種情況下,則是由啟動元件的 Intent 物件所含的 FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION 標記授予權限。舉例來說,郵件應用程式可能會在傳遞至 Context.startActivity()Intent 中放置 FLAG_GRANT_READ_URI_PERMISSION。該權限是 Intent 中 URI 的專屬權限。

如果您將這項屬性設為 "true" 或定義 <grant-uri-permission> 子元素來啟用這項功能,則必須在涵蓋的 URI 從供應器中遭到刪除後呼叫 Context.revokeUriPermission()

另請參閱 <grant-uri-permission> 元素的相關說明。

android:icon
代表內容供應器的圖示。這項屬性會設為包含圖片定義的可繪製資源參照。如未設定,系統會改用針對應用程式整體指定的圖示。詳情請參閱 <application> 元素的 icon 屬性相關說明。
android:initOrder
內容供應器的例項化順序 (相對於由相同程序所代管的其他內容供應器)。如果內容供應器之間有依附元件,則只要為每個內容供應器設定這項屬性,即可確保系統依照這些依附元件所要求的順序建立供應器。這個值為整數,數字越大表示例項化的優先順序越高。
android:label
使用者可理解的所提供內容標籤。如未設定這項屬性,系統會改用針對應用程式整體設定的標籤。詳情請參閱 <application> 元素的 label 屬性相關說明。

這個標籤通常設為字串資源的參照,這樣才能像使用者介面中的其他字串一樣進行本地化。不過為了方便起見,您也可以在開發應用程式時將其設為原始字串。

android:multiprocess
如果應用程式在多個程序中執行,這項屬性會決定是否要建立多個內容供應器執行個體。如果設為 "true",表示每個應用程式程序都有專屬內容供應器物件。如果設為 "false",表示應用程式程序只會共用一個內容供應器物件。預設值為 "false"

將這個標記設為 "true" 可減少處理序間通訊的負擔,藉此提升效能,但也會增加每個程序的記憶體使用量。

android:name
實作內容供應器的類別名稱,是 ContentProvider 的子類別。這通常要是完整的類別名稱,例如 "com.example.project.TransportationProvider"。不過為了精簡起見,如果名稱的第一個字元是半形句號,則會加到 <manifest> 元素中所指定套件名稱的後方。

這項屬性沒有預設值,您必須指定名稱。

android:permission
用戶端讀取或寫入內容供應器資料所需的權限名稱。這項屬性可方便您針對讀取和寫入設定單一權限。不過,readPermissionwritePermissiongrantUriPermissions 屬性的優先順序高於這項屬性。

如果一併設定了 readPermission 屬性,該屬性會控制內容供應器的查詢權限。而如果設定了 writePermission 屬性,該屬性會控制供應器資料的修改權限。

如要進一步瞭解權限,請參閱應用程式資訊清單總覽中的「權限」一節和「安全性提示」。

android:process
指定內容供應器要在哪個名稱的程序中執行。一般來說,應用程式的所有元件都是在為應用程式建立的預設程序中執行。這個程序的名稱與應用程式套件的名稱相同。

<application> 元素的 process 屬性可以為所有元件設定不同的預設值。不過,每個元件都可以使用本身的 process 屬性覆寫預設值,讓您將應用程式分散至多個程序。

如果指派給此屬性的名稱以半形冒號開頭 (:),系統會視需要建立一個該應用程式專屬的新程序,而活動會在該程序中執行。

如果程序名稱的開頭是小寫英文字元,活動會在採用該名稱的通用程序中執行,前提是該程序具備相關權限,這樣可讓不同應用程式中的元件共用程序,進而減少資源用量。

android:readPermission

用戶端查詢內容供應器所需的權限。

如果供應器將 android:grantUriPermissions 設為 "true",或特定用戶端符合 <grant-uri-permission> 子元素的條件,用戶端就能暫時取得內容供應器資料的讀取權限。

另請參閱 permissionwritePermission 屬性的相關說明。

android:syncable
內容供應器所控制的資料能否與伺服器上的資料同步處理。"true" 表示可以,"false" 表示不可以。
android:writePermission

用戶端需要具備這項權限,才能變更內容供應器所控制的資料。

如果供應器將 android:grantUriPermissions 設為 "true",或特定用戶端符合 <grant-uri-permission> 子元素的條件,用戶端就能暫時取得內容供應器資料的寫入權限。

另請參閱 permissionreadPermission 屬性的相關說明。

導入版本:
API 級別 1
另請參閱:
內容供應器