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的类。

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

  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();

示例:

  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类型
  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为

  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

  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 "

  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系统中,直到卸载这个应用程序。

参考网页:http://www.cnblogs.com/newcj/archive/2011/08/10/2134305.html

参考网页:http://blog.csdn.net/janronehoo/article/details/7514883

参考网页:http://blog.csdn.net/txj8612/article/details/8783998

Android MimeType的用途以及所有类型的更多相关文章

  1. Android MimeType的用法和几种类型

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

  2. Android:mimeType

    接收从其他应用传过来的数据,要用到清单文件 <activity android:name="com.terry.myActivity2" android:label=&quo ...

  3. 【整理】Android中EditText中的InputType类型含义与如何定义( 转 )

    转自:[整理]Android中EditText中的InputType类型含义与如何定义 用到的时候查到了这篇文章觉得很不错,就在此记录下. [背景] 经过一些Android中EditText方面的折腾 ...

  4. android Bundle savedInstanceState用途

    经常会出现用户按到home键,退出了界面,或者安卓系统意外回收了应用的进程,这种情况下,使用Bundle savedInstanceState就可以用户再次打开应用的时候恢复的原来的状态 (以下转自: ...

  5. android十六进制颜色代码转换为int类型数值

    android开发中将十六进制颜色代码转换为int类型数值方法:Color.parseColor("#00CCFF")返回int数值;

  6. 【转】Android中EditText中的InputType类型含义与如何定义

    原文网址:http://www.crifan.com/summary_android_edittext_inputtype_values_and_meaning_definition/ 经过一些And ...

  7. Android attrs.xml文件中属性类型format值的格式

    "reference" //引用 "color" //颜色 "boolean" //布尔值 "dimension" // ...

  8. xamarin android如何将Java.Lang.Object类型转成C#类型

    问题起源 其实这个标题也可以换一个更准确一点,因为我遇到的问题是: xamarin android中的Class继承了Java.Lang.Object ,将json序列化成c#类型时发现无法赋值,序列 ...

  9. Android开发 Context详解与类型 转载

    转载地址:https://blog.csdn.net/guolin_blog/article/details/47028975 个人总结: Context分为 activity : activity其 ...

随机推荐

  1. 【高精度】【找规律】Gym - 101243B - Hanoi tower

    题意:给你一个经典的汉诺塔递归程序,问你最少几步使得三个柱子上的盘子数量相同.(保证最开始盘子数量可以被3整除) 规律:ans(n)=2^(2*n/3-1)+t(n/3). t(1)=0. t(n)= ...

  2. Java并发(一):多线程干货总结

    一.进程 线程 进程:一个进程来对应一个程序, 每个进程对应一定的内存地址空间,并且只能使用它自己的内存空间,各个进程间互不干扰. 进程保存了程序每个时刻的运行状态,这样就为进程切换提供了可能.当进程 ...

  3. uva1632 (区间DP)

    题意:有n个宝藏,在x轴上,每个宝藏在某个时间会消失,问最少吃完所有宝藏的时间是多少,否则输出no solution 分析:区间DP,f[i][j][01]代表i到j区间内的全部吃完,停留在左/右端, ...

  4. mac 下做csv文件的读取与生成的 遇到的坑

    mac下每次读取就把所有的行都读出来了,其实windows下是正常的. 错误原因是逗号的识别方式不对

  5. PHP数组和数据结构(上)

    1.数组的声明 两种方法: 直接给数组元素赋值 使用array()函数声明 说明: (1)索引数组的下标可以是非连续的值,只要在初始化时指定非连续的下标值即可 如果指定的下标值已经声明过,则属于对变量 ...

  6. 几本推荐的Java书

    一.<深入理解Java虚拟机:JVM高级特性与最佳实践> 如果你不满足于做一个只会写if…else…的Java程序员,而是希望更进一步,我随便举几个例子吧: 1.了解Java代码的底层运行 ...

  7. TJSONTableObject跨平台解析JSON

    TJSONTableObject跨平台解析JSON USES SynCrossPlatformJSON TSQLRecordPeoplePersistent = class(TPersistent) ...

  8. 【Thumbnailator】java 使用Thumbnailator实现等比例缩放图片,旋转图片等【转载】

    Thumbnailator概述:     Thumbnailator是与Java界面流畅的缩略图生成库.它简化了通过提供一个API允许精细的缩略图生成调整生产从现有的图像文件的缩略图和图像对象的过程, ...

  9. UITabBarController 和 UINavigationController 的详解

    首先得搞清这两个控制器之间的层级关系,我们直接看官网给的图,如下所示: 从这张图可以看到:最右边的Assembled views是呈现给用户的界面,它左边的Window是最底层的窗口,重点来了,再往左 ...

  10. Windows Server 2008 远程桌面连接拒绝

    (1)远程连接的时候在本地用户名添加域名 现象:在Windows2008R2配置成域控制器前,还没有安装AD,管理员Admistrator以及新创建的用户(创建的时候将该用户加入远程桌面管理组),发现 ...