1、Context提供了如下方法来获取ContentResolver对象。getContentResolver()一旦在程序中获得ContentResolver对象之后,接下来就可以调用ContentResolver的如下方法来操作数据。insert(Uri uri,ContentValues values):向Uri对应的ContentProvider中插入values对应数据。delete(Uri uri,String where,String[] selectionArgs):删除Uri对应的ContentProvider中where提交匹配的数据。update(Uri uri,ContentValues values,String where,String[] selectionArgs):更新Uri对应的ContentProvider中的where提交匹配的数据。query(Uri Uri,String[] projection,String selection,String[] selectionArgs,String sortOrder):查询Uri对应的ContentProvider中where提交匹配的数据。
2、ContentProvider与ContentResolver的关系
3、通过这个图可以看出,以指定Uri为标识,ContentResolver可以实现“间接调用”ContentProvider的CRUD方法:当A应用调用ContentResolver的insert()方法时,实际上相当于调用该Uri对应的ContentProvider(该ContentProvider属于B应用)的insert()方法。当A应用调用ContentResolver的update()方法时,实际上相当于调用了该Uri对应的ContentProvider(该ContentProvider属于B应用)的update()方法。当A应用调用ContentResolver的delete()方法时,实际上相当于调用了该Uri对应的ContentProvider(该ContentProvider属于B应用)的delete()方法。当A应用调用ContentResolver的query()方法时,实际上相当于调用了该Uri对应的ContentProvider(该ContentProvider属于B应用)的query方法。通过上面这种关系,即可实现让A应用访问。使用B应用底层的数据。
4、使用ContentProvider的步骤实现ContentProvider的子类,实现query(),insert(),update()和delete()等方法。
5、在AndroidManifest.xml文件中注册该ContentProvider,指定android:authorities属性。
6、<!-- 注册一个ContentProvider --><providerandroid:exported="true"android:name=".FirstProvider"android:authorities="org.test.providers.firstprovider"></provider>name:指定该ContentProvider的实现类的类名。authorities:指定该ContentProvider对应的Uri(相当于该ContentProvider分配一个域名)。android:exported:指定该ContentProvider是否准许其他应用调用。如果将该属性设置为false,那么该ContentProvider将不准许其他应用调用。