Content Provider之MIME类型

什么是MIME类型-在把输出结果传送到浏览器上的时候,浏览器必须启动是党的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。

例如,架设你要传送一个Microsoft Excel文件到客户端。那么这时的MIME类型就是“application/vnd.ms-excel”。在大多数实际情况中,这个文件然后将传送给Execl来处理(假设我们设定Execl为处理特殊MIME类型的应用程序)。


每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。

常见的MIME类型超文本标记语言文本 .html,.html text/html 

普通文本 .txt text/plain RTF文本 .rtf application/rtf 

GIF图形 .gif image/gif 

JPEG图形 .ipeg,.jpg image/jpeg au

声音文件 .au audio/basic 

MIDI音乐文件 mid,.midi audio/midi,audio/x-midi 

RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio 

MPEG文件 .mpg,.mpeg video/mpeg 

AVI文件 .avi video/x-msvideo 

GZIP文件 .gz application/x-gzip 

TAR文件 .tar application/x-tar 

 Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。 由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。

服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义
​例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。 Content-type: text/html 注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。



学习到Content Provider,遇到自定义MIME类型vnd.android.cursor,一直看不懂是什么。其实vnd是vendor-specific的意思,下面是我好不容易找到的详细解释,分析给大家。

引用MIME类型Contentprovider可以返回标准的MIME类型或自定义的MIME类型字符串,或同时返回两者。

MIME类型具有以下形式:type/subtype。类型/子类型

例如,世人皆知的MIME类型text/html具有text类型和html子类型。如果provider从一个URI返回此类型,这表示面向此URI的查询将返回带有HTML标记的文本。

自定义的MIME字符串,也被叫做"vendor-specific"MIME类型,具有更复杂的类型和子类型值,此类型的值总是这样

vnd.android.cursor.dir。用于多行,或这样

vnd.android.cursor.item。用于单行。

而子类型是每个provider都不相同的。Android内置的provider通常具有一个间单的字类型。例如,当联系人应用为一个电话号码创建一个新行时,它为新行设置下面的MIME类型:

vnd.android.cursor.item/phone_v2

可以看到子类型的值只是简单的phone_v2.

其它provider开发者可能基于provider的authority和表名字创建他们自己的子类型式样。例如,假设一个provider含有列车时刻表,provider的authority是com.example.trains,并且它包含三个表:线路1,线路2,线路3。在URI的响应中,

content://com.example.trains/Line1。指向线路1表,provider返回对应的MIME类型为:

vnd.android.cursor.dir/vnd.example.line1

而content URI:content://com.example.trains/Line2/5。指向线路2表的第5行,provider返回的对应的MIME类型为:

vnd.android.cursor.item/vnd.example.line2

大多数contentproviders定义了契约类来包含它们所用到的MIME类型。例如,联系人Provider的契约类ContactsContract.RawContacts,定义了常量CONTENT_ITEM_TYPE,它对应于一行原始的联系人数据

posted @ 2015-11-29 16:27  窗外临街  阅读(363)  评论(0编辑  收藏  举报