- 語法:
-
<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
- 指出通常無權存取
只要獲得權限就能存取內容供應器的資料
暫時超出
readPermission
,writePermission
,permission
和exported
屬性。"true"
表示可以獲得權限,"false"
表示無法獲得權限。 如果"true"
,代表可授予存取任何內容的權限 資料。如果設為"false"
,則只能授予權限 先前列出的資料中<grant-uri-permission>
子元素 會很有幫助預設值為"false"
。如要為應用程式元件授予一次性存取權,讓該元件存取受權限保護的資料,其中一個方法就是直接授予權限。舉例來說 訊息包含附件,郵件應用程式可能會呼叫 適當的檢視器開啟該影片 內容供應器所有資料的查看權限。
在這種情況下,
FLAG_GRANT_READ_URI_PERMISSION
和FLAG_GRANT_WRITE_URI_PERMISSION
Intent
物件中用於啟動元件的旗標。舉例來說, 郵件應用程式可能會將FLAG_GRANT_READ_URI_PERMISSION
放在Intent
已傳遞至Context.startActivity()
。權限僅限於Intent
中的 URI。如果要啟用這項功能,請將這項屬性設為
"true"
或定義<grant-uri-permission>
子元素, 呼叫Context.revokeUriPermission()
涵蓋的 URI 從供應器中刪除時。另請參閱
<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
- 用戶端讀取或寫入內容供應器資料所需的權限名稱。這項屬性可方便您針對讀取和寫入設定單一權限。不過,
readPermission
, 優先採用writePermission
和grantUriPermissions
屬性 取代了這首曲子如果
readPermission
屬性也會控制內容供應器的查詢權限。 如果已設定writePermission
屬性, 但會控制供應商資料的修改權限。 android:process
- 內容供應器執行的程序名稱。一般來說,應用程式的所有元件都是在針對應用程式建立的預設程序中執行。這個程序的名稱與應用程式套件的名稱相同。
<application>
個元素的process
可以設定不同的 做為所有元件的預設值不過,每個元件都可以使用本身的process
屬性覆寫預設值,讓您將應用程式分散至多個程序。如果指派給這項屬性的名稱開頭為半形冒號 (
:
), 只在必要時建立,專供應用程式使用 活動會在該程序中執行如果程序名稱的開頭是小寫半形字元,活動就會執行 但必須先獲得授權,才能使用該名稱 這樣一來,不同應用程式中的元件就能共用同一個程序, 資源用量
android:readPermission
用戶端查詢內容供應器所需的權限。
如果供應器將
android:grantUriPermissions
設為"true"
,或特定用戶端符合<grant-uri-permission>
子元素的條件,用戶端就能暫時取得內容供應器資料的讀取權限。另請參閱
permission
和writePermission
屬性的相關說明。android:syncable
- 資料是否由內容供應者控管
可與伺服器中的資料同步現在時間為
"true"
表示可以,"false"
表示不可以。 android:writePermission
用戶端要授予變更資料的權限 由內容供應器控管
如果供應器將
android:grantUriPermissions
設為"true"
,或特定用戶端符合<grant-uri-permission>
子元素的條件,用戶端就能暫時取得內容供應器資料的寫入權限。另請參閱
permission
和readPermission
屬性的相關說明。
- 導入版本:
- API 級別 1
- 另請參閱:
- 內容供應器
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2024-08-22 (世界標準時間)。
[]
[]
{"lastModified": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2024-08-22 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\u3002"}
[null,null,["上次更新時間:2024-08-22 (世界標準時間)。"]]