首先,ContentProvider(内容提供者)是android中的四大元件之一,但是在一般的開發中,可能使用的比較少。
ContentProvider為不同的軟體之間資料共享,提供統一的接口。也就是說,如果我們想讓其他的應用使用我們自己程式内的資料,就可以使用ContentProvider定義一個對外開放的接口,進而使得其他的應用可以使用咱們應用的檔案、資料庫記憶體儲的資訊。當然,自己開發的應用需要給其他應用共享資訊的需求可能比較少見,但是在Android系統中,很多系統自帶應用,比如聯系人資訊,圖檔庫,音頻庫等應用,為了對其他應用暴露資料,是以就使用了ContentProvider機制。是以,我們還是要學習ContentProvider的基本使用,在遇到擷取聯系人資訊,圖檔庫,音頻庫等需求的時候,才能更好的實作功能
Android系統為了讓我們更好的對外暴露資料,提供了統一的接口,是以定義了抽象類ContentProvider,是以,如果我們想對外提供資料,我們需要繼承ContentProvider,并且實作下面的這幾個方法:
onCreate()
當我們的provider初始化時被調用,我們應該在這個方法裡面完成部分初始化操作
query() 查詢方法,用于給調用者傳回資料
insert() 插入操作,用于讓外部應用插入資料到内容提供者中
update() 更新操作,用于更新内容提供者的資料
delete() 用于删除資料
getType 傳回内容提供者的MIME Type
上面這些方法,當我們繼承自ContentProvider的時候,eclipse會自動的給我們添加,但是這并不代表我們每個方法都需要自定義實作。如果我們隻希望給其他應用提供資料,而不允許其他應用修改我們的資料,那麼我們隻需要實作onCreate(),getType()和query()這三個方法就可以了,其他的三個方法我們可以根據業務需求,實作或者是不實作。
因為一般使用ContentProvider向外部暴露資料庫的資訊,是以,本篇将以使用ContentProvider向其他應用暴露資料庫資訊為例,講解ContentProvider的基本使用。
Android中SQLite資料庫的建立和使用,本篇不再介紹,不清楚的請看這篇文章
假設讀者已經學會了SQLite資料庫的使用,并且已經建立好了資料庫,下面我們開始寫我們的ContentProvider。
因為注釋解析的比較詳細,是以就不過多解釋了
我們在定義好我們的ContentProvider之後,因為ContentProvider資料四大元件之一,是以我們還需要在AndroidManifest清單檔案中進行注冊才能使用,下面是注冊資訊
注意,provider的聲明和activity一樣,都是在application節點進行聲明的。
至此,我們就完成了我們自己的ContentProvider的生命,其他的應用現在就可以使用我們往外部暴露的資料資訊了。
我們已經定義好了我們自己的ContentProvider,那麼外部應用如何調用呢?
下面,我将建立一個測試單元工程,完成對ContentProvider的各個方法的測試
添加方法測試
删除方法測試
修改方法測試
上面的方法都經過了單元測試。
好了,至此,我們就使用ContentProvider實作了在第三方應用中對我們應用的資料庫進行增删改查等操作,如有疑問,請留言。