博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之ContentObserver内容观察者的使用
阅读量:5873 次
发布时间:2019-06-19

本文共 2639 字,大约阅读时间需要 8 分钟。

Android之ContentObserver内容观察者的使用

转载:原博客地址:http://blog.csdn.net/jason0539/article/details/22581297

ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于

数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。

(1)注册:

public final void  registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)。 功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。复制代码

(2)卸载: public final void unregisterContentObserver(ContentObserver observer)

功能:取消对给定Uri的观察复制代码

下面是一个监听收信箱的Demo

首先是一个监听类:

package jason.observer;import android.content.Context;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;public class SMSContentObserver extends ContentObserver {	Context context;	Handler handler;	public SMSContentObserver(Context c, Handler handler) {		super(handler);		// TODO Auto-generated constructor stub		this.context = c;		this.handler = handler;	}	@Override	public void onChange(boolean selfChange) {		// TODO Auto-generated method stub		super.onChange(selfChange);		Uri outMMS = Uri.parse("content://sms/inbox");		//desc 降序	 asc 升序		Cursor cursor = context.getContentResolver().query(outMMS, null, null, null, "date ASC");		if(cursor != null){			System.out.println("the number is " + cursor.getCount());			StringBuilder  builder = new StringBuilder();			while(cursor.moveToNext()){				builder.append("发件人信息:" + cursor.getString(cursor.getColumnIndex("address")));				builder.append("信息内容:"+cursor.getString(cursor.getColumnIndex("body"))+"\n");			}			cursor.close();			String builder2 = builder.toString();			handler.obtainMessage(1, builder2).sendToTarget();		}	}}复制代码

(2)注册监听类的activity

package jason.observer;import android.app.Activity;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.widget.TextView;public class ObserverActivity extends Activity {	SMSContentObserver contentObserver;	TextView tv_number;	TextView tv_content;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_observer);		tv_content = (TextView) findViewById(R.id.tv_content);		tv_number = (TextView) findViewById(R.id.tv_number);		contentObserver = new SMSContentObserver(this, handler);		Uri uri = Uri.parse("content://sms");		getContentResolver().registerContentObserver(uri, true, contentObserver);	}	Handler handler = new Handler() {		public void handleMessage(android.os.Message msg) {			switch (msg.what) {			case 1:				String sb = (String) msg.obj;				tv_content.setText(sb);				break;			default:				break;			}		};		};}复制代码

最后别忘记了加入 读取消息的权限

你可能感兴趣的文章
美国插画家Mike Bear作品欣赏
查看>>
zookeeper源码 — 一、单机启动
查看>>
fiddler之请求过滤(Filters)
查看>>
Could not read from remote repository
查看>>
关于“指针数组”和”数组指针“
查看>>
初学者一些常用的SQL语句(二)
查看>>
自我成长
查看>>
论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)
查看>>
ASP.Net Web 服务 – 如何使用会话状态
查看>>
Jetty的JNDI数据源
查看>>
angularjs modal模态框----创建可拖动的指令
查看>>
oracle 视图权限 oracle 创建视图权限不足( ORA-01031: 权限不足)
查看>>
Uva 11218 - KTV
查看>>
队列的链式存储结构
查看>>
Linux之特殊的环境变量IFS以及如何删除带有空格的目录
查看>>
Python文摘:Requests (Adavanced Usage)
查看>>
IDEA 运行maven命令时报错: -Dmaven.multiModuleProjectDirectory system propery is not set
查看>>
无插件,跨平台,基于WebGL的三维地球来了!!!
查看>>
通过反射初始化Class值【原】
查看>>
陶哲轩实分析引理10.4.1:反函数定理
查看>>