android之ContentObserver内容观察者的使用

ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于   数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。(1)注册:    public final void  registerContentObserver(Uri uri, boolean noti

大家好,又见面了,我是全栈君。

在跟着一个教程做手机卫士的时候,里面用到了ContentObserver,以前没接触过,根据网上的资料整理了一下,还算明白。

     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)注册监听类的acitivity

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;
			}
		};	
	};

}

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

   <uses-permission android:name=”android.permission.READ_SMS”/>

 

 

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121358.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java学习之struts2使用

    Java学习之struts2使用0x00前言持续记录学习内容0x01struts2使用导入ja包<dependencies><dependency><

    2021年12月13日
    47
  • navicat premium mac 激活码【最新永久激活】

    (navicat premium mac 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    146
  • c语言进销存系统设计代码,web版进销存系统 – WEB源码|源代码 – 源码中国[通俗易懂]

    c语言进销存系统设计代码,web版进销存系统 – WEB源码|源代码 – 源码中国[通俗易懂]压缩包:webjxc.rar列表mrEMS\DB_51aspx\db_CMS_Data.MDFmrEMS\DB_51aspx\db_CMS_Log.LDFmrEMS\EMS\001.icomrEMS\EMS\BaseClass\BaseInfo.csmrEMS\EMS\BaseClass\BaseInfo.cs.bakmrEMS\EMS\BaseClass\DataBase.csmrEMS\…

    2022年5月31日
    34
  • Modbus 通讯协议 (RTU传输模式)「建议收藏」

    Modbus 通讯协议 (RTU传输模式)「建议收藏」第一章Modbus协议简介Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,

    2022年7月12日
    84
  • NFV介绍_NFV技术

    NFV介绍_NFV技术转发自:https://zhuanlan.zhihu.com/p/26259440NFV全称是NetworkFunctionVirtualization。这又是一个与网络相关的故事。先来看看NFV的前世今生吧。在NFV之前,NF(NetworkFunction)是一直存在的,网络中,NF可以看成一个个独立的网元,实现着各自的功能。NF以固定的方式连接起来,统一提供的网络功能和服务。随便在网…

    2025年10月16日
    4
  • Java分布式应用:Java分布式通讯方式

    Java分布式应用:Java分布式通讯方式第一部分Java分布式通讯的方式1.基于消息方式实现系统间通讯a.数据传输部分:TCP/IP、UDP/IPTCP(端口号为23)与UDP(端口号为53)的区别1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证…

    2022年5月1日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号