<provider>
英文原文:http://developer.android.com/guide/topics/manifest/provider-element.html
采集(更新)日期:2014-7-1
搬遷自原博客:http://blog.sina.com.cn/s/blog_48d491300100zmv5.html
- 語法:
-
<provider android:authorities="list" 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>
<path-permission>
- 說明:
-
聲明一個 Content Provider 組件。 Content Provider 是
ContentProvider
的子類,它為應用程序管理的數據提供結構化的訪問方式。 應用程序的所有 Content Provider 都必須在 Manifest 文件的<provider>
元素中定義, 否則,系統是不予理會也不會去運行 Content Provider 的。只需要聲明本應用程序所含的 Content Provider 即可。屬於其他應用程序而本程序會用到的 Content Provider 不需要進行聲明。
Android 系統用 content URI 的 authority 部分來存放對 Content Provider 的引用。 例如,假定要訪問存儲了醫務人員信息的 Content Provider 。 這里調用了
ContentResolver.query()
方法,以下 URI 作為參數之一標明了 Content Provider:content://com.example.project.healthcareprovider/nurses/rn
content:
scheme 部分標明了這是一條指向 Android Content Provider 的 URI 。 authority 部分com.example.project.healthcareprovider
標明了 Content Provider 本身。 Android 系統會在已知的 Provider 和 authority 清單中查找該 authority 信息 。 字符串nurses/rn
是路徑信息,Content Provider 可以用它來標識數據的某個部分。注意,當在
<provider>
元素中定義 Content Provider 時, 請不要在android:name
中包含 scheme 及路徑信息,只要 authority 就可以了。關於開發和使用 Content Provider 的詳細信息,請參閱 API 指南 Content Provider。
- 屬性:
-
-
android:authorities
-
一個或多個 URI authority 列表,標識了 Content Provider 內提供的數據。 多個 authority 名稱之間用分號分隔。 為了避免沖突, authority 名稱應該使用 Java 風格的命名規則(比如
com.example.provider.cartoonprovider
)。 一般來說,它是實現 Content Provider 的ContentProvider
子類名。沒有默認值。至少必須指定一個 authority 。
-
android:enabled
-
Content Provider 能否被系統實例化 — “
true
”可以,“false
”不允許。 默認值是“true
”。<application>
元素擁有自己的enabled
屬性,適用於應用程序所有內部組件,包括 Content Provider 。 要允許內容提供器的使用,<application>
和<provider>
的該屬性都必須設置為“true
”(均為默認值即可)。 如果其中任何一個為“false
”,則該 Content Provider 將被禁用,它將不能被實例化。 -
android:exported
-
本 Content Provider 能否被其他應用程序使用:
- “
true
”:可以。 任何應用程序都可以通過 URI 訪問本 Content Provider,且受限於 Content Provider 聲明的權限要求。 - “
false
”:不可以。 通過設置android:exported="false"
,可以限制對本應用程序中的 Content Provider 進行。 只有那些用戶 ID 相同的應用程序才能訪問到它。
對於
android:minSdkVersion
或android:targetSdkVersion
小於等於"16"
的應用程序,默認值是“true”。 對於這兩個屬性值為"17"
以上的應用程序,默認值為"false"
。 - “
-
android:grantUriPermissions
-
是否能臨時超越
readPermission
、writePermission
和permission
屬性的限制, 給平常無權對 Content Provider 數據的訪問進行授權 — “true
”可以授權,“false
”不可以。 如果設為“true
”,則可對 Content Provider 的所有數據進行授權訪問。 如果設為“false
”,那就只能對<grant-uri-permission>
子元素中列出的數據子集(假如存在的話)進行授權。 默認值是“false
”。授權機制使得程序組件能對那些受權限保護的數據進行一次性的訪問。 比如,假定某條 e-mail 包含了附件,郵件程序可能會調用合適的查看器來打開附件,即使該查看器平常無權查看 Content Provider 的全部數據也沒關系。
這時候,可以通過設置啟動組件的 Intent 對象的
FLAG_GRANT_READ_URI_PERMISSION
和FLAG_GRANT_WRITE_URI_PERMISSION
標志位進行授權。 比如,郵件程序可以在傳入Context.startActivity()
的 Intent 中設置FLAG_GRANT_READ_URI_PERMISSION
。 權限即指定授予該 Intent 中的 URI。如果啟用了這種臨時授權的特性,不論是將本屬性設為“
true
”還是定義了<grant-uri-permission>
子元素,那么當所涉及的 URI 要從 Content Provider 中刪除時,必須調用一下Context.revokeUriPermission()
。請參閱
<grant-uri-permission>
元素。 -
android:icon
-
代表 Content Provider 的圖標。 本屬性必須設為對 drawable 資源的引用,該資源包含了圖片的定義。 如果未設置本屬性,則會用全局性的應用程序的圖標來代替。 (參閱
<application>
元素的icon
屬性)。 -
android:initOrder
- 相對於同一進程中其他 Content Provider 而言,本 Content Provider 的實例化順序。 如果多個 Content Provider 之間存在依賴關系,可以用本屬性來確保按照需要的依賴關系來創建各個 Content Provider 。 本屬性值是一個整數,數值越大就越先被初始化。
-
android:label
-
供用戶閱讀的 Content Provider 的文本標簽。 如果未設置本屬性,則用全局性的應用程序文本標簽代替(參閱
<application>
元素的label
屬性)。本文本標簽應該設為對字符串資源的引用,這樣就能像用戶界面中的其他字符串一樣對其進行本地化。 不過為了應用程序開發時的便利,也可以直接設置為字符串。
-
android:multiprocess
-
是否在每個客戶端進程中都能創建 Content Provider 的實例 —“
true
”表示可以在多個進程中運行實例,“false
”表示不可以。 缺省值是“false
”。通常情況下,Content Provider 是在定義它的應用程序的進程中實例化的。 然而,如果本屬性置為“
true
”,則系統可以在每個需要用到它的客戶端程序所在的進程中都創建一個實例,這樣就避免了進程間通訊的開銷。 -
android:name
-
實現 Content Provider 的類名稱,即
ContentProvider
的子類。 這應該是一個完全限定的類名稱(比如“com.example.project.TransportationProvider
”)。 不過作為簡稱,如過首字符為句點,則會在名稱前面自動加上<manifest>
元素指定的包名稱。沒有默認值。名稱必須指定。
-
android:permission
-
客戶端讀寫 Content Provider 中的數據所必需的權限名稱。 本屬性為一次設置讀和寫權限提供了快捷途徑。 不過,
readPermission
和writePermission
屬性優先於本設置。 如果同時設置了readPermission
屬性,則其將控制對 Content Provider 的讀取。 如果設置了writePermission
屬性,則其也將控制對 Content Provider 數據的修改。關於權限的詳細信息,請參閱 Manifest 介紹一文的 Permissions 章節和另一篇文檔 安全和權限。
-
android:process
-
運行 Content Provider 的進程名稱。 通常,應用程序的所有組件都運行在創建時的默認進程中。 該進程的名稱與程序包名相同。
<application>
元素的process
屬性也可以為每個組件設置不同的默認進程。 但每個組件也可以用各自的process
屬性覆蓋默認進程名稱,使得程序可以跨越多個進程運行。如果本屬性設置的名稱以冒號(':')開頭,則必要時會新建一個屬於該程序私有的進程,Content Provider 將在此新進程中運行。 如果進程名稱以小寫字母開頭,則內容提供器將在一個以此名字命名的全局進程中運行,並賦予應有的訪問權限。 這就允許不同應用程序的多個組件可以共享同一個進程,以減少對資源的占用。
-
android:readPermission
-
查詢 Content Provider 的客戶端所必需的權限。 參見
permission
和writePermission
屬性。 -
android:syncable
-
Content Provider 所控制的數據是否需要與某個服務器進行同步 — “
true
”表示需要同步,“false
”表示不需要。 -
android:writePermission
-
修改 Content Provider 數據的客戶端所必需的權限。 請參閱
permission
和readPermission
屬性。
-
- 引入自:
- API 級別 1
- 參閱:
- Content Provider