在跟着一个教程做手机卫士的时候,里面用到了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 stubthis.context = c;this.handler = handler;}@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.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;@Overrideprotected 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;}};};}

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

   


 

 

作者:jason0539

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

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


 

更多相关文章

  1. 使用MonkeyTest对Android客户端进行压力测试
  2. 一个Android应用程序App中存在多少个Context实例对象呢
  3. Android中 任务栈&启动模式
  4. Android的Merge讲解与实例
  5. Android(安卓)uiautomator实例使用
  6. Webview实现android简单的浏览器实例代码
  7. Android基于API的Tabs3实现仿优酷tabhost效果实例
  8. Android(安卓)Activity Launch Mode 启动模式详解
  9. android之camera用法实例详解

随机推荐

  1. Android UI优化之include标签的使用
  2. Android 软件盘弹出时把view顶上去的处理
  3. Android(安卓)ActionBar以及menu的代码设
  4. python in android
  5. Android中从图库中选取图片实例详解
  6. Android中给webview设置代理
  7. Android Data Backup
  8. Android原生拼音输入法分析
  9. 修改android开机logo
  10. Android查询不到电话号码解决方法