監聽ContentProvider資料的改變

2021-08-27 13:10:04 字數 1815 閱讀 6217

前面介紹的是當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...