关于MIME TYPE描述

多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。

内容类型(Content-Type),这个头部领域用于指定消息的类型。一般以下面的形式出现。[type]/[subtype]

type有下面的形式。

  • Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
  • Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
  • Application:用于传输应用程序数据或者二进制数据;
  • Message:用于包装一个E-mail消息;
  • Image:用于传输静态图片数据;
  • Audio:用于传输音频或者音声数据;
  • Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。常用的subtype值如下所示:

  • text/plain(纯文本
  • text/html(HTML文档)
  • application/xhtml+xml(XHTML文档)
  • image/gif(GIF图像)
  • image/jpeg(JPEG图像)【PHP中为:image/pjpeg】
  • image/png(PNG图像)【PHP中为:image/x-png】
  • video/mpeg(MPEG动画)
  • application/octet-stream(任意的二进制数据)
  • application/pdf(PDF文档)
  • application/msword(Microsoft Word文件)
  • message/rfc822(RFC 822形式)
  • multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
  • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)
  • multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)

---------------------------------------------------------------------------------------------------------------------------

Android中MimeType的用途                 Intent-Filter中的<data>有一个mimeType . 它的作用是告诉Android系统本Activity可以处理的文件的类型。如设置为 “text/plain”表示可以处理“.txt”文件。 MimeTypeMap类                 MimeTypeMap类是专门处理mimeType的类。

--------------------------------------------------------------------------------------------------------------------------- 类说明以及方法如下:

[java] view plaincopy

 
  1. Class Overview
  2. Two-way map that maps MIME-types to file extensions and vice versa.
  3. Summary
  4. Public Methods
  5. String
  6. getExtensionFromMimeType(String mimeType)
  7. Return the registered extension for the given MIME type.
  8. static String
  9. getFileExtensionFromUrl(String url)
  10. Returns the file extension or an empty string iff there is no extension.
  11. String
  12. getMimeTypeFromExtension(String extension)
  13. Return the MIME type for the given extension.
  14. staticMimeTypeMap
  15. getSingleton()
  16. Get the singleton instance of MimeTypeMap.
  17. boolean
  18. hasExtension(String extension)
  19. Return true if the given extension has a registered MIME type.
  20. boolean
  21. hasMimeType(String mimeType)
  22. Return true if the given MIME type has an entry in the map.

MimeTypeMap类是单例模式的,既没有公有的构造方法。使用getSinglton()方法获得MimeTypeMap对象:
       MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();

示例:

[java] view plaincopy

 
  1. public class MainActivity extends Activity {
  2. private String tag = "MainActivity";
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. System.out.println(111);
  8. MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
  9. //MimeTypeMap中是否有txt的MimeType
  10. System.out.println(mimeTypeMap.hasExtension("txt"));
  11. System.out.println(mimeTypeMap.hasMimeType("text/html"));
  12. //获得txt文件类型的MimeType
  13. String extension = mimeTypeMap.getMimeTypeFromExtension("txt");
  14. System.out.println(extension);
  15. }
  16. }
---------------------------------------------------------------------------------------------------------------------------
在Android-4.2中,用MimeUtils类来管理所有支持的MimeType类型
[java] view plaincopy

 
  1. static {
  2. // The following table is based on /etc/mime.types data minus
  3. // chemical/* MIME types and MIME types that don't map to any
  4. // file extensions. We also exclude top-level domain names to
  5. // deal with cases like:
  6. //
  7. // mail.google.com/a/google.com
  8. //
  9. // and "active" MIME types (due to potential security issues).
  10. add("application/andrew-inset", "ez");
  11. add("application/dsptype", "tsp");
  12. add("application/futuresplash", "spl");
  13. add("application/hta", "hta");
  14. <span style="white-space:pre">  </span>...
---------------------------------------------------------------------------------------------------------------------------

如何使用:

实例代码为SDK自带的sample NotePad

startActivity(new Intent(Intent.ACTION_EDIT, uri));

其中uri为:content://com.google.provider.NotePad/notes/1

要启动的activity为

[html] view plaincopy

 
 
  1. <activity android:name="NoteEditor"
  2. android:theme="@android:style/Theme.Light"
  3. android:label="@string/title_note"
  4. android:screenOrientation="sensor"
  5. android:configChanges="keyboardHidden|orientation"
  6. >
  7. <!-- This filter says that we can view or edit the data of
  8. a single note -->
  9. <intent-filter android:label="@string/resolve_edit">
  10. <action android:name="android.intent.action.VIEW" />
  11. <action android:name="android.intent.action.EDIT" />
  12. <action android:name="com.android.notepad.action.EDIT_NOTE" />
  13. <category android:name="android.intent.category.DEFAULT" />
  14. <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
  15. </intent-filter>
  16. <!-- This filter says that we can create a new note inside
  17. of a directory of notes. -->
  18. <intent-filter>
  19. <action android:name="android.intent.action.INSERT" />
  20. <category android:name="android.intent.category.DEFAULT" />
  21. <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
  22. </intent-filter>
  23. </activity>

隐形Intent如何找到其对定的Activity?

1.系统从intent中获取道uri,得到了content://com.google.provider.NotePad/notes/1,

去掉开始的content:标识,得到com.google.provider.NotePad/notes/1,

然后获取前面的com.google.provider.NotePad,然后就到Androidmanfest.xml中

找到authorities为com.google.provider.NotePad的provider,

然后就加载这个content provider

[java] view plaincopy

 
 
  1. <provider android:name="NotePadProvider"
  2. android:authorities="com.google.provider.NotePad"
  3. />

2.然后调用NotePadProvider的gettype函数,并把上述URI传给这个函数,

函数返回URI所对应的类型,这里返回Notes.CONTENT_ITEM_TYPE,代表一条日志记录,

而CONTENT_ITEM_TYPE = " vnd.android.cursor.item/vnd.google.note "

[java] view plaincopy

 
 
  1. @Override
  2. public String getType(Uri uri) {
  3. switch (sUriMatcher.match(uri)) {
  4. case NOTES:
  5. return Notes.CONTENT_TYPE;
  6. case NOTE_ID:
  7. return Notes.CONTENT_ITEM_TYPE;
  8. default:
  9. throw new IllegalArgumentException("Unknown URI " + uri);
  10. }
  11. }

3.然后系统使用获得的" vnd.android.cursor.item/vnd.google.note "和

”android.intent.action.EDIT”到androidmanfest.xml中去找匹配的activity.

其中:android:authorities="com.google.provider.NotePad" 这段代码是指定此ContentProvider的authorities,

类似于activity中的IntentFilter中action的作用,说白了就是这个ContentProvider在一个

android系统中的名字。ContentProvider在这个应用程序启动以后,

就会永远存在android系统中,直到卸载这个应用程序。

Android MimeType的用法和几种类型的更多相关文章

  1. Android:Intent传递数据的几种类型和源码实现

    public class Intent implements Parcelable, Cloneable {   //... private String mAction; private Uri m ...

  2. Android MimeType的用途以及所有类型

    MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符 ...

  3. Android窗口系统第一篇---Window的类型与Z-Order确定

    Android的窗口系统是UI架构很重要的一部分,数据结构比较多,细节比较多.本篇文章主要介绍窗口相关数据结构和抽象概念理解,关于[窗口部分的博客]计划如下. 1.窗口Z-Order的管理 2.应用程 ...

  4. Android开发_Android数据的四种存储方式

    Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...

  5. Android中实现定时器的四种方式

    第一种方式利用Timer和TimerTask 1.继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); ...

  6. Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示

    Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家 ...

  7. 【转】Android播放音频MediaPlayer的几种方式介绍

    接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPl ...

  8. 【Android】播放音频的几种方式介绍

    接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPl ...

  9. Android源码中中一种常见的struct使用方法

    直接看例子: #include<iostream> #include<stdlib.h> using namespace std; struct Base{ int ba; i ...

随机推荐

  1. IIS7 + mysql + php + wordPress 在win7下部署

    最近在玩WordPress.wiki等开源平台的站点部署.通过一下实践和资料学习,为了以后少走弯路,觉得有必要把这个过程记录下来. 用到的东西: IIS服务: mysql; php; wordpres ...

  2. javascrit2.0完全参考手册(第二版) 第2章第1节 基本定义

    在这里,我们介绍一些将要使用的编程语言术语.表2-1提供了精确定义的概念. Table 2-1: 编程语言的基本术语 名字 定义 例子 Token令牌 最小的不可分割的词汇的语言单位.一个连续的字符序 ...

  3. [转]as3事件流机制彻底理解

    题记: 看过网上一些as3事件流的教程,觉得大多都讲得不甚清楚,让人不能直观的理解事件流.而这篇教程以将事件流过程比喻成捕鱼过程,形象简单. 在此基础上对于as3事件流总算有了全面的理解.事件流机制说 ...

  4. jquery插件之文字无缝向上滚动

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的无缝向上滚动特效,当鼠标移动到文字上时,向上滚动会停止, ...

  5. 《深入.NET平台和C# 编程》内测纠错记录

    1.  .NET框架的核心组件包括(BD)(选择两项) A.CTS   (通用类型系统) B.CLR   (公共语言运行时,.NET的基础) C.CLS   (公共语言规范) D.FCL   (框架类 ...

  6. 20145334赵文豪 《Java程序设计》第8周学习总结

    20145334赵文豪 <Java程序设计>第8周学习总结 教材学习内容总结 转眼间Java学习已经到了第八周,第十五章,需要我们学会使用日志API.了解国际化基础.认识JDK8增强功能等 ...

  7. Codeforces Round #346 (Div. 2) E F

    因为很久没有个人认真做题了 昨天晚上开了场虚拟cf来锻炼个人手速 选的是第一次做cf的场 那时候7出3还被hack...之后也没补题 这次做的时候顺便回忆了一下以前比赛的时候是怎么想的 发现经验还是很 ...

  8. 10/12 study

    [患者版]加号选择页: 这是四个TableView放在Scrollview上 上面是个xib封装的view 整体就是个scrollView,用xib摆上去的控件:   上面加了黄条,旧的控件统一修改y ...

  9. Spring定时任务的几种实现

    近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍. ...

  10. Android百分比布局支持库介绍——com.android.support:percent(转)

    转载自http://www.apkbus.com/forum.php?mod=viewthread&tid=244752&extra=&_dsign=0b699c42 在此之前 ...