Content Provider是Android四大组件之一,它是存取和访问数据的一个统一的接口.
Content Provider基本知识
通过应用Context中的ContentResolver对象与provider对象进行通信请求数据.
Android内部提供了常用的provider,如视频,音频,图像和通讯录信息等,所有的应用都可访问这些数据.Content Provider是通过表的方式对数据进行存储访问的.
访问Provider
我们通过ContentResolver来对ContentProvider中的数据进行访问,ContentResolver对象提供了基本的CRUD等方法对数据进行操作.通过ContentResolver.query()可对数据进行操作,下面的表格列出了query(Uri,projection,selection,selectionArgs,sortOrder)函数中的参数与SQL SELECT语句的对应关系.
query()的参数 |
SELECT关键字/参数 |
描述 |
|---|---|---|
| Uri | From table_name | Uri对应provider中的表名 |
| projection | col,col,col,… | projection是一个对应表中提取的一行数据所包含的列的一个数组 |
| selection | WHERE col = value | selection表示对提取行的数据的约束变量 |
| selectionArgs | selection约束变量的值,若没有约束变量则使用?占位符 |
|
| sortOrder | ORDER BY col,col… | 提取数据的排序方式 |
Content URI
Content Provider使用得到路径是采用Content URI对表进行访问,每个表都有相应的路径,如用户词典的单词:1
content://user_dictionary/words
user_dictionary是provider的授权,words是表的路径,content://代表了这个URI是一个Content URI.
Content Provider的创建
如果你希望自己的应用的数据能够被其他的应用访问,你可以创建自己的Content Provider给其他应用提供可访问的数据.下面是一个创建Content Provider的基本步骤:
- 设计数据的访问方式:
- 文件数据(数据为图片,音频,视频等,会保存在应用私有空间)
- 结构化数据(数据会保存在数据库)
- 定义一个继承于
ContentProvider的类并复写相应的方法 - 定义
provider的授权字符串,即自定义你的URI - 添加其他可选服务
创建你的ContentProvider类
创建的ContentProvider的子类用于管理共享数据的访问,所有的访问形式最后都是由ContentResolver完成的,它可以调用ContentProvider的具体方法.
需要实现的抽象方法有:
- query()
获取provider提供的数据(条件提取) - insert()
向provider插入一行数据 - update()
更新provider现有的数据 - delete()
删除provider的数据(条件删除) - getType()
返回Content URI的MIME类型 - onCreate()
初始化provider
关于更多创建Content Provider可查看官方文档