前面介紹的是當contentprovider將資料共享出來之後,contentresolver會根據業務需要去主動查詢contentprovider所共享的資料;但有時候程式需要實時監聽contentprovider所共享的資料,並提供相應的響應,這就需要利用contentobserver了。
其實在contentprovider中,不管實現的哪個方法,只要該方法導致資料發生了變化。程式就呼叫了如下**:
getcontext().getcontentresolver().notifychange(uri, null);
用於通知所有註冊在該uri上的監聽者:該contentprovider所共享的資料發生了改變。
監聽contentprovider資料改變的***需要繼承contentobserver類,並重寫onchange方法,當contentprovider資料發生改變時,該方法會被觸發。
為了監聽指定contentprovider的資料變化,需要通過contentresolver向指定的uri註冊***。contentresolver提供了如下方法來組成***:
該方法中三個引數說明如下:
下面用監聽使用者傳送簡訊的例項來演示,通過activity啟動乙個service服務,去監聽contentprovider資料的變化。**如下:
activity:
package com.lovo.testcontentobserver;
import android.content.intent;
import android.os.bundle;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
public class mainactivity extends activity implements onclicklistener
@override
public void onclick(view v)
if (v == stopbtn)
}}
布局xml只有2個按鈕就省略不寫了。
service:
package com.lovo.service;
import android.content.intent;
import android.database.contentobserver;
import android.database.cursor;
import android.net.uri;
import android.os.handler;
import android.os.ibinder;
import android.util.log;
public class myservice extends service
@override
public void oncreate()
// 提供自定義的contentprovider***類
private final class smsobserver extends contentobserver
@override
public void onchange(boolean selfchange)
} }}
加上許可權:
如何建立自己的contentprovider
如何建立自己的contentprovider 作為androidl四大元件 compenent activity,service,breadcasereceiver,contentprovider 之一的content provider,為其它應用程式 也可以是提供該 content provide...
安卓四大元件之ContentProvider
contentprovider是內容提供者 為什麼要有內容提供者?因為在安卓中每乙個應用的資料庫檔案都是私有的,自能在自己的應用中自己使用,別的應用要是想訪問,那麼就需要修改檔案的許可權,這樣資料就變的不安全了,所以就引入了內容提供者。首先來說一下內容提供者中的乙個重要的類uri,熟悉uri會使我們...
8 四大元件之三 ContentProvider
課程目標 理解contentprovider的作用及好處 認清contentprovider與資料儲存的關係 掌握contentprovider對外提供的資料模型形式 能夠編寫contentresolver的增刪改查 能夠自定義乙個contentprovider 能夠提供程序間訪問 了解conten...