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

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

使用ContentObserver 的时候2个重要方法。

(1)注册:    public final void  registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)。

     功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。

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

          功能:取消对给定Uri的观察

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

首先是一个监听类:

       

package com.bsn.test;import java.net.URI;import java.net.URL;import android.app.Activity;import android.content.ContentProvider;import android.content.Context;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Handler;public class SMSContentObserver extends ContentObserver {private Context mContext;private Handler mhandler;public SMSContentObserver(Context context,Handler handler) {super(handler);      mContext=context;  mhandler=handler;}   @Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);Uri outMMS=Uri.parse("content://sms/sent");Cursor c=mContext.getContentResolver().query(outMMS, null,null, null, "date desc"); if (c!=null) { System.out.println("the number is----"+c.getCount());StringBuilder sb=new StringBuilder();while (c.moveToNext()) {        sb.append("发件人手机号"+c.getInt(c.getColumnIndex("address")));        sb.append("信息内容"+c.getString(c.getColumnIndex("body")));}c.close();mhandler.obtainMessage(2,sb.toString()).sendToTarget();}}}
 (2)注册监听类的acitivity

      

package com.bsn.test;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{private SMSContentObserver observer;private TextView numView;private TextView contentView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.dotsaygan);observer=new SMSContentObserver(this, mHandler);numView=(TextView) findViewById(R.id.tv);contentView=(TextView) findViewById(R.id.tv1);registerContentObservers();}private void registerContentObservers() {     Uri uri=Uri.parse("content://sms");     getContentResolver().registerContentObserver(uri, true, observer);}private Handler mHandler=new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case 2:String outbox=(String)msg.obj;contentView.setText(outbox);break;default:break;}}};}
最后别忘记了加入 读取消息的权限

   

更多相关文章

  1. 酷炫轮播广告
  2. Android(安卓)6.0 监听系统通知(Notification)
  3. android Studio与数据库SQLserver连接实现登录
  4. Android(安卓)9.0 的 recent 键/事件的拦截
  5. Android(安卓)Your content must have a ListView whose id attr
  6. android之activity跳转 窗口跳转
  7. Android实现短信验证码自动填写功能
  8. Android中常用的设计模式(一)
  9. Android(安卓)4.4 Kitkat Phone工作流程浅析(九)__状态通知流程

随机推荐

  1. Android SensorEventListener
  2. android 创建快捷桌面
  3. Android SDK Manager 不能更新解决办法
  4. Android横向滑动选项卡
  5. [置顶] Android api level对照表
  6. Android优秀开源框架集
  7. android设置gps自动开启
  8. Android知识搜罗
  9. android自定义按钮按下效果
  10. android 五子棋之小白java