contentprovider 可以提供应用的数据供其它的应用使用。同时也可以利用它访问其它的应用。比如访问手机短信、手机Music、联系人等等。优点在于提供了公共的、统一的数据访问接口。
也就是说 别的应用调用 固定的都有增删改查方法
ContentProvider的使用大致可以分为下面几个部分:
首先我们需要定义一个类继承ContentProvider
public class PersonContentProvider extends ContentProvider
(1)在类中定义一个静态代码块,实现UIR等的初始化设置
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
// 添加一些uri(分机号)
uriMatcher.addURI(AUTHORITY, "person/insert", PRESON_INSERT_CODE);
}
"person/insert" 这个person名字一般是数据库的名字,当然用其它名字也可以。后面的insert一般取方法名字。
(2)实现insert方法 (首先要通过URI匹配权限是否正确)然欧才能对数据库进行操作
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case PRESON_INSERT_CODE:
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()) {
long id = db.insert("person", null, values);
db.close();
return ContentUris.withAppendedId(uri, id);
}
break;
default:
throw new IllegalArgumentException("uri不匹配: " + uri);
}
return null;
}
(3)manifester中注册使用权限
<provider
android:name=".providers.PersonContentProvider"
android:authorities="包名.PersonContentProvider"
android:readPermission="aa.bb.cc.read"
android:writePermission="aa.bb.cc.write" >
</provider>
第三方应用使用数据的时候:
(1)manifester中权限声明
<uses-permission android:name="aa.bb.cc.read"/>
<uses-permission android:name="aa.bb.cc.write"/>
(2)创建内容提供者对象。调用公共Insert方法,插入对象。根据URI查找对象所在的位置
Uri uri = Uri.parse("content://包名.PersonContentProvider/person/insert");
// 内容提供者访问对象
ContentResolver resolver = getContext().getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "fengjie");
values.put("age", 90);
uri = resolver.insert(uri, values);