让自己的数据和其他应用程序共享有两种方式:
1. 创建一个属于自己的Content Provider
2. 将自己的数据添加到一个已经存在的Content Provider中(相同的数据类型和具有写入该Content Provider的权限)
对于Content Provider,最重要的就是数据模型(data model)和URI 。
1.数据模型
Content Provider将其存储的数据以数据表的形式提供给访问者,在数据表中每一行为一条记录,每一列为具有特定类型和意义的数据。每一条数据记录都包括一个“_ID”数据字段,该字段唯一标识一条数据。
2.URI
将其分为A,B,C,D 4个部分:
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;
B:URI的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在<provider> 元素的 authorities属性中说明:
<provider name=”.TransportationProvider” authorities=”com.example.transportationprovider” . . . >
C:路径,Content Provider使用这些路径来确定当前需要生什么类型的数据,URI中可能不包括路径,也可能包括多个;
D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表示返回全部;
由于URI通常比较长,而且有时候容易出错,切难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串,例如:People.CONTENT_URI
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;
B:URI的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在<provider> 元素的 authorities属性中说明:
<provider name=”.TransportationProvider” authorities=”com.example.transportationprovider” . . . >
C:路径,Content Provider使用这些路径来确定当前需要生什么类型的数据,URI中可能不包括路径,也可能包括多个;
D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表示返回全部;
由于URI通常比较长,而且有时候容易出错,切难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串,例如:People.CONTENT_URI
ContentResolver介绍说明
访问Content Provider中的数据主要通过ContentResolver对象。查询一个Content Provider需要掌握如下的信息:
唯一标识Content Provider的URI
需要访问的数据字段的名称
该数据字段的数据类型
提示: 如果需要访问特定的某条数据记录,只需该记录的ID 即可。
ContentResolver的主要接口,如下:
返回值 | 函数声明 |
final Uri | insert(Uri url, ContentValues values)Inserts a row into a table at the given URL. |
final int | delete(Uri url, String where, String[] selectionArgs)Deletes row(s) specified by a content URI. |
final Cursor | query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)Query the given URI, returning a Cursor over the result set. |
final int | update(Uri uri, ContentValues values, String where, String[] selectionArgs)Update row(s) in a content URI. |
获取ContentResolver :
ContentResolver cr = getContentResolver();
ContentProvider负责:
- 组织应用程序的数据;
- 向其他应用程序提供数据;
- 获取ContentProvider提供的数据;
- 修改/添加/删除更新数据等;
在提供数据表字段中包含一个ID,在创建表时INTEGER PRIMARY KEY AUTOINCREMENT标识此ID字段。
可参考: