ContentProvider是实现不同应用程序间进行数据交换的标准API,ContentProvider以某种URI的形式对外提供数据,允许其他应用修改或访问数据。
凡是继承ContentProvider的类都需要实现以下几个方法
public class MyContentProvider extends ContentProvider {
private static UriMatcher matcher
= new UriMatcher(UriMatcher.NO_MATCH);
static{
matcher.addURI("注册时的uri", "uri后所跟的仔细目录", 1);//1为所对应的标识码
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case 1://根据mather里注册的进行判断
return "";//这里返回对应的mime类型。
default:
break;
}
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (matcher.match(uri)) {
case 1://根据mather里注册的进行判断
return null;//增啥改查根据匹配结果进行对应操作。
default:
break;
}
return null;
}
@Override
public boolean onCreate() {
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
}
}
分别对应的增删改,oncreate在provider第一次 使用时被调用。在注册contentprovider的时候需要绑定一个uri,其他应用程序在调用时只需要通过 ContentResovler调用对应的方法,就会执行具有相应uri的contentprovider的方法。
为了确定ContentProvider能够匹配什么样的Uri,Android提供了URiMather这个方法,所以在操作provider的时候可以根据URiMather匹配的结果来做对应的操作。
Android操作系统本身也提供了大量的ContentProvider,例如联系人,系统的多媒体信息等,开发者也可根据contentresovler对其进行操作以获得安卓内部的数据。
其Uri对应的一般是对应类中的常量,使用它们是大多需要添加权限。