如果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());
} }
转: http://blog.csdn.net/hosterzhu/article/details/6151965
如果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());
} }
分享到:
相关推荐
本篇文章小编为大家介绍,基于Android 监听ContentProvider 中数据变化的相关介绍。需要的朋友参考下
通过ContentProvider(内容提供者)将app中数据库对外开放(当然也可以对app本身开发);然后对数据库的增删改查就通过...然后用ContentObserver(内容观察者)来监听数据是否有变化。当有变化则就调用onChange方法了!
contentProvider监听的例子
ContentProvider远程数据操作-带监听(2.0).zip ContentProvider远程数据操作-带监听(2.0).zip ContentProvider远程数据操作-带监听(2.0).zip ContentProvider远程数据操作-带监听(2.0).zip
ContentObserver监听ContentProvider中数据的变化
android的内容提供者contentprovider的应用, 采用ContentProvider对外共享数据和监听ContentProvider中数据的变化
两个apk之间通过Broadcast,BroadcastReceiver广播互相通信及ContentProvider监听数据库增删改查的变换
利用ContentProvider对其他应用进行共享数据,以及监听内容提供者中数据的变化。
博客《ContentProvider数据库共享之——读写权限与数据监听》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/44651967
其中一个工程完成了自定义ContentProvider,另外一个工程用于测试该自定义ContentProvider且在该工程中使用了ContentObserver监听自定义ContentProvider的数据变化 以下代码为工程TestContentProvider ...
ListView实现数据列表显示,20_采用ContentProvider对外共享数据,21_监听ContentProvider中数据的变化,22_访问通 信录中的联系人和添加联系人,23_网络通信之网络图片查看器,24_网络通信之网页源码查看器,25_...
主要介绍了Android系统中的ContentProvider组件用法,举例讲解了ContentProvider传递数据及监听ContentProvider数据改变的方法,十分详细,需要的朋友可以参考下
ListView实现数据列表显示,20_采用ContentProvider对外共享数据,21_监听ContentProvider中数据的变化,22_访问通 信录中的联系人和添加联系人,23_网络通信之网络图片查看器,24_网络通信之网页源码查看器,25_...
压缩文件内有三个项目,其中sqlite为PersonProvider类,Other项目为测试类,Aapp则是测试向contentprovider中添加数据,Other进行监听操作。
内容概要: ...能学到什么:ContentProvider、ContentResolver、CursorAdapter、Cursor、后台服务、前台服务、绑定服务、自定义广播、播放进度条、OnClickListener监听器 适用人群:Android开发初学者
先运行contentproviderdemo,然后在运行contentobserver工程,在contentobserver中可以对共享数据库中的数据增删改查,还可以监听数据库变化,实时改变布局变化
当ContentProvider将数据共享出来之后,ContentResolver会根据...在有些时候,应用程序需要实时监听ContentProvider所共享数据的改变,并随着ContentProvider的数据的改变而提供响应,这就需要利用contentObserver。