Android使用ContentObserver监听数据库内容是否更改

  

<强> Android使用ContentObserver监听数据库内容是否更改

  

<强> ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(触发),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器,行触发器,相应地ContentObserver也分为ContentObserver“表”,“行”ContentObserver,当然这是与它所监听的Uri MIME类型有关的。熟悉内容提供商(内容提供者)的应该知道,我们可以通过UriMatcher类注册不同类型的Uri,我们可以通过这些不同的Uri来查询不同的结果,根据Uri返回的结果,Uri类型可以分为:返回多条数据的Uri,返回单条数据的Uri。

  

注册/取消注册ContentObserver方法,抽象类ContentResolver类中的方法原型如下:
  

        公众最终无效registerContentObserver   (   Uri Uri,布尔notifyForDescendents ContentObserver观察者   )      

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

  

<强>参数:
  

  

uri需要观察的uri(需要在UriMatcher里注册,否则该uri也没有意义了)
  

  

notifyForDescendents为假表示精确匹配,即只匹配该Uri

  

观察系统里短消息的数据库变化的ContentObserver派生类,SMSContentObserver。java
  

        进口android.content.Context;   进口android.database.ContentObserver;   进口android.database.Cursor;   进口android.net.Uri;   进口handler;   进口android.util.Log;//用来观察系统里短消息的数据库变化“表”内容观察者,只要信息数据库发生变化,都会触发该ContentObserver派生类   公开课SMSContentObserver延伸ContentObserver {   私有静态字符串标签=" SMSContentObserver”;      私人int MSG_OUTBOXCONTENT=2;      私人上下文mContext;   私人处理器mHandler;//更新UI线程      公共SMSContentObserver(上下文语境,处理程序处理程序){   超级(处理器);   mContext=上下文;   mHandler=处理程序;   }/* *   *当所监听的Uri发生改变时,就会回调此方法   *   * @param selfChange此值意义不大一般情况下该回调值false   */@Override   公共空间>   进口android.app.Activity;   进口android.database.Cursor;   进口android.net.Uri;   进口android.os.Bundle;   进口handler;   进口android.os.Message;   进口android.provider。*;   进口android.util.Log;   进口android.widget.EditText;   进口android.widget.TextView;      公开课MainActivity延伸活动{      私人TextView tvAirplane;   私人EditText etSmsoutbox;      私人SMSContentObserver SMSContentObserver;/* *第一次被创建时调用活动。*/@Override   公共空间onCreate(包savedInstanceState) {   super.onCreate (savedInstanceState);   setContentView (R.layout.main);      EditText etSmsoutbox=() findViewById (R.id.smsoutboxContent);      smsContentObserver=new smsContentObserver(这个,mHandler);//注册内容观察者   registerContentObservers ();   }      私人空间registerContentObservers () {//氨怼蹦谌莨鄄煺?通过测试我发现只能监听此Uri - - - - -→内容://sms//监听不到其他的Uri比如说内容://短信/发件箱   Uri smsUri=Uri.parse(内容://短信);   getContentResolver ()。registerContentObserver (smsUri,真的,smsContentObserver);   }      私人处理程序mHandler=new处理程序(){      公共空间handleMessage(消息味精){   字符串发件箱=(字符串)msg.obj;   etSmsoutbox.setText(发件箱);   }   }   };   }   之前      

,以上就是Android使用ContentObserver的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android使用ContentObserver监听数据库内容是否更改