Android ContentObserver
2015-06-26 09:48
162 查看
1. ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理.
1)注册ContentObserver方法
功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。
uri表示需要观察的Uri
notifyForDescendents 为false 表示精确匹配,即只匹配该Uri。为true 表示可以同时匹配其派生的Uri。
2)取消注册ContentObserver方法
功能:取消对给定Uri的观察
参数: observer ContentObserver的派生类实例
2.ContentObserver类介绍
构造方法 ContentObserver(Handler h)
void onChange(boolean selfChange) 功能:当观察到的Uri发生变化时,回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑。
3.观察特定Uri的步骤如下:
1、创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现
2、利用context.getContentResolover()获ContentResolover对象,接着调用registerContentObserver()方法去注册内容观察者
3、在不需要时,需要手动的调用 unregisterContentObserver()去取消注册。
例子:监听短信内容变化
在Activity中:
1)注册ContentObserver方法
public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)
功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。
uri表示需要观察的Uri
notifyForDescendents 为false 表示精确匹配,即只匹配该Uri。为true 表示可以同时匹配其派生的Uri。
2)取消注册ContentObserver方法
public final void unregisterContentObserver(ContentObserver observer)
功能:取消对给定Uri的观察
参数: observer ContentObserver的派生类实例
2.ContentObserver类介绍
构造方法 ContentObserver(Handler h)
void onChange(boolean selfChange) 功能:当观察到的Uri发生变化时,回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑。
3.观察特定Uri的步骤如下:
1、创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现
2、利用context.getContentResolover()获ContentResolover对象,接着调用registerContentObserver()方法去注册内容观察者
3、在不需要时,需要手动的调用 unregisterContentObserver()去取消注册。
例子:监听短信内容变化
在Activity中:
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(); } }
相关文章推荐
- [Android基础知识] 之 十九: Android基础类之BaseAdapter
- Android经常使用开源组件汇总
- 灰阶设置demoactivity
- Android实现直接播放麦克风采集到的声音
- Android Studio 编译布局文件错误之:Rendering Problems The following classes could not be instantiated
- 微软正式发布 Android 版 Office 办公软件
- 微软正式发布 Android 版 Office 办公软件
- Android Ant打包及其环境变量配置
- Android--------------几个ADB常用命令
- Android 创建单例模式的几种方法
- 如何在Android中实现全屏,去掉标题栏效果
- android:duplicateParentState属性解释
- 老罗前辈的总结:那两年炼就的Android内功修养
- 菜鸟学Android笔记(四十三):JSP零散知识
- Genymotion – 强大好用高性能的 Android 模拟器
- Android应用程序元素
- Android布局优化
- Android的点击事件的深入理解
- 打破Android应用65K方法数魔咒(65536)
- android:inputType参数类型说明