Android 监听ContentProvider中数据的变化

原创 2011年01月19日 11:31:00

如果 ContentProvider 的访问者需要知道 ContentProvider 中的数据发生了变化,可以在 ContentProvider 发生数据 变化时调用 getContentResolver().notifyChange(uri, null) 来通知注册在此 URI 上的访问者,例子如下:
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "personid", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
如果 ContentProvider 的访问者需要得到数据变化通知,必须使用 ContentObserver 对数据(数据采用 uri 描述)进 行监听,当监听到数据变化通知时,系统就会调用 ContentObserver onChange() 方法:
getContentResolver().registerContentObserver
(Uri.parse("content://cn.itcast.providers.personprovider/person"),
        true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
  }
public void onChange(boolean selfChange) {
    // 此处可以进行相应的业务处理
}
}


用户使用系统自带的短信程序发送短信,程序会把短信通过 ContentProvider 保存进数据库,并且发出一个数据变 化通知,只要使用 ContentObserver 对数据变化进行监听,在用户发送短信时,就会被 ContentObserver 窃听 到:
注册监听:
getContentResolver().registerContentObserver( Uri.parse("content://sms") ,  true, new SmsObserver(new Handler()));
监听类:
private final class SmsObserver extends ContentObserver{
public SmsObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) { // 查询发送箱中的短信 ( 处于正在发送状态的短信放在发送箱 )
Cursor cursor = getContentResolver().query( Uri.parse("content://sms/outbox") ,null, null, null, null);
while(cursor.moveToNext()){
StringBuilder sb = new StringBuilder();
sb.append("_id=").append(cursor.getInt(cursor.getColumnIndex("_id")));
sb.append(",address=").append(cursor.getString(cursor.getColumnIndex("address")));
sb.append(";body=").append(cursor.getString(cursor.getColumnIndex("body")));
sb.append(";time=").append(cursor.getLong(cursor.getColumnIndex("date")));
Log.i("ReceiveSendSMS", sb.toString());
             } }   
l
l

监测database的改变--notifyChange

我们在ContentProvider的insert,update,delete等改变之后调用getContext().getContentResolver().notifyChange(uri, nu...

Android学习笔记---监听ContentProvider(内容共享者)中数据的变化

2013-03-16 监听ContentProvider中数据的变化 ------------------------------------------ 1.如果ContentProvider...

Android之使用Contentprovider对外共享数据和实现数据监听变化

总结:          当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数...

使用android中ContentProvider组件对外共享以及监听ContentProvider中数据的变化

1.Contentprovider(组件)内容提供者:     对外共享数据使用,可以把任意类型的数据进行对外共享;如:xml、数据库、txt等;好处是统一了数据对外的访问方式     Conte...
  • lht0211
  • lht0211
  • 2013年04月18日 21:05
  • 714

Android 使用ContentProvider对外共享数据与监听ContentProvider数据的变化

package cn.itcast.db; import cn.itcast.service.DBOpenHelper; import android.content.ContentProvider...

ContentProvider 监听数据变化

一.流程图 二.C应用的主要方法,基于上一篇文章 /** *允许外部应用插入数据 */ @Override publicUri in...
  • zpf336
  • zpf336
  • 2013年07月15日 16:54
  • 438

监听ContentProvider中数据的变化

A应用向C应用中添加一条数据,B应用监听C应用中的数据变化 A应用中代码如下: 1、主页面中添加一个按钮,用于向C应用中添加一条数据。代码如下: ...
  • etmessi
  • etmessi
  • 2013年09月02日 17:07
  • 468

4.3使用ContentObserver监听ContentProvider中的数据变化

如果ContentProvider的访问者需要知道ContentProvider中的数据发生变化,可以在ContentProvider发生数据变化时调用getContentResolver().not...
  • azhansy
  • azhansy
  • 2015年08月19日 11:25
  • 527

ContentProvider监听数据变化

当程序A在执行insert、update、delete时,通过getContext().getContentResolver().notifyChange(uri, null)方法来告诉所有注册在该U...

Android入门:监听ContentProvider数据改变

一、监听ContentProvider主要步骤 1.在ContentProvider类的insert\update\delete方法加入this.getContext().getConten...
  • xiazdong
  • xiazdong
  • 2012年07月01日 19:45
  • 13658
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: Android 监听ContentProvider中数据的变化
举报原因:
原因补充:

(最多只允许输入30个字)