ContentProvider是用来实现应用程序之间数据共享的类。当需要进行数据共享时,一般利用ContentProvider为需要共享的数据定义一个URI,然后其他应用程序通过Context获得ContentResolver并将数据的URI传入即可。

Android系统已经为一些常用的数据创建了ContentProvider,这些ContentProvider都位于android.provider下,只要有相应的权限,自己开发的应用程序便可轻松地访问这些数据。

对于ContentProvider,最重要的就是数据模型(data model)和URI,接下来分别对其进行介绍。

数据模型

ContentProvider为所有需要共享的数据创建一个数据表,在表中,每一行表示一条记录,而每一列代表某个数据,并且其中每一条数据记录都包含一个名为“_ID”的字段类标识每条数据。

URI

每个ContentProvider都会对外提供一个公开的URI来表示自己的数据集,当管理多个数据集时,将会为每个数据集分配一个独立的URI,所有的URI都以“content://”开头。

需要注意的是,使用ContentProvider访问共享资源时,需要为应用程序添加适当的权限才可以。权限为“<users-permission android:name=”android.permission.READ_CONTACTS”/>“。

接下来介绍使用ContentProvider来访问手机中电话本的方法,步骤如下。

1)向电话本中添加若干条联系人信息。

2)为应用程序添加ContentProvider的访问权限。

3)通过getContentResolver()方法得到ContentResolver对象。

4)调用ContentResolver类的query()方法查询数据,该方法会返回一个Cursor对象。

5)对得到的Cursor对象进行分析,得到需要的数据。

6)调用Cursor类的close()方法将Cursor对象关闭。

除了以上介绍的使用系统的ContentProvider外,还可以自己创建一个ContentProvider对象。扩展ContentProvider类还需要实现6个抽象方法,如下表所示。

方法名 描述
Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) 将查询的数据封装成Cursor对象返回
Uri insert(Uri uri,ContentValues values) 向ContentProvider中插入数据
int update(Uri uri,ContentValues values,String selection,String[] selectionArgs) 更新ContentProvider中已经存在的数据
int delete(Uri uri,String selection,String[] selectionArgs) 删除ContentProvider中的某条数据
String getType(Uri uri) 获得ContentProvider中数据的(MIME)类型
boolean onCreate() ContentProvider启动时被调用的方法

作者:银月莲
出处:http://www.cnblogs.com/moonsilvering
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,包括文章,代码,图片等本站内所有资源,否则保留追究法律责任的权利。

posted on 2011-12-26 23:19  银月莲  阅读(344)  评论(0编辑  收藏  举报