sky-mxc 总结 转载注明:https://sky-mxc.github.io
ContentProvider
内容提供者,应用程序间的数据交互,是为存储和获取数据提供的统一接口。
Contentprovider为应用间数据交互提供了安全的环境,它允许把自己的应用数据开放给其他应用进行 CRUD。怎么样进行操作可以自己规定,不用担心权限的问题。
当然如果不想被被人读取自己应用的数据就不需要这个内容提供者。
ContentResolver来访问和操作我们的数据。
ContentResolver 通过我们注册的uri就可以找到我们开放的数据。
关于uri 参考这篇文章:http://blog.csdn.net/dlutbrucezhang/article/details/8917303
创建一个ContentProvider
创建自己的内容提供程序 只需继承ContentProvider即可。
这里就以insert 和 query 为例
1 |
|
创建完之后还需要在manifest文件中注册 才能被其他应用看到,通过
元素注册一个内容提供者
1 | <!-- |
关于临时权限标识 grantUriPermissions :true时,意味着该provider下所有数据均可被临时使用;false时,则反之,但可以通过设置
到这里 一个简单的内容提供者就创建完成了
ContentResolver
可以看做是客户端 与ContentProvider 对应 ,ContentProvider 负责提供数据操作接口 ,ContentResolver 可以调用ContentProvider的数据接口对数据进行操作
为了测试上面定义的ContentProvider ,另创建一个Module 进行读取
1 | private void read() { |
insert
1
2
3
4
5
6
7
8
9
10
11
12
private void insert() {
String name = etName.getText().toString();
String age = etAge .getText().toString();
ContentResolver resolver = getContentResolver();
String uriStr="content://com.skymxc.demo/student";
ContentValues cv = new ContentValues();
cv.put("name",name);
cv.put("age",age);
resolver.insert(Uri.parse(uriStr),cv);
}ContentResolver 还可以用来操作 短信,联系人,多媒体等 数据,这里写个读取短信的实例
读取短信的权限
1
2 ><uses-permission android:name="android.permission.READ_SMS"/>
>`
1 | /** |
ContentObserver
内容观察者,可以给某些数据注册观察者,当数据改变时做出有些操作
初始化观察者
1
2
3
4
5
6
7
8 private ContentObserver observer = new ContentObserver(new Handler()) {
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.e("MainActivity","======数据改变了===");
}
};
`注册观察者
1
2
3
4
5
6
7
8
9
Uri uri = Uri.parse("content://"+StudentProvider.AUTHORITY+"/student");
//为student 注册观察者
/**
* parameter1 观察的uri
* parameter2 uri的后代是否连带 观察
* parameter3 observer
*/
getContentResolver().registerContentObserver(uri,true,observer);内容改变时 通知观察者
系统会首先查找 uri 扫描(手机上)所有的注册的observer 的uri 匹配之后执行 observer的onChange 方法
1 |
|
当在另一个应用插入数据时 change()调用
1 E/MainActivity: ======数据改变了===