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
可查看官方文档