`
v5browser
  • 浏览: 1136143 次
社区版块
存档分类
最新评论

Android 监听ContentProvider中数据的变化

 
阅读更多
如果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描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserveronChange()方法:
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 中数据变化的相关介绍

    本篇文章小编为大家介绍,基于Android 监听ContentProvider 中数据变化的相关介绍。需要的朋友参考下

    android的内容提供者

    android的内容提供者contentprovider的应用, 采用ContentProvider对外共享数据和监听ContentProvider中数据的变化

    Android 中自定义ContentProvider与ContentObserver的使用简单实例

    其中一个工程完成了自定义ContentProvider,另外一个工程用于测试该自定义ContentProvider且在该工程中使用了ContentObserver监听自定义ContentProvider的数据变化 以下代码为工程TestContentProvider ...

    8天快速掌握Android系列视频之04_开发与 运行(卸载)第一个ANDROID应用

    ListView实现数据列表显示,20_采用ContentProvider对外共享数据,21_监听ContentProvider中数据的变化,22_访问通 信录中的联系人和添加联系人,23_网络通信之网络图片查看器,24_网络通信之网页源码查看器,25_...

    8天快速掌握Android系列视频之07_查看应用输出的错误信息 与如何部署应用到真实手机

    ListView实现数据列表显示,20_采用ContentProvider对外共享数据,21_监听ContentProvider中数据的变化,22_访问通 信录中的联系人和添加联系人,23_网络通信之网络图片查看器,24_网络通信之网页源码查看器,25_...

    8天快速掌握Android教程源码

    21_监听ContentProvider中数据的变化.avi 所在项目:db & other & Aapp 22_访问通信录中的联系人和添加联系人.avi 所在项目:contacts 23_网络通信之网络图片查看器.avi 所在项目:netimage & Web端应用:web 24_...

    精通ANDROID 3(中文版)1/2

    7.4.7 使用菜单响应数据变化  7.5 通过XML文件加载菜单  7.5.1 XML菜单资源文件的结构  7.5.2 填充XML菜单资源文件  7.5.3 响应基于XML的菜单项  7.5.4 其他XML菜单标记简介  7.6 资源  7.7 小结  ...

    传智播客的android开发源代码

    21_监听ContentProvider中数据的变化.avi 所在项目:db & other & Aapp 22_访问通信录中的联系人和添加联系人.avi 所在项目:contacts 23_网络通信之网络图片查看器.avi 所在项目:netimage & Web端应用:web 24_...

    黎活明android教程的全程PPT

    2> 采用ContentProvider对外共享数据 第四天 1> 往通信录添加联系人,和获取联系人 2> 网络--获取数据(图片、网页、xml、Json等) 3> 如何把数据通过HTTP协议提交到网络上的Web应用(get / post ) 数据大于2k的...

    传智播客Android视频教程-课程源码.rar

    2> 采用ContentProvider对外共享数据 第四天 1> 往通信录添加联系人,和获取联系人 2> 网络--获取数据(图片、网页、xml、Json等) 3> 如何把数据通过HTTP协议提交到网络上的Web应用(get / post ) 数据大于2k的...

    精通Android 3 (中文版)2/2

    7.4.7 使用菜单响应数据变化  7.5 通过XML文件加载菜单  7.5.1 XML菜单资源文件的结构  7.5.2 填充XML菜单资源文件  7.5.3 响应基于XML的菜单项  7.5.4 其他XML菜单标记简介  7.6 资源  7.7 小结  ...

    source.zip

    21_监听ContentProvider中数据的变化.avi 所在项目:db & other & Aapp 22_访问通信录中的联系人和添加联系人.avi 所在项目:contacts 23_网络通信之网络图片查看器.avi 所在项目:netimage & Web端应用:web 24_...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--监听之EditText内容变化监听 |--监听之GridView条目点击监听 |--监听之ListView条目点击事件监听 |--监听之ListView滑动监听 |--监听之单击监听的两种定义 |--监听之双击监听 |--监听之电话状态监听 |--监听之...

    支持SQL数据库中提取数据

    简单说,这是一个工具库,期望更优雅的从 SQL 数据库中提取数据,但它的关注点不在于 ORM,也不是 SQL Builder,而是如何在数据变化时更简便的获取到通知。当你不想给用ContentProvider,只想简单监听SQLite表增删改...

Global site tag (gtag.js) - Google Analytics