Android中內容提供者ContentProvider的理解與基本使用

內容提供者簡介

 內容提供者ContentProvider是Android系統四大組件之一,用於保存和檢索數據,是Android系統不同應用程序之間共享數據的接口。在Android系統中,應用程序之間是相互獨立的,分別運行在自己的進程中,相互之間沒有交換數據。如果應用程序之間需要共享數據,就需要用到ContentProvider了。

 ContentProvider是不同應用程序之間進行數據交換的標準API,它以URI形式對外提供數據,允許其它應用操作本應用的數據。其它應用程序則使用ContentResolver,並根據ContentProvider提共的URI操作指定的數據。

創建內容提供者

創建一個內容提供者

第一步:寫一個類繼承ContentProvider這個抽象類,重寫它的方法,例如:UserProvider.java

    onCreate()創建ContentProvider時調用

query():根據傳入的URI,查詢指定條件下的數據

delete():刪除

update():修改

insert():插入

第二步:在Android清單文件中註冊這個內容提供者

<provider

android:name=”cn.itcast.user.provider.UserProvider”

android:authorities=”cn.itcast.user.provider.itcastdb”

android:exported="true"

/>

name表示內容提供者的全路徑名

authorities表示其它應用程序訪問本應用的內容提供者的URI,注意這個URI在整個Android

系統中要唯一,初學者在這裏可以將URI理解爲口令。

exported=true表示自願暴露給第三方使用


URI簡介

ContentProvider這個抽象類中的方法,多數方法需要其它應用程序訪問者傳入一個URI參數。URI是由三部份組件,分別是:schema、authorities、path,其中schema和authorities必寫,schema固定爲content://

Uri.parse(String)方法是將一個字符串轉成URI對象,爲了解析URI,Android提供了一個UriMatcher這個輔助類來匹配URI,常用方法如下:

1——UriMatcher(int code):創建UriMatcher時調用,參數表示如果訪問者的路徑錯誤,返回的code值

2——addURI(String authority,String path,int code):添加一組匹配規則,如果訪問者的路徑正確,返回code

3——int match(Uri):匹配URI與addURI中的路徑是否相同,成功則返回addURI中的code值


訪問內容提供者

ContentResolver的基本用法

我們手機中的很多Android應用,都對外提供了ContentProvider接口,例如:短信,只要我們知道系統短信應用的URI,就可以使用ContentResolver對象來訪問系統短信應用了。

查詢系統所有短信的URI爲:content://sms

address:手機號

date:發送或接收短信的時間

body:發送或接收的內容

type:發送或接收的代碼,接收爲1號,發送是2號

如果要訪問系統短信應用的話,需要在Android清單文件中配置如下權限:

<uses-permission android:name="android.permission.READ_SMS"/>

<uses-permission android:name="android.permission.WRITE_SMS"/>

內容觀察者的使用

什麼是內容觀察者

當使用ContentProvider將數據共享出來之後,再使用ContentResolver查詢ContentProvider共享出來的數據,是一種很常見的操作。如果應用程序需要實時監聽ContentProvider共享的數據是否發生了變化,可以使用Android系統提供的內容觀察者ContentObserver來實現。

內容觀察者ContentObserver是用來觀察指定URI所代表的數據。當ContentObserver觀察到指定URI的數據發生變化時,就會觸發ContentObserver的onChange()方法,此時在onChange()方法中使用ContentResolver可以查詢到變化的最新數據。

ContentObserver內容觀察者常用的方法如下: 

1——ContentObserver(Handler handler):構造方法,參數可以是主線程Handler(可更新UI)或任何Handler

2——onChange():當觀察到的URI代表的數據發生變化時,會觸發該方法

創建內容觀察者:

1——創建一個普通類繼承ContenObserver

2——重寫onChange()方法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章