以launcher app为例说明,此功能的核心是ContentResolver 的notifyChange
和 registerContentObserver
接口
。
Launcher.java
的一个方法(在onCreate方法里调用),这里即是为要监视的对象注册Observer。我这里讨论如何监视数据库里数据的变化,所以要监视的对象自
然是数据库了, LauncherSettings.Favorites.CONTENT_URI 指向的就是一张数据库表(详见launcher
app源码)。
private void registerContentObservers() {
ContentResolver resolver = getContentResolver();
resolver.registerContentObserver(LauncherProvider.CONTENT_APPWIDGET_RESET_URI, true,
mWidgetObserver);
resolver.registerContentObserver
(LauncherSettings.Favorites.CONTENT_URI, true, mObserver);
}
其中mObserver是个 FavoritesChangeObserver 类型的对象(只以它为例讲解),FavoritesChangeObserver类的定义如下:
private class FavoritesChangeObserver extends ContentObserver {
public FavoritesChangeObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
onFavoritesChanged();
}
}
onFavoritesChanged()方法是Observer定义的一部分,用于在接收到通知后进行相应的处理操作。这个方法里的内容不展开叙述,它的工作就是刷新Home界面。
private void onFavoritesChanged() {
mDesktopLocked = true;
mModel.loadUserItems(false, this, false, false);
}
LauncherProvider.java
这里是实际操作数据库的地方,操作完成之后会视情况通知前面注册的Observer。
private void sendNotify
(Uri uri) {
String notify = uri.getQueryParameter(PARAMETER_NOTIFY);
if (notify == null || "true".equals(notify)) {
getContext().getContentResolver().
notifyChange
(uri, null);
}
}
@Override
public Uri insert(Uri uri, ContentValues initialValues) {
SqlArguments args = new SqlArguments(uri);
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
final long rowId = db.insert(args.table, null, initialValues);
if (rowId <= 0) return null;
uri = ContentUris.withAppendedId(uri, rowId);
sendNotify
(uri);
return uri;
}
分享到:
相关推荐
Android 数据库内容变化的监听 Android 数据库内容变化的监听是 Android 系统中一种重要的机制,用于监听数据库中的内容变化。这种机制基于 Uri 的内容监测,通过 ContentResolver 类提供了三个方法来实现监听功能...
在Android开发中,监听短信数据库的变化是一项常见的需求,尤其是在实现如短信自动回复、短信通知等功能时。通过监听短信数据库,开发者可以实时获取到用户手机上接收到的新短信或已有的短信变化,从而进行相应的...
在Android开发中,ContentObserver是用于监听ContentProvider中数据变化的重要工具。ContentObserver允许开发者注册对特定Uri的兴趣,一旦这个Uri对应的数据库有任何更新,ContentObserver的`onChange()`方法就会被...
SQLite是Android系统内置的关系型数据库,开发者经常需要实时监控数据库中的数据变化以便进行相应的业务逻辑处理。`ContentObserver` 是Android提供的一种机制,允许应用程序监听系统内容提供者的变更,包括数据库...
4. 使用ContentObserver:在需要监听数据库变化的地方,创建一个ContentObserver实例,然后通过ContentResolver的registerContentObserver()方法注册。在ContentObserver的onChange()方法中处理数据变化。 现在,...
在Android开发中,验证码自动填充是一项实用的功能,它能够提高用户体验,减少用户手动输入验证码的繁琐步骤。本项目"Android自动填写验证码源码"提供了一种实现方式,下面将详细介绍这个功能及其背后的实现原理。 ...
`BroadcastActionRecordAct`中还包含了一个`ContentObserver`,用于监听数据库的变化。当数据库中的数据发生变化时,`ContentObserver`会通知我们。我们可以使用`Handler`来更新UI,将最新的广播记录显示在`TextView...
本文将深入探讨如何在Android应用程序中有效地使用内容观察者,特别是针对短信数据库的变化进行监控。 首先,理解ContentObserver的原理至关重要。ContentObserver是一个接口,它允许我们注册到系统的...
内容观察者(ContentObserver)是Android系统中一个关键的组件,它主要用于监控数据内容的变化,如联系人、短信等数据库的变更。这个概念是基于观察者模式,它允许应用程序订阅并接收数据变化的通知,以便在数据发生...
通过`ContentResolver.registerContentObserver()`注册观察者,当内容提供者的数据发生变化时,观察者会接收到回调。 ### 七、跨进程通信 内容提供者是支持跨进程通信的,这意味着一个应用中的数据可以被其他应用...
观察者模式(Observer Pattern)是一种行为...通过ContentProvider,Android提供了一个统一的数据访问接口,使得不同应用之间的数据交换变得简单且安全。了解并熟练掌握这些概念,对于提升Android开发技能至关重要。
首先,内容提供者是Android系统中用于数据共享的标准化接口,它可以使得不同的应用之间能够安全地访问和交换数据。内容提供者定义了一套标准的CRUD(创建、读取、更新、删除)操作,使得数据管理变得规范和统一。在...
当ContentResolver中的数据发生变化时,如SQLite数据库中的数据更新或删除,ContentObserver会接收到相应的通知。开发者可以通过实现ContentObserver的onChange()方法来处理这些变化。 二、ContentObserver的工作...
总之,实现实时删除短信会话功能涉及Android的权限管理、数据库操作、Loader机制、ContentObserver以及UI更新。理解这些核心概念,并结合具体的实践示例,可以帮助你更好地构建一个功能完善的短信应用。
总的来说,实现在Android应用中实时删除短信和会话涉及对SQLite数据库的操作、使用ContentObserver监听数据变化,以及在后台线程中执行删除任务。理解这些概念和技术,对于Android开发者来说是至关重要的,特别是...
数据的更新则通过观察者模式(Observer)和ContentResolver的registerContentObserver方法实现。 3. **电话呼叫逻辑**:当用户完成拨号后,Dialer会启动打电话服务,该服务通过`Intent`向系统的电话服务发送启动...
7. **观察者(Observer)机制**:ContentProvider支持观察者模式,当数据发生变化时,可以通过`ContentResolver.registerContentObserver()`注册一个ContentObserver,它会在数据改变时接收到通知。这对于实时更新UI...
在Android开发中,DownloadManager是处理长时间下载操作的一个系统服务。通过使用DownloadManager,开发者可以实现应用的自动更新功能,并通过监听下载进度,向用户展示当前下载状态。下面详细介绍一下Download...
getContentResolver().registerContentObserver(CalendarContract.Events.CONTENT_URI, true, new CalendarObserver(new Handler())); // 注销观察者 getContentResolver().unregisterContentObserver...
3. **权限设置**:确保应用有足够的权限来监听网络状态变化,通常需要在AndroidManifest.xml中添加`<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />`。 ### 结论 通过对Android后台...