android使用一種稱爲contentprovider的概念來將數據抽象爲服務。html
這種內容提供給程序的理念看起來像是啓用了REST的數據提供程序。REST(REpresentational State Transfer具象狀態傳輸),它是一種設計風格,一般基於使用HTTP,URI和XML以及HTML這些現有的普遍流行的協議和標準。資源由URI指定,對資源的操做包括獲取,建立,修改和刪除資源;這些操做正好對應HTTP協議提供的GET,POST和DELETE方法。java
要從ContentProvider檢索數據或將數據保存到Contentprovider,須要使用一組相似REST的URI。android
例如,若是要從封裝 圖書數據庫 的contentprovider獲取一組圖書,須要使用相似如下形式的URI:web
content://com.android.book.BookProvider/bookssql
要從 圖書數據庫 得到指定圖書(如23號圖書),須要使用相似如下形似的URI:數據庫
content://com.android.book.BookProvider/books/23網絡
設備上的任何應用程序均可以利用這些URI來訪問或操做數據。因此,在應用程序之間的數據共享上,ContentProvider扮演着重要角色。ide
只有在但願與外部或在應用程序之間 共享數據時,才須要使用contentprovider.網站
對於內部數據訪問,應用程序可使用它認爲適合的任何數據存儲/訪問機制,例如:google
首選項,一組鍵/值對,能夠用來存儲應用程序首選項。
文件,應用程序內部的文件,能夠存儲在可移動存儲媒體上。
SQLite,SQLite數據庫,每一個SQL數據庫對於建立它的包是私有的。
網絡,一種機制,支持經過互聯網獲取或存儲外部的數據。
Android中內置的contentprovider,記錄在android.provider Java包中。可在官網查看這些contentprovider的列表,連接爲http://developer.android.com/reference/android/provider/package-summary.html。這些sqlite數據庫一般具備擴展名.db,僅能從實現包訪問。任何來自該包外部的訪問都須要經過contentprovider接口。
整體而言, contentprovider方法相似於如下業內抽象機制:(網站,REST,web服務, 存儲過程??)
與網站同樣,設備上每一個contentprovider都會使用字符串註冊自身,這個字符串相似於 域名,但稱爲受權(authority)。
受權就像contentprovider的域名。在進行受權註冊以後,這些contentprovider就擁有一個基礎域名,這個基礎域名是一個起始URL。
在androidManifest.xml中註冊受權:
<provider android:name="SomeProvider" android:authorities="com.your-company.SomeProvider"/>
得到了由受權開頭的URL:
content://com.your-company.SomeProvider/
注意:android提供的contentprovider可能沒有徹底限定的受權名,只有在使用第三方contentprovider時才建議使用徹底限定的受權名(如:comgoogle.android.comtacts)。
contentprovider還提供了一種相似REST的URL來獲取或操做數據。對於前面的註冊,標識NotePadProvider數據庫中的筆記目錄或集合的URI爲:
content://com.google.provider.Notepad/Notes
標識具體筆記的URI爲:
content://com.google.provider.notepd/Notes/#
一些非第三方提供程序,由android控制的,非徹底限定的結構:
content://media/internal/imaes content://media/external/images content://contacts/people content://contacts/people/23
ContenProvider具備web服務的特徵。ContenProvider經過其URI將內部數據公開爲服務。可是,contentprovider的URL的輸出不是具備特定類型的數據,這與基於SOAP的web服務同樣。此輸出更像來自JDBC語句的結果集。儘管contentprovider在概念上與JDBC類似,但此輸出與ResultSet不徹底相同。
調用方但願知道返回的行和列的結構。contentprovider提供了一種內置機制,來肯定此URI所表示的數據的MIME