有时候应用中需要监听ContentProvider的改变并提供响应,这时候就要利用ContentObserver类了

不管是ContentProvider中实现的,insert,delete,update方法中的任何一个,程序都会调用getContext().getContentResolver().notifyChange(uri,null);

这行代码可用于通知所有注册在该Uri上的监听者,该ContentProvider所共享的数据发生了改变 

监 听ContentProvider数据改变的监听器需要继承ContentObserver类,并重写该基类所定义的onChange(boolean selfChange)方法,当它所监听的ContentProvider所共享的数据发生改变时,该onChange将会触发

为了监听指定的ContentProvider的数据变化,需要通过ContentResolver向指定Uri注册ContentObserver监听器.

用如下方法来注册监听器

registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer)

notifyForDescendents :如果该参数设为true,假如Uri为content://abc,那么Uri为content://abc/xyz, content://abc/xyz/foo的数据改变时也会触发该监听器,如果参数为false,那么只有 content://abc的数据改变时会触发该监听器

下面以监听系统的短信为例,下图为模拟发送一条短信

上面有一条短信内容为hello,下面启动监听程序在logcat中打印该短信的相关信息

下面为代码

    package WangLi.IO.MonitorSms;  import android.app.Activity;  import android.database.ContentObserver;  import android.database.Cursor;  import android.net.Uri;  import android.os.Bundle;  import android.os.Handler;  public class MonitorSms extends Activity {  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  //为content://sms的数据改变注册监听器  this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,   new SmsObserver(new Handler()));  }  //根据自定义的ContentObserver监听类  private final class SmsObserver extends ContentObserver  {  public SmsObserver(Handler handler) {  super(handler);  // TODO Auto-generated constructor stub
            }  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("address=").append(  cursor.getString(cursor.getColumnIndex("address")));  //获取短信标题  sb.append(";subject=").append(  cursor.getString(cursor.getColumnIndex("body")));  //获取短信发送时间  sb.append(";time=").append(  cursor.getLong(cursor.getColumnIndex("date")));  System.out.println("Has Sent SMS:::" + sb.toString());  }  }  }  }  

转载于:https://www.cnblogs.com/zhujiabin/p/4601737.html

Android,监控ContentProvider的数据改变相关推荐

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

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

  2. provider android简书,Android 使用ContentProvider在应用间共享数据

    Android 使用ContentProvider在应用间共享数据 题图 www.gratisography.com 在开发的过程中,有时会有需求要实现应用程序之间实现数据共享,在Android系统中 ...

  3. Android之ContentProvider数据存储

    一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...

  4. 009 Android之ContentProvider

    文章目录 Android文件权限简述 ContentProvider 内容提供者 ContentResolver URI 什么是URI URI示例 URI和URL ContentProvider实例 ...

  5. Android About ContentProvider

    Contents: ContentProvider Structural Analysis What is URI? Query Attribute,SQL UNION   ContentProvid ...

  6. Android中ContentProvider组件详解

    一.Android四大组件 Android四大组件是Activity, Service, Content Provider,Broadcast Receiver. Activity作为程序界面,直接与 ...

  7. Android之ContentProvider

    文章目录 简介 ContentResolver.ContentProvider和URI Uri简介 Uri处理 自定义ContentProvider 1. 新建类继承ContentProvider 2 ...

  8. android 监控联系人变化

    1.先说说原理,大家知道,android可以对数据库进行监控,但是个人感觉这个监控不给力,无论怎么实现监控,最后返回的结果是数据库是否改变,没有告诉我们数据库的那条数据进行了改变或者是删除,添加,并不 ...

  9. 基础复习——内容共享——通过ContentProvider封装数据——通过ContentResolver访问数据...

    利用ContentProvider只实现服务端App的数据封装,如果客户端App想访问对方的内部数据,就要通过内容解析器ContentResolver访问. 内容解析器是客户端App操作服务端数据的工 ...

最新文章

  1. 三十五、虚拟内存的基本概念
  2. 机器人x展架制作_门型展架80*180易拉宝x展架海报架广告架立牌展示架地推海报2元优惠券券后价20元...
  3. windows部署Apollo
  4. .net bitmap rgb数据_Python商务与经济统计学-数据描述
  5. 性能测试(一)性能测试是什么?有哪些分类?
  6. 验1-8 输出倒三角图案 (5 分)
  7. 强悍的 Linux —— 网络
  8. 职场 | 算法是怎样决定你的职业生涯的
  9. MyBatis(八)------MyBatis动态SQL
  10. 用友NCCloud 补丁下载/用友ncc 补丁下载/nccloud 补丁下载
  11. 斐讯k3cfe刷lede_斐讯 K3 A1 刷机经历
  12. java excel 水印_Java下载文件加文字水印(Excel、PDF、图片)
  13. #pragma once用法总结和链接错误
  14. spider_study 1
  15. 如何计算机闲置虚拟机算法_利用闲置计算机的最佳方法
  16. python中xml Excel解析编码小结
  17. 51单片机+LCD12864的万年历Proteus仿真
  18. 某验通杀js版,流程各个验证码那对应的js分析,你确定不进来看看(无感)?
  19. 20189220 余超《Linux内核原理与分析》第三周作业
  20. 未激活的Windows11的壁纸更改方法(亲测有用)

热门文章

  1. UVA 2474 - Balloons in a Box 爆搜
  2. linux内核分析——扒开系统调用的三层皮(上)
  3. RecyclerView滑动到底部自动加载
  4. 单机最大tcp连接数
  5. UML 面向对象分析与设计
  6. 小学计算机三年级课程目录,小学生信息技术课本目录.doc
  7. gcc/g++基本命令简介
  8. 使用Excel和TF实现Transformer!
  9. 备份ad_IT管理公开课——备份恢复解决方案
  10. mysql 数据修改时间_怎样修改mysql数据中的具体时间