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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Raid0、Raid1、Raid0+1、Raid5

    Raid0、Raid1、Raid0+1、Raid5Raid0:最少需要两块盘,没用冗余数据,不做备份,任何一块磁盘损坏都无法运行。n块磁盘(同类型)的阵列理论上读写速度是单块磁盘的n倍(实际达不到),风险性也是单一n倍(实际更高),是磁盘阵列中存储性能最好的。适用于安全性不高,要求比较高性能的图形工作站或者个人站。Raid1:至少需要两块盘,磁盘数量是2的n倍,每一块磁盘要有对应的备份盘,利用率是50%,只要有一对磁盘没有损坏就可以正常使用…

    2022年7月15日
    17
  • threadlocal底层实现_什么是底层

    threadlocal底层实现_什么是底层ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri

    2022年8月9日
    6
  • java中数组输出_java数组输出方法

    java中数组输出_java数组输出方法1.数组的输出的三种方式一维数组:定义一个数组int[]array={1,2,3,4,5};(1)传统的for循环方式1for(inti=0;i(2)foreach循环1for(inta:array)2System.out.println(a);(3)利用Array类中的toString方法调用Array.toString(a),返回一个包含数组元素的字符串,这些元素被放置在…

    2022年10月11日
    3
  • 四大主流CA机构_CA机构的作用

    四大主流CA机构_CA机构的作用四大主流CA机构–wosign是唯一支持免费证书的找到免费SSL证书了,刚刚看到他们网站有快捷申请免费SSL证书,很方便,10分钟颁发,试了一下,申请了2个域名,一个颁发很快,另一个稍微有点慢,问他们客服,客户说另外一个域名,涉及到敏感信息,需要两签,所以审核会慢一下,好吧,只要证书好用,等一会也无所谓啦!另外,我是看到微博上面的这个四大主流CA机构证书对比表,才去的申请的哦!…

    2025年6月17日
    2
  • C语言中的移位运算

    C语言中的移位运算移位运算移位运算包括左移和右移左移运算:x&amp;lt;&amp;lt;k:x左移k位,并在右端补零。右移运算:逻辑右移:x&amp;gt;&amp;gt;k:x右移k位,并在左端补零。算术右移:x&amp;gt;&amp;gt;k:x右移k位,并在左端补最高有效位的值。下表为对一个8位参数x的两个不同的值做不同的一位操作得到的结果:操作值参数x[01100011][10010101]x&amp;l

    2022年7月13日
    18
  • maven 本地仓库配置_Maven配置

    maven 本地仓库配置_Maven配置Maven本地仓库安装及配置1.进入maven官网下载2.配置环境变量3.测试是否配置成功windows+r打开dos命令出现这样的内容就是配置成功4.配置本地仓库右键记事本打开,或者编辑工具打开我这里用的是Notepad++打开的复制刚才创建的本地仓库路径切记把复制的路径、\改成/配置阿里镜像<mirror><id>alimaven</id> <name>aliyummave

    2025年11月24日
    3

发表回复

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

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