如果 ContentProvider 的访问者需要知道 ContentProvider 中的数据发生了变化,可以在 ContentProvider 发生数据 变化时调用 getContentResolver().notifyChange(uri, null) 来通知注册在此 URI 上的访问者,例子如下:
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "personid", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
如果 ContentProvider 的访问者需要得到数据变化通知,必须使用 ContentObserver 对数据(数据采用 uri 描述)进 行监听,当监听到数据变化通知时,系统就会调用 ContentObserver 的 onChange() 方法:
getContentResolver().registerContentObserver
(Uri.parse("content://cn.itcast.providers.personprovider/person"),
true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
// 此处可以进行相应的业务处理
}
}
用户使用系统自带的短信程序发送短信,程序会把短信通过 ContentProvider 保存进数据库,并且发出一个数据变 化通知,只要使用 ContentObserver 对数据变化进行监听,在用户发送短信时,就会被 ContentObserver 监听听 到:
注册监听:
getContentResolver().registerContentObserver( Uri.parse("content://sms") , true, new SmsObserver(new Handler()));
监听类:
private final class SmsObserver extends ContentObserver{
public SmsObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) { // 查询发送箱中的短信 ( 处于正在发送状态的短信放在发送箱 )
Cursor cursor = getContentResolver().query( Uri.parse("content://sms/outbox") ,null, null, null, null);
while(cursor.moveToNext()){
StringBuilder sb = new StringBuilder();
sb.append("_id=").append(cursor.getInt(cursor.getColumnIndex("_id")));
sb.append(",address=").append(cursor.getString(cursor.getColumnIndex("address")));
sb.append(";body=").append(cursor.getString(cursor.getColumnIndex("body")));
sb.append(";time=").append(cursor.getLong(cursor.getColumnIndex("date")));
Log.i("ReceiveSendSMS", sb.toString());
} }
分享到:
相关推荐
总结来说,监听ContentProvider中的数据变化涉及到几个关键点:ContentProvider中的数据变化通知方法notifyChange、ContentObserver类以及注册ContentObserver的API。通过这些机制,可以实现在数据变化时得到及时...
Android提供了`ContentObserver`类,用于监听ContentProvider中的数据变化。你可以创建一个内部类继承`ContentObserver`,并在需要的地方注册它。注册通常在Activity或Fragment的`onResume()`方法中完成,注销则在`...
`ContentObserver`是一个内部类,用于监听ContentResolver中的数据变化。当ContentProvider中的数据发生变化时,系统会自动将事件通知给注册了该ContentProvider的`ContentObserver`。 在数据列表更新的流程中,...
`CursorLoader`会监听ContentProvider的变更,并在数据变化时重新加载数据,避免了主线程被阻塞的问题。 在实际开发中,ContentProvider不仅可以用于应用间的数据共享,还常用于备份和恢复数据,或者与其他系统服务...
- ContentObserver是用于监听ContentProvider数据变化的工具,当ContentProvider中的数据发生变化时,注册的ContentObserver会接收到通知。 通过分析和实践"ContentProviderDemo",你可以了解到如何创建自定义...
应用程序在需要监听Content Provider数据变化时,会创建一个ContentObserver的实例并注册到ContentResolver。注册过程中,应用程序提供一个回调方法,当数据发生变化时,此方法会被触发。ContentResolver通过Binder...
在ContentObserver的onChange()方法中处理数据变化。 现在,我们将两者结合,实现两个apk间的通信和数据库监听。假设一个apk负责更新数据库,另一个apk需要实时获取这些更新。发送apk在更新数据库后,可以发送一个...
四、ContentObserver监听数据变化 第三个应用程序的任务是监听`ContentProvider`中数据的变化。这可以通过实现`ContentObserver`类来完成。创建一个`ContentObserver`实例,并将其注册到`ContentResolver`上,设置感...
为了监听ContentProvider中的数据变化,可以使用`ContentObserver`。应用程序可以注册一个`ContentObserver`实例到`ContentResolver`,当ContentProvider中的数据发生变化时,`ContentObserver`的`onChange()`方法会...
`ContentObserver`是Android系统中用于监听ContentProvider数据变化的核心类。在上述代码中,`SmsContent`类继承自`ContentObserver`,用于监听短信数据库的变化。在`SmsContent`构造函数中,传入一个`Handler`对象...
通过监听ContentResolver的变化,可以捕获到数据变化事件。 4. **Application类**:扩展自定义的Application类,可以在其生命周期内注册和管理全局监听器,确保在整个应用生命周期内都能生效。 **EventBus**:标签...
ContentObserver是一个可以监听ContentProvider数据变化的接口,当数据发生变化时,它会收到通知。在现代Android开发中,结合LiveData,可以实时响应ContentProvider数据的变化,使得UI能够自动更新。 十、...
ContentObserver是Android提供的一种机制,用于监听ContentProvider中的数据变化。当数据发生变化时,ContentObserver会收到通知,从而触发相应的回调函数。在描述中提到的`ContentObserverTest`工程,很可能是用来...
ContentObserver是一种监听ContentProvider数据变化的机制,当数据发生变化时,ContentObserver会收到通知。LiveData是Android Jetpack组件的一部分,它可以帮助我们实现数据的实时更新。通过结合ContentProvider和...
在Android应用开发中,ContentProvider是一个至关重要的组件,它扮演着数据共享的角色,使得不同的应用程序之间可以安全地读写共享数据。"android contentprovider的例子"这个主题将带你深入理解ContentProvider的...
在Android操作系统中,ContentProvider是一种核心组件,它为其他应用程序提供了数据共享和访问的机制。这篇任务说明主要关注如何利用ContentProvider快速查找并操作通讯录信息。下面将详细讲解ContentProvider的工作...
8. **监听数据变化**:可以通过ContentObserver或Loader观察数据变化,自动更新ListView。 9. **权限控制**:在AndroidManifest.xml中为ContentProvider添加读写权限,控制其他应用的访问权限。 在实践中,你可能...
Android提供了多种数据存储方式,如SharedPreferences、SQLite数据库、内部/外部存储、ContentProvider等,根据需求选择合适的方式。 7. **事件监听**:学会在按钮或其他UI元素上设置点击事件监听器,如`...
- **通知数据变化**:当数据发生变化时,ContentProvider可以通知监听者,触发UI更新。 使用ContentProvider的基本流程包括: - **注册ContentProvider**:在AndroidManifest.xml中声明ContentProvider组件。 - **...