自定义ContentProvider用法
一、 简介
ContentProvider是android的四大基本组件之一,作用是为应用程序提供数据。ContentProvider封装数据,通过ContentResolver接口向应用程序提供数据。只有当需要向多个应用程序提供数据时,才建议你使用CotentProvider。如果你的数据只需要供当前应用程序使用,你可以直接使用SQLiteDatabase。
通过ContentResolver进行请求时,系统会检测传过来的Uri,把Uri传给用authority注册过的ContentProvider,ContentProvider执行请求的操作,并返回结果。
二、 使用步骤
1. 原始数据存储(通常用SQLite存储);
2.
定义一个具体实现类,实现ContentProvider接口,并实现它的抽象方法;
3. 在Manifest中定义provider的
authority;
4. 在其他应用程序中,通过
ContentResolver进行数据请求。
三、 可能用到的几个类的说明
1. ContentProvider(直接操作数据)
Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。
ContentProvider接口有以下抽象方法:
(1)public boolean onCreate() 创建时调用
(2)public Cursor query(Uri, String[], String, String[], String) 查询
(3)public Uri insert(Uri, ContentValues) 添加
(4)public int update(Uri, ContentValues, String, String[]) 更新
(5)public int delete(Uri, String, String[]) 删除
(6)public String getType(Uri) 用于返回指定的Uri中的数据的MIME类型
2. ContentResolver(在需要获取共享数据的应用程序中,通过执行以下几个方法,触发ContenProvider的操作)
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。
ContentResolver有与ContentProvider抽象方法对应的几个方法:
(1)public Cursor query(Uri, String[],String, String[], String) 查询
(2)public Uri insert(Uri,ContentValues) 添加
(3)public int update(Uri,ContentValues, String, String[]) 更新
(4)public int delete(Uri, String,String[]) 删除
3. URI
URI,每一个Content Provider 都对外提供一个能够唯一标识自己数据集(data set)的公开URI, 如果一个Content Provider管理多个数据集,其将会为每个数据集分配一个独立的URI。所有的Content Provider 的URI 都以“content://” 开头,其中“content:”是用来标识数据是由Content Provider管理的 schema(模式)。下面是一个Uri的组成部分:
系统解析ContentResolver发送的请求中的Uri,将数据查询请求发送到对应的ContentProvider。
4. UriMatcher
用于匹配Uri,它的用法如下:
(1)首先把你需要匹配Uri路径全部给注册上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = newUriMatcher(UriMatcher.NO_MATCH);
a.//添加需要匹配uri,如果匹配就会返回匹配码
uriMatcher.addURI(“com.example.contentprovidertest.provider”,“student”, 1);
b.//#号为通配符
uriMatcher.addURI(“com.example.contentprovid