ContentObserver 内容观察者作用及特点
来源:互联网 发布:网络机房日常维护项目 编辑:程序博客网 时间:2024/05/18 01:42
ContentObserver 目的是观察(捕捉)特定 Uri 引起的数据库的变化, 继而做一些相应的处理。它类似于数据库技术中的触发器(Trigger),当 ContentObserver 所观察的 Uri 发生变化时,便会 触 发 它 。 触 发 器 分 为 表 触 发 器 、 行 触 发 器 , 相 应 地 ContentObserver 也 分 为 “ 表“ContentObserver、“行”ContentObserver,当然这是与它所监听的 Uri MIME Type 有关的。
注册 ContentObserver 方法
public final void registerContentObserver(Uri uri, boolean notifyForDescendents,ContentObserver observer)
功能:为指定的 Uri 注册一个 ContentObserver 派生类实例,当给定的 Uri 发生改变时,回调该实例对象去处理。
参数: uri 表示需要观察的 Uri
notifyForDescendents为false表示精确匹配,即只匹配该Uri。为true表示可以同时匹配其派生的 Uri。
取消注册 ContentObserver 方法
public final void unregisterContentObserver(ContentObserver observer)
功能:取消对给定 Uri 的观察
参数: observer ContentObserver 的派生类实例
ContentObserver 类介绍
构造方法 ContentObserver(Handler h)
void onChange(boolean selfChange) 功能:当观察到的 Uri 发生变化时,回调该方法去处理。所有 ContentObserver 的派生类都需要重载该方法去处理逻辑。
观察特定 Uri 的步骤如下
1、创建我们特定的 ContentObserver 派生类,必须重载父类构造方法,必须重载 onChange()方法去处理回调后的功能实现
2 、 利 用 context.getContentResolover() 获 ContentResolover 对 象 , 接 着 调 用registerContentObserver()方法去注册内容观察者
3、 在不需要时,需要手动的调用 unregisterContentObserver()去取消注册。
例子:监听短信内容变化
public class Day0108_contentobserverActivity extends Activity{ private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 100: String body = (String) msg.obj; TextView tv = (TextView) findViewById(R.id.tv); tv.setText(body); break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ContentResolver cr = getContentResolver(); ContentObserver smsObserver = new SmsContentObserver(this, handler); //第二个参数,true 表示观察所有有关短信的 cr.registerContentObserver(Uri.parse("content://sms"), true, smsObserver); //content://sms/inbox //收件箱 //content://sms/sent //已发送 //content://sms/draft //草稿箱 //content://sms/outbox //发件箱 //content://sms/failed //失败短信 //content://sms/queued //代发队列 }}//SmsContentObserver 代码如下:public class SmsContentObserver extends ContentObserver { private Handler handler; private Context context; public SmsContentObserver(Context context, Handler handler) { super(handler); this.handler = handler; this.context = context; } @Override public void onChange(boolean selfChange) { ContentResolver cr = context.getContentResolver(); Cursor c = cr.query(Uri.parse("content://sms/inbox"), null, "0", null, "date desc"); StringBuilder sb = new StringBuilder(); while (c.moveToNext()) { //发件人手机号码 String sendNumber = c.getString(c.getColumnIndex("address")); //信息内容 String body = c.getString(c.getColumnIndex("body")); //readType 表示是否已经读 int hasRead = c.getInt(c.getColumnIndex("read")); if (hasRead == 0) {//表示短信未读 System.out.println("短信未读" + sendNumber); } sb.append(sendNumber + ":" + body + "\n"); } handler.obtainMessage(100, sb.toString()).sendToTarget(); }}
- ContentObserver 内容观察者作用及特点
- Android内容观察者--ContentObserver
- ContentObserver内容观察者
- ContentObserver 内容观察者
- Android -- ContentObserver 内容观察者
- ContentObserver(内容观察者)
- Android 中的内容观察者ContentObserver
- ContentObserver——内容观察者
- android下内容观察者: ContentObserver
- Android 中的内容观察者ContentObserver
- 内容观察者(ContentObserver)的使用~
- ContentObserver——内容观察者
- ContentObserver内容监听者(内容观察者)
- ContentObserver内容监听者(内容观察者)
- Android中内容观察者的使用---- ContentObserver
- android中ContentObserver——内容观察者
- android之ContentObserver内容观察者的使用
- Android自学笔记-13-ContentObserver内容观察者
- Bzoj-1303 中位数
- MyBank的全部代码升级版
- iOS开发:使用GCD
- 如何在MarkDown中使用尖括号<>
- 51nod 0-1背包详解dp(加一维优化)
- ContentObserver 内容观察者作用及特点
- android知识回顾------如何搭建一个app
- [Python]网络爬虫(四):Opener与Handler的介绍和实例应用
- BZOJ2300: [HAOI2011]防线修建
- Linux fstab 格式异常导致 mount 时报错:no final newline at the end of /etc/fstab
- HTML5-离线存储,Web Worker
- 第十周项目一 二叉树算法库
- BAT、360、网易等大公司开源项目
- query