ContentProvider(二)
4. ContentResolver 内容解析者
ContentResolver 主要是通过URI调用getContentResolver()获取ContentProvider 提供的数据接口,进而进行增删改查等操作。
// 查询
Cursor cursor = getContentResolver().query(Uri.parse(uri), null, null, null, null);
// 插入数据到指定 URI 中
getContentResolver().insert(Uri.parse(uri), ContentValues);
5.ContentObserver 内容观察者
ContentObserver 内容观察者通过指定URI 监听ContentProvider数据是否改变。
自定义 ContentObserver 内容观察者
1.注册ContentObserver 内容观察者 registerContentObserver
/**
* 监听ContentProvider数据库变化
*/
private void ContentObserverDatabase() {
// [1]注册内容观察者
Uri uri = Uri.parse("content://ProgramAndroid/person");
// false 观察的uri 必须是一个确切的uri 如果是true
getContentResolver().registerContentObserver(uri, true,
new CustomContentObserver(new Handler()));
}
2.继承 ContentObserver 实现 onChange方法
package com.programandroid.ContentProvider;
import android.database.ContentObserver;
import android.os.Handler;
/*
* CustomContentObserver.java
*
* Created on: 2017-9-13
* Author: wangjie
*
* Welcome attention to weixin public number get more info
*
* WeiXin Public Number : ProgramAndroid
* 微信公众号 :程序员Android
*
*/
public class CustomContentObserver extends ContentObserver {
/**
* @param handler
*/
public CustomContentObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
// 当我们观察的uri发生改变的时候调用
@Override
public void onChange(boolean selfChange) {
System.out.println(" 数据库被操作了 ");
super.onChange(selfChange);
}
}
至此自定义内容观察者已经实现完成
调用ContentObserver 监听短信数据改变
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//[1]注册一个内容观察者
Uri uri = Uri.parse("content://sms/");
getContentResolver().registerContentObserver(uri, true, new MyContentObserver(new Handler()));
}
private class MyContentObserver extends ContentObserver{
public MyContentObserver(Handler handler) {
super(handler);
}
//当观察的内容发生改变的时候调用
@Override
public void onChange(boolean selfChange) {
System.out.println(" 短信的数据库发生了改变");
super.onChange(selfChange);
}
}
6. ContentProvider ContentResolver ContentObserver 三者关系
三者关系图如下
欢迎关注微信公众号:程序员Android
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
点击阅读原文,获取更多福利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!