Android学习笔记---Content Providers

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_dictionaryprovider的授权,words是表的路径,content://代表了这个URI是一个Content URI.

Content Provider的创建

如果你希望自己的应用的数据能够被其他的应用访问,你可以创建自己的Content Provider给其他应用提供可访问的数据.下面是一个创建Content Provider的基本步骤:

  1. 设计数据的访问方式:
    • 文件数据(数据为图片,音频,视频等,会保存在应用私有空间)
    • 结构化数据(数据会保存在数据库)
  2. 定义一个继承于ContentProvider的类并复写相应的方法
  3. 定义provider的授权字符串,即自定义你的URI
  4. 添加其他可选服务
创建你的ContentProvider类

创建的ContentProvider的子类用于管理共享数据的访问,所有的访问形式最后都是由ContentResolver完成的,它可以调用ContentProvider的具体方法.
需要实现的抽象方法有:

  • query()
    获取provider提供的数据(条件提取)
  • insert()
    provider插入一行数据
  • update()
    更新provider现有的数据
  • delete()
    删除provider的数据(条件删除)
  • getType()
    返回Content URI的MIME类型
  • onCreate()
    初始化provider

关于更多创建Content Provider可查看官方文档