以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;
}
分享到:
相关推荐
- **NetworkCallback**:从Android 5.0(API 21)开始,可以通过注册`ConnectivityManager.NetworkCallback`监听网络连接变化。 5. **源码分析**: - **请求拦截与记录**:源码中会包含对网络请求的拦截逻辑,...
同时,可以利用`ContentObserver`监视短信数据库的变化。 8. **数据库优化**:对于大量短信数据,优化查询性能和存储效率至关重要。这可能涉及到索引的创建、数据分页加载以及合理设计数据库表结构。 9. **备份与...
本文将深入探讨“Android网络监视器”的源码,揭示其工作原理,并提供一些入门学习的指导。 1. **网络监控基础** 在Android系统中,网络监控主要涉及到对HTTP/HTTPS请求的跟踪。这些请求通常由`HttpURLConnection`...
《深入解析Android网络监视器源码》 在Android开发中,理解网络监控是至关重要的,它可以帮助开发者优化网络性能,定位网络相关问题。本篇将详细介绍Android网络监视器的源码,带你一窥其内部机制。 一、Android...
标题中的“悬浮框监视内存变化”指的是在Android应用开发中,通过一个悬浮窗口来实时监控应用程序的内存使用情况。悬浮框通常是一个可自定义的小窗口,它可以浮动在其他应用之上,提供用户即时的信息或者功能。在这...
【Android网络监视器源码解析】 在Android应用开发中,理解和监控网络活动是至关重要的,因为这直接影响到应用的性能和用户体验。"Android网络监视器源码"提供了一个宝贵的资源,帮助开发者深入理解网络请求的流程...
《深入解析Android源码:andbatdog电池监视模块》 在Android系统中,电池管理是一项至关重要的任务,它直接影响到用户的使用体验。本资源“andbatdog监视电池Android源码.rar”提供了一个名为“andbatdog”的电池...
这个"安卓Android源码——网络监视器源码.zip"压缩包提供了Android系统中网络监控功能的源代码,这对于开发者来说是一个宝贵的资源,可以帮助他们深入了解网络活动的监控机制。 首先,我们关注的是"源码说明.txt...
例如,`SystemSettingsService`中的`setXXX()`方法用于接收并处理设置更改请求,`SystemSettingsObserver`则用于监视系统设置的变化并作出响应。 总结,Android SystemSetting源码是理解Android系统如何管理用户...
TextBack利用ContentObserver类,这是一种可以监视数据集变化的接口,当接收到新的短信时,ContentObserver会触发回调函数,通知应用程序有新的消息待处理。 其次,TextBack能够获取短信的详细信息,包括发送者和...
18、Android手机里的滑动条源代码 共1个目标文件!简单。 19、Android团购信息源代码 共8个目标文件!简单的本地数据库操作!~ 20、Android网络交互判断网络连接的例子 共1个目标文件!简单。get方式访问一个url!...
- SQLite数据库的使用,包括创建表、插入数据、查询数据等。 12. **与其他应用的交互** - 发送Intent给其他应用,共享数据。 - 接收其他应用返回的数据。 - 使用Intent过滤器实现更高级的功能。 #### 二、...
2. `ContentObserver`: 监视联系人和短信表的变化,以便实时更新黑白名单。 3. `SharedPreferences`: 存储用户设置的黑白名单数据。 4. `Service`: 如`CallBlockingService`,在后台运行以实现电话拦截。 5. `SQLite...
12. **Android组件交互**:如BroadcastReceiver、ContentObserver等,它们允许应用响应系统事件或监视数据变化。 13. **动画与特效**:Android提供了多种动画机制,包括属性动画、视图动画和过渡动画,可以增强应用...
- **学习目标**:掌握Android应用中常用的数据存储方式,包括文件存储、SharedPreferences、SQLite数据库等。 - **实验内容**: - 文件存储:使用File API进行简单的文件读写操作。 - SharedPreferences:保存...
7.4.7 使用菜单响应数据变化 7.5 通过XML文件加载菜单 7.5.1 XML菜单资源文件的结构 7.5.2 填充XML菜单资源文件 7.5.3 响应基于XML的菜单项 7.5.4 其他XML菜单标记简介 7.6 资源 7.7 小结 ...
这些API主要集中在`ContactsContract`类中,它是Android系统数据库中联系人数据的接口。开发者可以通过ContentResolver对象来访问这些API,进行查询、插入、更新和删除操作。 1. **同步系统通讯录**: 在这个项目...
7. **数据持久化**: 为了记录电池历史数据,应用可能使用SQLite数据库存储电量变化趋势,以便用户查看过去一段时间内的电池使用情况。 通过分析`andbatdog监视电池`项目的源码,我们可以学习到如何在Android环境中...
通过这些工具,开发者可以在程序运行时监视代码执行的流程,实时观察变量的变化,以及快速定位程序异常终止的位置。熟练掌握这些基本的调试技术,对于缩短开发周期、提高代码质量有着直接影响。 其次,利用Android ...
37. DDMS和TraceView的区别在于DDMS主要用于监视和管理设备,而TraceView用于分析应用的性能,展示方法调用的详细时间。 38. Java中引用本地语言,可以通过JNI(Java Native Interface)实现。 39. Android的IPC...