定义一个ContentObserver的子类 //观察屏幕旋转设置变化,类似于注册动态广播监听变化机制 private class RotationObserver extends ContentObserver
ContentResolver中发出通知: notifyChange(uri, observer, true /* sync to network */); *结论: 根据uri 找到 监听此URI 的Contentobserver c.registerContentObserver(mChangeObserver); // 内容观察者 c.registerDataSetObserver(mDataSetObserver); // 数据观察者 * 当Contentobserver 发送更新通知时,执行cursor的 内容观察者即: * mChangeObserver.onChange()方法 : private class ChangeObserver extends ContentObserver
{ private ContentObserver mContentObserver; public Transport(ContentObserver contentObserver selfChange, Uri uri, int userId) { ContentObserver contentObserver = mContentObserver; if (contentObserver ! mContentObserver; public Transport(ContentObserver contentObserver) { mContentObserver ) { ContentObserver contentObserver = mContentObserver; if (contentObserver !
; public Transport(ContentObserver contentObserver) { mContentObserver = contentObserver contentObserver = mContentObserver; if (contentObserver ! --通过 contentObserver发送回调通知--> contentObserver.dispatchChange(selfChange, uri, userId); mContentObserver; public Transport(ContentObserver contentObserver) { mContentObserver ) { ContentObserver contentObserver = mContentObserver; if (contentObserver !
内容观察者 ContentProvider ContentResolver ContentObserver 三者关系 我们不是牛逼的程序员,我们只是程序开发中的垫脚石。 5.ContentObserver 内容观察者 内容观察者通过指定 监听数据是否改变。 自定义 ContentObserver 内容观察者 1.注册ContentObserver 内容观察者 registerContentObserver 2.继承 ContentObserver 实现 onChange 调用ContentObserver 监听短信数据改变 6. ContentProvider ContentResolver ContentObserver 三者关系 三者关系图如下 关系图.png 至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。
同时我们还可以通过ContentObserver对数据进行观察: 创建我们特定的ContentObserver派生类,必须重载onChange()方法去处理回调后的功能实现 利用context.getContentResolover ()获得ContentResolove对象,接着调用registerContentObserver()方法去注册内容观察者,为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri 由于ContentObserver的生命周期不同步于Activity和Service等,因此,在不需要时,需要手动的调用unregisterContentObserver()去取消注册。 3.说说 ContentProvider、ContentResolver、ContentObserver 之间的关系 a.ContentProvider 内容提供者,用于对外提供数据 b.ContentResolver.notifyChange (uri)发出消息 c.ContentResolver 内容解析者,用于获取内容提供者提供的数据 d.ContentObserver 内容监听器,可以监听数据的改变状态 e.
registerContentObserver(uri,notifyForDescendents,observer)方法,参数:Uri对象,是否精确uri(true不精确,false精确),observer对象 ContentObserver 对象 因为ContentObserver是a抽象类,因此我们写一个内部类来继承这个抽象类,必须实现构造函数,构造函数的Handler对象消息处理器稍后会讲 定义一个内部类MyObserver,实现父类的 com.tsh.myobserver; import android.app.Activity; import android.content.ContentResolver; import android.database.ContentObserver , true, new MyObserver(new Handler())); } //内部类实现内容观察者 private class MyObserver extends ContentObserver
oms.action.MASTERRESET”.equals(action)){ RecoverDefaultConfig(); } } }; 9:定义ContentObserver ,监听某个数据表 private ContentObserver mDownloadsObserver = new DownloadsChangeObserver(Downloads.CONTENT_URI ); private class DownloadsChangeObserver extends ContentObserver { public DownloadsChangeObserver
java.util.regex.Pattern; import net.iaf.framework.util.Loger; import android.app.Activity; import android.database.ContentObserver android.widget.EditText; /** * 读取短信内容 自动填充验证码 * * @author qjx * */ public class SmsContentUtil extends ContentObserver
其实很简单,就是用到了Android中的一个叫ContentObserver的东西,下面手动简单实现一个~~~ 一、开发ContentObserver 主要是用来监听收件箱的内容,一旦有新消息过来 如果是,就直接用正则表达式截取 /** * 短信验证码截取 * * @author yangfan * */ public class SMSContentObserver extends ContentObserver
须要利用Android提供了ContentObserver基类。 监听ContentProvider数据改变的监听器须要继承ContentObserver类。 在使用的时候须要通过ContentProvider向指定的Uri注冊ContentObserver监听器。 final class ImageObserver extends ContentObserver { public ImageObserver(Handler handler
4、说说ContentProvider、ContentResolver、ContentObserver之间的关系 a.ContentProvider内容提供者,用于对外提供数据 b.ContentResolver.notifyChange (uri)发出信息 c.ContentResolver内存解析者,用于获取内容提供者提供的数据 d.ContentObserver内容观察者,可以监听数据的改变状态 e.ContentResolver.registerContentObserver
getContext().getContentResolver().notifyChange(uri, null); } } 如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver 对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法: getContentResolver().registerContentObserver return contactInfos; } } 窃听用户发出的短信 用户使用系统自带的短信程序发送短信,程序会通过ContentProvider把短信保存进数据库,并且发出一个数据变化通知,使用ContentObserver 对数据变化进行监听,在用户发送短信时,就会被ContentObserver窃听到短信: 注册监听: getContentResolver().registerContentObserver(Uri.parse content://sms"), true, new SmsObserver(new Handler())); 监听类: private final class SmsObserver extends ContentObserver
本次用到的观察者就是ContentObserver,它就是特定uri引起的数据库改变。 3.由于contentObserver的生命周期与Activity和Service不同步,在不需要的时候需要手动取消注册。 getContentResolver().unregisterContentObserver(smsObserver); } } 3.最关键的内容观察者 public class SmsObserver extends ContentObserver
亮度自动调节主要是 DisplayPowerController 和 AutomaticBrightnessController 两个类,当亮度发生变化时,如果关联到 ToggleSliderView,用的是 ContentObserver mBrightnessObserver = new BrightnessObserver(mHandler); //省略部分代码 } 又进行了 BrightnessObserver 初始化: /** ContentObserver to watch brightness **/ private class BrightnessObserver extends ContentObserver { //省略部分代码 cr.unregisterContentObserver(this); } } 其实我目前下载的源码,这块功能是不全的,我已经加上了,哪里进行 BrightnessObserver 的 ContentObserver
11.说说 ContentProvider、ContentResolver、ContentObserver 之间的关系? 答:ContentProvider内容提供者, 用于对外提供数据。 ContentObserver内容监听者,可以监听数据的改变状态。 一个应用可以实现ContentProvider来提供给别的应用操作,通过ContentResolver来操作别的应用数据, 同时注册ContentObserver监听数据的变化。
... } 3.4 真正执行查询 } } 可以使用通配符: *:匹配任意长度字符串 #:匹配任意长度的数字字符串 4.4 ContentObserver ContentObserver .java 子类重写实现监听逻辑 public void onChange(boolean selfChange) { // Do nothing. should override. } public void onChange(boolean selfChange, Uri uri) { onChange(selfChange); } ContentObserver ContentResolver.java 注册监听 public final void registerContentObserver(Uri uri, boolean notifyForDescendants, ContentObserver observer) 注销监听 public final void unregisterContentObserver(ContentObserver observer) 需要注意:ContentProvider
\n================================================="); } tv.setText(sb.toString()); } ---- ContentObserver 内容观察者,可以给某些数据注册观察者,当数据改变时做出有些操作 初始化观察者 private ContentObserver observer = new ContentObserver(new
项目链接:https://github.com/DoubleD0721/Screenshot前瞻目前Android针对截屏的监控主要有三种方式:利用FileObserver监听某个目录中资源的变化利用ContentObserver 监听全部资源的变化直接监听截屏快捷键(由于不同的厂商自定义的原因,使用这种方法进行监听比较困难)本文主要使用ContentObserver的方式来实现对截屏的监控。 : ContentObserver(handler) { override fun onChange(selfChange: Boolean, uri: Uri?)
--1 注册--> public static void registerObserver(ContentObserver contentObserver) { ContentResolver getContentResolver(); contentResolver.registerContentObserver(FileContentProvider.CONTENT_URI, true, contentObserver ,也可能在不同进程, public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver