目录
ContentProvider是Android的四大组件之一
主要用于在不同的应用程序之间实现数据共享的功能
一、相关介绍
1、URI(通用资源标识符 Universal Resource Identifer)
作用:代表数据操作的地址,每一个ContentProvider发布数据时都会有唯一的地址。
它主要由两部分组成:authority和path。authority是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。path则是用于对同一应用程序中不同的表做区分的,通常都会添加到authority的后面。
一个完整的URI写法为:
content://com.example.app.provider/table1
//这就表示调用方期望访问的是com.example.app这个应用的table1表中id为1的数据。
content://com.example.app.provider/table1/1
内容URI的格式主要有以上两种。
以路径结尾就表示期望访问该表中所有的数据;以id结尾就表示期望访问该表中拥有相应id的数据。
可以使用通配符的方式来分别匹配这两种格式的内容URI,规则如下。
*:表示匹配任意长度的任意字符。
#:表示匹配任意长度的数字。
2、MIME数据类型
作用:指定某个扩展名的文件用某种应用程序来打开.
一个内容URI所对应的MIME字符串主要由3部分组成,Android对这3个部分做了如下格式规定。
1、必须以vnd开头
2、如果内容URI以路径结尾,则后接android.cursor.dir/;如果内容URI以id结尾,则后接android.cursor.item/
3、最后接上<authority>.<path>
如:
//
"vnd.android.cursor.dir/com.android.contentprovidertest.books"
3、UriMatcher
作用
1)在ContentProvider 中注册URI
2)根据 URI 匹配 ContentProvider 中对应的数据表
//步骤一:创建UriMatcher对象
private static UriMatcher uriMatcher;
//步骤二:在ContentProvider中注册URI
//匹配成功后的匹配码
private static final int MATCH_CODE = 100;
private static final int MATCH_CODE_ID = 200;
//步骤三:创建静态代码块
static {
//实例化UriMatcher对象
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//可以实现匹配URI的功能
//参数1:authority 参数2:路径 参数3:URI与给定组件匹配成功后的匹配码
uriMatcher.addURI(AUTHORITY, "books", MATCH_CODE);
uriMatcher.addURI(AUTHORITY, "books/#", MATCH_CODE_ID);
}
//步骤四:根据URI匹配CODE,从而匹配ContentProvider中相应的资源
@Override
public String getType(Uri uri) {
// at the given URI.
int match = uriMatcher.match(uri);
switch (match) {
case MATCH_CODE:
Log.d("text", "getType: MATCH_CODE");
return BOOKS_TYPE;
case MATCH_CODE_ID:
Log.d("text", "getType: MATCH_CODE_ID");
return BOOKS_TYPE_ID;
default:
Log.d("text", "getType: default");
return null;
}
}
4、ContentProvider
1)主要方法
// ContentProvider创建后或打开系统后其它进程第一次访问该ContentProvider时由系统进行调用<