Devel/data/contentproviders

From Android中文网

Android中文网(androidcn.net) 版权申明 : creativecommons licenses
Jump to: navigation, search

[编辑] 访问内容提供器

如果希望公开你的数据,你可以创建(或调用)一个内容提供器。这是一个可以从所有应用软件中存储和获取数据的对象。这也是穿越包共享数据的唯一方式——没有供所有包共享数据的公共存储区域。Android整合了基于多种公共数据类型(音频、视频、图像、个人通讯录信息等等)的内容提供器。你可以在provider包中看到许多Android自带的内容提供器。
实际数据储存的方式取决于它对接口的具体实现。但是所有内容提供器必须执行公共协议去请求数据和返回结果。内容提供器可以使用自定义帮助器功能使被开放的指定数据更容易被存储/获取。

本文档包括2篇与内容提供器有关的主题。
  • 使用内容提供器
  • 创建内容提供器

[编辑] 使用内容提供器存储和获取数据

这一节阐述你或其他任何人如何使用内容提供器存储和获取数据。Adnroid为广泛的数据类型开放了多种数据提供器,从音乐文件、图像文件到电话号码。你可以从有用的android.provider包中看到一个开放的内容提供器列表。
Android的内容提供器被客户端宽松地连接。每一个内容提供器开放一个唯一的字符串(URI)来识别将要操作的数据类型,客户端必须使用该字符串来存储和获取相应类型的数据。在《数据请求》章节中我们将对此做更多解释。
这一节请求下列内容
  • 请求数据
  • 制作请求
  • 请求的返还值
  • 请求文件
  • 读取获得的数据
  • 修改数据
  • 添加记录
  • 删除记录

[编辑] 数据请求

每一种内容提供器开放一个唯一公共URI(由ContentURI封装),它将被客户端用于从内容提供器请求/添加/更新/删除数据。URI有2种形式:一是指出该类型数据的所有值(例如所有个人通讯录),二是指出该类型数据的特定记录(例如乔•史密斯的联络信息)
  • content://contacts/people/ 从设备返回通讯录姓名列表
  • content://contacts/people/23 返回通讯录中ID=23的单行记录
当应用将请求发送到设备,要求获取整体数据(所有电话号码)或指定数据(鲍勃的电话号码)。Android将返回一个包含指定行的记录集游标。让我们来看一个假定的请求字符串和结果集(结果已被调整的更清晰一些)。
请求字符串 = content://contacts/people/
结果:
_ID _COUNT NUMBER NUMBER_KEY LABEL NAME TYPE
13 4 (425) 555 6677425 555 6677 California office Bully Pulpit Work
44 4 (212) 555-1234212 555 1234 NY apartment Alan Vain Home
45 4 (212) 555-6657212 555 6657 Downtown office Alan Vain Work
53 4 201.555.4433201 555 4433 Love Nest Rex Cars Home


注意请求字符串不是一个标准的SQL请求,URI字符串描述了返回数据的类型。这个URI由3部分组成:字符串“content://”;一个描述数据类型的段;一个可选的在特定内容范围内某特定记录的ID。这里有一些请求字符串的例子:
  • content://media/images 从设备返回所有图像的URI
  • content://contacts/people/ 从设备返回通讯录中所有姓名列表的URI
  • content://contacts/people/23 返回通讯录中ID=23的单行记录



未完待续
Personal tools