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
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android开发14——监听内容提供者ContentProvider的数据变化

一、提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider;A应用修改了B应用的数据,插入了一条数据。有这样一个需求,此时C应用需要得到数据被修...

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

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

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

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

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

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

ContentProvider 监听数据变化

一.流程图 二.C应用的主要方法,基于上一篇文章 /** *允许外部应用插入数据 */ @Override publicUri in...

监听ContentProvider中数据的变化

A应用向C应用中添加一条数据,B应用监听C应用中的数据变化 A应用中代码如下: 1、主页面中添加一个按钮,用于向C应用中添加一条数据。代码如下: <Button android...

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

如果ContentProvider的访问者需要知道ContentProvider中的数据发生变化,可以在ContentProvider发生数据变化时调用getContentResolver().not...

ContentProvider监听数据变化

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

Android入门:监听ContentProvider数据改变

一、监听ContentProvider主要步骤 1.在ContentProvider类的insert\update\delete方法加入this.getContext().getConten...

一看就会系列Android之ContentProvider实现数据共享及注册监听

        当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可以通过ContentPrivade来实现,ContentPrivade以某种Uri的形式对外提供数据,从而允许其...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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