AndroidManifest.xml檔案詳解(provider)

來源:互聯網
上載者:User

文法(SYNTAX):

<providerandroid: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>

被包含於(CONTAINED IN):

<application>

能夠包含的元素(CAN CONTAIN):

<meta-data>

<grant-uri-permission>

<path-permission>

說明(DESCRIPTION):

這個元素用於聲明一個內容提供器,它對應一個ContentProvider類的子類。它提供了對由應用程式管理的資料的結構化的訪問。應用程式使用的所有的內容提供器都必須在其資訊清單檔中由<provider>元素來聲明。對於那些沒有在清單中聲明的內容提供器,系統看不到,也不會運行。(只需要聲明那些作為該應用程式一部分的來開發的那些內容提供器,而不是那些由應用程式使用的由其他人開發本應用之外的那些內容提供器)。

Android系統通過content:URI的授權部分來識別內容提供器。例如,假設下列的URI要傳遞給ContentResolver.query()方法:

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

content:表示資料是屬於內容提供器的,授權(com.example.project.healthcareprovider):標識著一個具體的提供器。因此授權必須唯一的。通常,就像這個例子一樣,授權是一個完整的ContentProvider子類的名稱。URI的路徑部分被內容提供器用來標識具體的資料子集,但是那些路徑沒有被聲明在資訊清單檔中。

關於使用可開發內容提供器的更多資訊,請看內容提供的文檔()。

http://blog.csdn.net/fireofstar/article/details/7307402

屬性(ATTRIBUTES):

android:authorities

標識內容提供器範圍內的資料URI的授權列表,有多個授權時,要用分號來分離每個授權。為了避免衝突,授權名應該使用Java樣式的命名規則(如:com.example.provider.cartoonprovider)。通常,用ContentProvider子類名稱來設定這個屬性。

這個屬性沒有預設值,至少要指定一個授權。

android:enabled

這個屬性用於指定這個內容提供器是否能夠被系統安裝。設定為true,則可以安裝;否則不能安裝。預設值是true。

<application>元素有它自己的enabled屬性,這個屬性會應用給所有的應用程式組件,包括內容提供器。<application>和<provider>的enabled屬性都必須設定為true(它們的預設值都是true)。如果有一個設定為false,那麼提供器就被禁止安裝。

android:exported

這個屬性用於指定該內容提供器是否能夠被其他的應用程式組件使用。如果設定為true,則可以被使用,否則不能被使用。如果設定為false,該提供器只對同名的應用程式或有相同使用者ID的應用程式有效。預設值是true。

雖然能夠使用這個屬性來公開內容提供器,但是依然還要用permission屬性來限制對它的訪問。

android:grantUriPermission

這個屬性用於設定那些對內容提供的資料沒有存取權限的訪問者,是否能夠被授予訪問的許可權,這個許可權是臨時性的,它會克服由readPermission、writePermission和permission屬性的設定限制。如果這個屬性設定為true,那麼許可權就可以授予訪問者,否則不會授予沒有存取權限的訪問者。如果設定為true,則許可權可以臨時被授予內容提供器的任何資料。如果設定為false,則許可權只能被授予<gran-uri-permission>子項目中所列出的資料子集。預設值是false。

這種授權是應用程式提供了一種一次性訪問被許可權所保護的資料的方法。例如,當一個e-mail包含了一個附件時,mail應用程式就可以調用適當的瀏覽器來開啟附件,即使這個瀏覽器沒有查看所有內容提供器資料的許可權。

在這樣的情境中,許可權是通過啟用組件的Intent對象中的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION標記來授予的。例如,mail應用程式可以把FLAG_GRANT_READ_URI_PERMISSION標記放到傳遞給Context.startActivity()方法的Intent參數中。這樣許可權就被授予了Intent對象中所指定的URI。

如果要啟用這個功能,既可以通過把這個屬性設定為true來完成,也可以通過定義<grant-uri-permission>子項目來實現,在切換RUI時,必須調用Context.revokeUriPermission()方法從提供器把許可權刪除。

android:icon

這個屬性用於定義一個代表內容提供器的表徵圖。它必須要引用一個包含圖片定義的可繪製資源。如果這個屬性沒有設定,那麼就會使用應用程式的<application>元素的icon屬性值來代替。

android:initOrder

這個屬性用於定義內容提供器應該被執行個體化的順序,這個順序是相對與相同進程所擁有的其他內容提供器的。當內容提供器間有相互的依賴時,就需要設定這個屬性,以確保它們能夠按照其依賴的順序被建立。這個屬性值是一個簡單的整數,大的數字要被優先初始化。

Android:label

這個屬性用於給內容提供器定義一個使用者可讀的標籤。如果這個屬性沒有設定,那麼它會使用<application>元素的label屬性值來代替。

這個標籤應該引用一個字串資源來設定,以便它能夠像其他的使用者介面中的字串一樣被本地化。但是為了方便應用程式的開發,也能夠使用原生的字串來設定這個屬性,但正式發布時一定要引用字串資源。

android:multiprocess

這個屬性用於設定是否能夠在每個使用該內容提供器的用戶端進程中都建立一個內容提供器的執行個體,如果設定為true,這個能夠在其每個用戶端進程中建立一個執行個體,否則不可以。預設值是false。

通常,內容提供器是在定義它的應用程式的進程中被執行個體化的。但是,如果這個屬性被設定為true,系統就能夠在每個要與該內容提供器進行互動的用戶端進程中建立一個內容提供器的執行個體,這樣就避免了處理序間通訊的開銷。

android:name

這個屬性用於定義內容提供器的實作類別的名稱,它是ContentProvider類的一個子類。這個屬性應該使用完整的Java類名來設定(如:com.example.project.TransportationProvider)。但是也可以使用簡寫(如:.TransporttationProvider),這時系統會使用<manifest>元素中指定的包名跟這個簡寫名稱的組合來識別內容提供器。

這個屬性沒有預設值,必須要給這個屬性設定一個名稱。

android:permission

這個屬性用於設定用戶端在讀寫內容提供器的資料時必須要有的許可權的名稱。這個屬性為同時設定讀寫權限提供了一種便利的方法。但是readPermission和writePermission屬性的優先順序要比這個屬性高。如果readPermission屬性也被設定了,那麼它就會控制對內容提供器的查詢訪問。如果writePermission屬性被設定,它就會控制對內容提供器資料的修改訪問。

android:process

這個屬性用於定義內容提供器應該運行在那個進程中的進程名稱。通常,應用程式的所有組件都運行在給應用程式建立的預設進程中。它有與應用程式套件組合相同的名稱。<application>元素的process屬效能夠給其所有的組件設定一個不同的預設進程。但是每個組件都能夠用它們自己的process屬性來覆蓋這個預設設定,從而允許把應用程式分離到不同的多個進程中。

如果這個屬性值是用“:”開頭的,那麼在需要這個提供器的時候,系統就會給這個應用程式建立一個新的私人進程,並且對應的Activity也要運行在那個私人進程中。如果用小寫字母開頭,那麼Activity則會運行在一個用這個屬性值命名的全域進程中,它提供了對內容提供器的存取權限。這樣就允許不同應用程式的組件能夠共用這個進程,從而減少對系統資源的使用。

android:readPermission

這個屬性用於設定查詢內容提供器的資料時,用戶端所必須要有的許可權。

android:syncable

這個屬性用於設定內容提供器控制下的資料是否要與伺服器上的資料進行同步,如果設定為true,則要同步,否則不需要同步。

android:writePermission

這個屬性用於設定修改內容提供器的資料時,用戶端所必須要有的許可權。

被引入的版本(INTRODUCED IN):

API Level 1

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.