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
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
点击阅读原文,获取更多福利