UriMatcher:工具类来帮助匹配内容提供商的uri
addURI(String authority, String path, int code)
参数1:包名
参数2:暗号,一般都写入表明
参数3:进行匹配的组件,必须积极的
添加一个URI匹配,返回此URI时的代码匹配。URI节点可能精确匹配字符串,标记“*”匹配任何文本,或令牌“#”相匹配数字。
public static final int SUCCESS = 1;
/**
* 创建一个保安,检查uri的规则,如果uri匹配失败 返回-1
*/
// UriMatcher.NO_MATCH 不匹配
static UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
mUriMatcher.addURI("com.itheima.db", "account", SUCCESS);
}
//利用内容提供者的解析器,通知内容观察者数据发生了变化
getContext().getContentResolver().notifyChange(uri, null);
ContentProvider:内容提供者的作用
应用程序创建的数据库默认都是私有的,别的应用程序不可以访问里面的数据。
如果有需求把自己应用程序私有的数据库暴露给别的用户增删改查,就需要使用内容提供者
public abstract class ContentResolver :通过URI来,访问应用程序内容
ContentResolver 是个抽象类 初始化:
ContentResolver resolver = getContentResolver();
ContentValues :该类用于存储一组值,ContentResolver 可以处理。
// 得到内容提供者的解析器
ContentResolver resolver = getContentResolver();
// 内容提供者 规定头写"content://"
Uri uri = Uri.parse("content://com.content_provider.db/account");
ContentValues values = new ContentValues();
// 添加数据
values.put("name", "zhangsan");
values.put("money", 10000);
// 通过内容解析器让内容提供者添加一条数据
resolver.insert(uri, values);
ContentObserver:收到电话支持更改内容。必须实现的对象添加到ContentObservable
创建一个观察者,传递 handler 来处理程序运行
public ContentObserver(Handler handler) {
mHandler = handler;
}
registerContentObserver(@NonNull Uri uri, boolean notifyForDescendents,@NonNull ContentObserver observer)
参数2:true代表进行通知
注册一个观察者类时回调数据确定的特定URI更改内容。
onChange(boolean selfChange):内容发生改变时调用此方法,提醒内容进行更改
示例一:
getContentResolver().registerContentObserver(uri, true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println("内容观察者");
}
});
示例二:
public class MainActivity extends Activity {
private MyObserver observer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Uri uri = Uri.parse("content://sms");
observer = new MyObserver(new Handler());
getContentResolver().registerContentObserver(uri, true, observer);
}
private class MyObserver extends ContentObserver{
public MyObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println("onchange");
}
}
}