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(转载请说明出处)

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Qt高级——QMake快速入门

    Qt高级——QMake快速入门一、QMake简介qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。qmake是一个用来简化在不同平台间开发工程的构建过程的工具。qmake会自动生成MakeFile文件,可以用于任何软件项目中,无论是否由Qt编写。qmake会注意所有的编译器和平台的依赖性,开发者只需关注自己的代码。qmake作为Qt库和Qt所提供的工具的主要连编工具,可以自动的包含moc和uic的连编规则。二、QMake入门教程1、创建一个工程创建一个应用,包含hell

  • Apache POI使用详解[通俗易懂]

    Apache POI使用详解[通俗易懂]一:简介开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache的poi,另一个是JavaExcelApachePOI简介是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供API给Java程式对MicrosoftOffice(Excel、WORD、PowerPoint、Visio等

  • C语言必背18个经典程序,2022年C语言必背100代码大全

    C语言必背18个经典程序,2022年C语言必背100代码大全对于c语言来说,要记得东西其实不多,基本就是几个常用语句加一些关键字而已。你所看到的那些几千甚至上万行的代码,都是用这些语句和关键词来重复编写的。只是他们逻辑功能不一样,那如何快速的上手C语言代码,建议多看多写,下面是小编整理的C语言必背18个经典程序。

  • spring事务管理全解析

    spring事务管理全解析

  • 2021pycharm永久激活码[免费获取]

    (2021pycharm永久激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZPB5EL5Q-eyJsaWNlb…

  • jsp web应用开发_JSP页面

    jsp web应用开发_JSP页面第1章动态网站开发基础1.        动态网页是指服务器端运行的程序或者网页,它们会随不同客户,不同时间,返回不同的内容。 2.        随着Internet技术的兴起,B/S结构是对C/S结构的一种变化或者改进的结构。在这种结构下,程序完全放在应用服务器上,并通过应用服务器同数据库服务器进行通信。 3.        开发JSP动态网站的步骤如下:a)

发表回复

您的电子邮箱地址不会被公开。

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