Android开发14——监听内容提供者ContentProvider的数据变化
一、提出需求
有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider;A应用修改了B应用的数据,插入了一条数据。有这样一个需求,此时C应用需要得到数据被修改的通知并处理相应操作。
二、示例代码
A应用
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void insert(View v)
{
Uri uri = Uri.parse("content://cn.xyCompany.providers.personProvider/person");
ContentResolver resolver = this.getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "xy_new_new");
values.put("phone", "xy_new_111");
resolver.insert(uri, values);
}
}
B应用
package cn.xy.cotentProvider.app.providers;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;
import cn.xy.cotentProvider.service.DBOpeningHelper;
public class PersonProvider extends ContentProvider
{
private DBOpeningHelper dbHelper;
// 若不匹配采用UriMatcher.NO_MATCH(-1)返回
private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
// 匹配码
private static final int CODE_NOPARAM = 1;
private static final int CODE_PARAM = 2;
static
{
// 对等待匹配的URI进行匹配操作,必须符合cn.xyCompany.providers.personProvider/person格式
// 匹配返回CODE_NOPARAM,不匹配返回-1
MATCHER.addURI("cn.xyCompany.providers.personProvider", "person", CODE_NOPARAM);
// #表示数字 cn.xyCompany.providers.personProvider/person/10
// 匹配返回CODE_PARAM,不匹配返回-1
MATCHER.addURI("cn.xyCompany.providers.personProvider", "person/#", CODE_PARAM);
}
@Override
public boolean onCreate()
{
dbHelper = new DBOpeningHelper(this.getContext());
return true;
}
@Override
public Uri insert(Uri uri, ContentValues values)
{
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (MATCHER.match(uri))
{
case CODE_NOPARAM:
// 若主键值是自增长的id值则返回值为主键值,否则为行号,但行号并不是RecNo列
long id = db.insert("person", "name", values);
Uri insertUri = ContentUris.withAppendedId(uri, id);
// 发出变化通知(非必须)设监听者为null。
// 若设置某个监听者则不管有多少个监听者,该监听者一定可以获得该通知
getContext().getContentResolver().notifyChange(uri, null);
return insertUri;
default:
throw new IllegalArgumentException("this is unkown uri:" + uri);
}
}
......
}
C应用
package cn.xt.contentProvider.lisenter;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri uri = Uri.parse("content://cn.xyCompany.providers.personProvider/person");
ContentResolver resolver = this.getContentResolver();
resolver.registerContentObserver(uri, true, new PersonContentObserver(new Handler()));
}
private class PersonContentObserver extends ContentObserver
{
public PersonContentObserver(Handler handler)
{
super(handler);
}
// 得到数据的变化通知,该方法只能粗略知道数据的改变,并不能判断是哪个业务操作进行的改变
@Override
public void onChange(boolean selfChange)
{
// select * from person order by id desc limit 1 // 取得最近插入的值(序号大——>小并取第一个)
Uri uri = Uri.parse("content://cn.xyCompany.providers.personProvider/person");
ContentResolver resolver = MainActivity.this.getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, "id desc limit 1");
if(cursor.moveToFirst())
{
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.i("lisenter", name);
}
}
}
}
关于contentProvider的基本使用,请参看本博客博文《Android开发13——内容提供者ContentProvider的基本使用》
http://blog.sina.com.cn/s/blog_67aaf444010162bj.html
转载于:https://www.cnblogs.com/chen110xi/p/3247344.html
Android开发14——监听内容提供者ContentProvider的数据变化相关推荐
- Android开发之监听软键盘状态(弹出收回)
版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/81511764 出自:shusheng007 ...
- Android开发之监听或获取手机短信内容
最近开始学习安卓,要做一个可以监听手机短信的内容,做个笔记,方便以后查看 有两种方式: 方式一:通过广播监听短信信息 注册一个广播接收器 <receiver android:name=" ...
- Android开发之监听手机来电
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息.关于TelephonyManager的详解可以参照:Andr ...
- vue 监听对象里的特定数据
2019独角兽企业重金招聘Python工程师标准>>> vue 监听对象里的特定数据变化 通常是这样写的,只能监听某一个特定数据 watch: {params: function( ...
- 内容提供者ContentProvider, 读写加联系人,读写通话记录,监听收到的短信,获取之前已经收到的短信
1.什么是内容提供者? 首先我们必须要明白的是ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用比较少.ContentProvider为不同的软 ...
- Android学习笔记---监听ContentProvider(内容共享者)中数据的变化
2013-03-16 监听ContentProvider中数据的变化 ------------------------------------------ 1.如果ContentProvider的访问 ...
- android 2.1 监听电话状态并自动接听来电
一.开发环境 Elispse5.5,JDK1.6,Aadroid 2.1 二.开发中使用到的重点技术点: 距离感应(SENSOR_SERVICE ),音讯管理(AUDIO_SE ...
- Android学习小记-----监听并保存传感器数据,让service后台运行(保持CPU运转
最近做了一个Demo,监听手机中传感器的数据,并将数据保存到手机文件中,发现数据会有丢失的现象. 经过多次测试,发现系统进入深度休眠了,之后service会停止,虽然增加了service自动启动的功能 ...
- android 软键盘监听、隐藏、显示、点击空白处隐藏和Android KEYCODE 键值大全
android 软键盘监听.隐藏.显示.点击空白处隐藏. textView.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boo ...
最新文章
- kindle词典_kindle盖泡面是什么梗?kindle官方盖章泡面盖子 网友:定位准确
- Cpp 对象模型探索 / 系列文章的索引
- GitHub 标星 5w+!Python 新手 100 天学习计划,这次再学不会算我输!
- c语言编程宝典pdf,C语言编程宝典之一.pdf
- ei会议论文录用但不参加会议_会议论文投稿可以不参会吗
- Android开发之引用framework.jar中的方法 | 引用framework.jar包
- Web前端-Vue.js必备框架(一)
- 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
- 华为否认削减手机产量;百度副总裁郑子斌将离职;开发者对苹果发集体诉讼 | 极客头条...
- nodejs总结之redis模块
- ffmpeg推送直播流的技术进展
- 最简单的java代码【java基本语法】
- 使用Echarts在网页中显示漂亮图例实战(Bootstrap+Django+ECharts+Jinja2使用入门)
- Java后端开发技术栈
- 关于使用梆梆加固后,适配android5.0系统与64位机型的问题
- ​iPhone 14 Pro 全系降价 700 元;Gmail 之父:有了 ChatGPT,搜索引擎活不过两年了|极客头条...
- pdf,word,ppt在线预览
- A7.2022年全国数学建模竞赛A题-波浪能最大输出功率设计-赛题分析与讨论
- mysql 统计表_MySQL统计表的设计
- 如何求两个文件的交集、并集和差集?------sort和uniq闪亮登场
热门文章
- “云计算和大数据”重点专项2017年度项目安排公示
- 云计算发展备受瞩目的五大方向
- 任务调度系统 xxl-job,V1.4.1 新特性速览
- PHP define()的用法
- math.floor实现四舍五入
- matlab常用操作 随手记录
- java 时间转为毫秒数_疫情期间面试总结一(java基础方面)
- java书籍_2020年java从入门到进阶书籍推荐,基础\自学\编程\数据结构\后端\虚拟机\网络\设计模式书籍...
- Python多种方式实现”欢迎小红“
- 解决Keras 与 Tensorflow 版本之间的兼容性问题,导入keras报错:module 'tensorflow.python.keras.backend' has no attribute