Android学习笔记----利用ContentObserver监听数据库内容的改变
来源:互联网 发布:udp端口命令 编辑:程序博客网 时间:2024/05/22 13:12
/**********************************************************/
利用ContentProvider监听数据库内容的改变
监听ContentProvider所共享的内容的变化,并随着ContentProvider数据的改变提供相应的处理。
1,创建一个类,继承ContentObserver()
2,注册内容ContentObserver
getContentResolver().registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver contentObserver)
uri:该监听器所监听的ContentProvider的uri
notifyForDescendents:如果该参数设置为true,假如监听器注册监听的Uri为content://abc,那么Uri为content://abc/xyz,content://abc/xyz/foo,的数据改变时也会触发监听器,如果该参数设置为false,假如监听器注册监听的Uri为content://abc,那么只有当content://abc的数据发生改变的时候才会触发该监听器。
contentObserver:监听器实例
package org.crazyit.content;import android.app.Activity;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Handler;/** * Description: * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>* <br/>Copyright (C), 2001-2014, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */public class MonitorSms extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 为content://sms的数据改变注册监听器 getContentResolver().registerContentObserver(Uri.parse("content://sms"),true,new SmsObserver(new Handler())); } // 提供自定义的ContentObserver监听器类 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("address=").append(cursor.getString(cursor.getColumnIndex("address"))); // 获取短信的标题 sb.append(";subject=").append(cursor.getString(cursor.getColumnIndex("subject"))); // 获取短信的内容 sb.append(";body=").append(cursor.getString(cursor.getColumnIndex("body"))); // 获取短信的发送时间 sb.append(";time=").append(cursor .getLong(cursor.getColumnIndex("date"))); System.out.println("Has Sent SMS::" + sb.toString()); } } }}
使用自己定义的内容提供者的增删改查方法可以引起数据的改变,但如果想要触发内容观察者,需要在方法内部,加上getContext().getContentResolver().notifyChange(uri,null)方法
例:如果不知道怎么自定义内容提供者的话,可以翻看我的前一篇博客 Android学习笔记----自定义内容提供者
public class MyContentResolver extends ContentResolver{ ........................... @Override public Uri insert(Uri uri,ContentValues values){ Uri uriReturn = null; SQLiteDatabase db = myDbHelper.getWritableDatabase(); switch(uriMarcher.,match()){ case BOOK_DIR: break; case BOOK_ITEM: long newId = db.insert("Book",null,values); uriReturn = Uri.parse("content://"+AUTHORITY +"/book/"+newId); <strong><span style="color:#ff6666;"> getContext().getContentResolver().notifyChange(uri,null)</span></strong> break; case AUTHORDETAIL_DIR : break; case AUTHORDETAIL_ITEM: long newCateGoryId = db.insert("AuthorDetail",null,values); uriReturn = Uri.parse("content://"+AUTHORITY+"/category/"+newCateGoryId); <strong><span style="color:#ff6666;">getContext().getContentResolver().notifyChange(uri,null)</span></strong> break; default break; } return uriReturn ; } ...........................}
在一个活动的内部自定义内容观察者,然后注册内容观察者,当通过上述自定义的内容提供者的方法引起数据的改变的时候,就会触发注册的内容观察者,可以在注册的内容观察者里面做出对应的处理。
0 0
- Android学习笔记----利用ContentObserver监听数据库内容的改变
- Android数据库改变监听,ContentObserver使用
- android 使用contentobserver监听数据库内容变化
- android 使用contentobserver监听数据库内容变化
- Android 监听ConentProvider的数据改变,ContentObserver
- Android学习 - ContentObserver监听
- Android-ContentObserver内容监听者
- android 监听数据库ContentObserver使用说明
- Android ContentObserver实现数据库监听
- ContentObserver实现数据库的监听
- Android中的ContentObserver的学习笔记
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- 使用ContentObserver监听短信数据库的变化
- 内容观察者 ContentObserver 监听短信、通话记录数据库 挂断来电
- C# 枚举与结构
- Java基础之集合
- Poj 3009 Curling 2.0【dfs】
- ubuntu 14.04 开启root登录
- Spark代码2之Transformation:union,distinct,join
- Android学习笔记----利用ContentObserver监听数据库内容的改变
- Oracle 11gR2 SCAN 详解
- Android 布局中 如何使控件居中
- is_recovery_dest_file
- ScrollView分析
- 使用Gradle构建Android项目的一些自定义配置
- matplotlib的配置参数rcParams
- Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数
- Python中read(),readline()和readlines()的区别