<强> 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监听数据库内容是否更改