作用:
向其他应用提供数据,数据的存储方式可以是数据库、XML文件、普通文件等形式,但内容提供者负责把数据对外进行提供;统一数据访问方式;
URI:
统一资源标识符,用来标识某一资源;
URI组成:
scheme:类似于HTTP,在android规定为content://
authority:主机名,类似于HTTP中的域名
path:数据,类似于HTTP中的请求路径
UriMatcher:用于匹配 Uri
static final int CODE = 1;
static final int CODES = 2;
static final String AUTHORITY = “com.dongzi”;
static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY,”person”,CODE);//匹配context://com.dongzi/person,返回1
uriMatcher.addURI(AUTHORITY,”person/#”,CODES);//匹配context://com.dongzi/person/数字,返回2
ContentUris:用于获取Uri路径后面的ID部分,常用方法如下
Uri uri = Uri.parse(“content://”+AUTHORITY+”/persion”);
Uri newUri = ContentUris.withAppendedId(uri,1234);//生成后的URI是在/persion后追加/1234
long id = ContentUris.parseId(Uri.parse(“content://www.dongzi/person/1234”));//得到1234
ContentResolver:提供的方法如下
delete(Uri,String,String[]) getType(Uri) insert(Uri,ContentValues) onCreate()
query(Uri,String[],String,String[]) update(Uri,ContentValues,String,String[])
ContentProvider开发步骤:
第一步:继承ContentProvider并重写对应方法onCreate/insert/delete/update/query/
getType,其中getType如果操作的数据属于集合类型,那么MIME类型应该以”vnd.android.cursor.dir/”开头;getType如果操作的数据属于非集合,那么MIME类型应该以”vnd.android.cursor.item/”开头;
第二步:在清单配置文件中进行配置
第三步:在ContentProvider发生数据变化需要通知ContentResolver时
getContext().getContentResolver().notifyChange(uri,null);
第四步:注册监听器,观察ContentProvider数据变化
getContentResolver().registerContentObserver(
Uri.parse(“content://com.dongzi/person”),
true,
new ContentObserver(new Handler){
Public void onChange(){
此处进行相应的业务处理
}
}
);