Android contentProvider  学习心得(1)

来源:互联网 发布:国家旅游局数据统计 编辑:程序博客网 时间:2024/06/05 07:16

ContentProvider的架构


ContentProivder总体而言类似于一下业务的抽象机制:网站,REST,Web 服务, 存储过程。与网站一样,设备上的每一个ContentProvider都会使用字符串注册本身,这个字符串类似于域名。但称为授权(authority).这个可以唯一标识的字符串是此ContentProvider可提供的一组URI的基础。一般来说,这类似于拥有域的网站提供一些URL来公开其文档或者是内容。
授权的注册在AndroidManifest.xml文件中进行:
<provider android:name="SomeProvider"android:authorities="com.you.company.SomeProvider"/>
授权之后ContentProvider就拥有了以授权前缀开头的URL:
content://com.your.company.SomeProvider/
ContentProvider还提供了一种类似于REST的URL来获取或操作数据。对于前面的注册,标识SomeProvider的数据库中某一项的集合的URL为:
content://com.your.company.SomeProvider/collection
如果在SomeProvider的Collection下还有具体的Item,那么的他的URL为:
content://com.you.company.SomeProvider/collection/#
ContentProvider还具有web的服务特征。ContentProvider通过其URI将内部的数据公开为服务。但是
ContentProvider的URL的数据不是具有特定类型的数据,这与基于SOAP的Web服务调用一样。此输出
更像来自于JDBC的结果集。尽管ContentProvider的概念上和JDBC相似,但是此输出并不是和ResultSet相同。

Android中Url的结构
Android中URL的结构类似于HTTP URI,但是是以content开头的,通常是一下的结构:
content://authority-name/path-segments1/path-segments2/...
在content之后,该URL包含了一个授权的唯一标识符,该标示符用于在提供程序注册标中定位ContentProvider。在授权后面
包含了是特定于每一个ContentProvider的路径部分。在路径部分中每一个 / 分隔开的就是一个路径片段。ContentProvider 的
java实现是在Java类或者是Java接口中总声明常量来完成此任务。而且,路径的第一部分可以指向一个对象的集合。而以后的
几段可以是指具体的项。

Android MIME类型的结构
就像网站返回给定的URL的MIME类型一样,ContentProvider还负责返回给指定URL的MIME类型。这使用户能够
灵活的查看数据。
MIME类型在Android中的工作方式与HTTP中类似。你向ContentProvider询问它支持的给定URL的MIME类型,ContentProvider返回
一个包含两个部分的字符串。该字符串根据标准的Web MIME约定URI的MIME的类型
例如web的MIME标准类型在一下网站可以看到:点击打开链接
根据MIME类型的规范,MIME类型包含两个部分:类型和子类型。如:
text/html
text/css

在IANA网站上可以看到自己注册的类型和子类型的完整列表:
已经注册的类型包括:
application
audio
image
message
model
multipart
text
video
每个主要的类型都包含子类型。但是如果供应商具有专用的数据格式,那么子类型名称将以vnd开头。

Android遵循类似的约定来定义MIME类型。Android MIME 类型中的vnd表示供应这些类型都是具有
非标准的供应商特定的形式。为了实现唯一性,android 使用了多个类似域规范的部分来进一步区分
类型和子类型。而且每个内容的Android MIME的类型都具有两种形式,一个是用于某一条记录的,
一个是用于多条记录的。
对于单条记录,MIME的类型对应成这样:
vnd.android.cursor.item/vnd.yourcompanyname.contenttype

而对于多条记录或者是行的集合,MIME的类型是类似于这样:
vnd.android.cursor.dir/vnd.youcompany.contenttype
MIME广泛存在于android中尤其是在Intent中,系统在Intent中根据数据的MIME类型来判断调用的活动。
MIME总是通过ContentProvider从他们的URI得到。记住一下三点:
  • 类型和子类型对于他们保存的数字都是唯一的。前面已经指出,类型基本已经确定,他本质上是一个目录项或者是单个项
  • 如果类型和子类型不是标准的,则需要在他们前面添加vnd
  • 他们通常针对具体需求添加命名空间




原创粉丝点击