Android MimeType的用法和几种类型
关于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的类。
--------------------------------------------------------------------------------------------------------------------------- 类说明以及方法如下:
- Class Overview
- Two-way map that maps MIME-types to file extensions and vice versa.
- Summary
- Public Methods
- String
- getExtensionFromMimeType(String mimeType)
- Return the registered extension for the given MIME type.
- static String
- getFileExtensionFromUrl(String url)
- Returns the file extension or an empty string iff there is no extension.
- String
- getMimeTypeFromExtension(String extension)
- Return the MIME type for the given extension.
- staticMimeTypeMap
- getSingleton()
- Get the singleton instance of MimeTypeMap.
- boolean
- hasExtension(String extension)
- Return true if the given extension has a registered MIME type.
- boolean
- hasMimeType(String mimeType)
- Return true if the given MIME type has an entry in the map.
MimeTypeMap类是单例模式的,既没有公有的构造方法。使用getSinglton()方法获得MimeTypeMap对象:
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
示例:
- public class MainActivity extends Activity {
- private String tag = "MainActivity";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- System.out.println(111);
- MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
- //MimeTypeMap中是否有txt的MimeType
- System.out.println(mimeTypeMap.hasExtension("txt"));
- System.out.println(mimeTypeMap.hasMimeType("text/html"));
- //获得txt文件类型的MimeType
- String extension = mimeTypeMap.getMimeTypeFromExtension("txt");
- System.out.println(extension);
- }
- }
- static {
- // The following table is based on /etc/mime.types data minus
- // chemical/* MIME types and MIME types that don't map to any
- // file extensions. We also exclude top-level domain names to
- // deal with cases like:
- //
- // mail.google.com/a/google.com
- //
- // and "active" MIME types (due to potential security issues).
- add("application/andrew-inset", "ez");
- add("application/dsptype", "tsp");
- add("application/futuresplash", "spl");
- add("application/hta", "hta");
- <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为
- <activity android:name="NoteEditor"
- android:theme="@android:style/Theme.Light"
- android:label="@string/title_note"
- android:screenOrientation="sensor"
- android:configChanges="keyboardHidden|orientation"
- >
- <!-- This filter says that we can view or edit the data of
- a single note -->
- <intent-filter android:label="@string/resolve_edit">
- <action android:name="android.intent.action.VIEW" />
- <action android:name="android.intent.action.EDIT" />
- <action android:name="com.android.notepad.action.EDIT_NOTE" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
- </intent-filter>
- <!-- This filter says that we can create a new note inside
- of a directory of notes. -->
- <intent-filter>
- <action android:name="android.intent.action.INSERT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
- </intent-filter>
- </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
- <provider android:name="NotePadProvider"
- android:authorities="com.google.provider.NotePad"
- />
2.然后调用NotePadProvider的gettype函数,并把上述URI传给这个函数,
函数返回URI所对应的类型,这里返回Notes.CONTENT_ITEM_TYPE,代表一条日志记录,
而CONTENT_ITEM_TYPE = " vnd.android.cursor.item/vnd.google.note "
- @Override
- public String getType(Uri uri) {
- switch (sUriMatcher.match(uri)) {
- case NOTES:
- return Notes.CONTENT_TYPE;
- case NOTE_ID:
- return Notes.CONTENT_ITEM_TYPE;
- default:
- throw new IllegalArgumentException("Unknown URI " + uri);
- }
- }
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的用法和几种类型的更多相关文章
- Android:Intent传递数据的几种类型和源码实现
public class Intent implements Parcelable, Cloneable { //... private String mAction; private Uri m ...
- Android MimeType的用途以及所有类型
MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符 ...
- Android窗口系统第一篇---Window的类型与Z-Order确定
Android的窗口系统是UI架构很重要的一部分,数据结构比较多,细节比较多.本篇文章主要介绍窗口相关数据结构和抽象概念理解,关于[窗口部分的博客]计划如下. 1.窗口Z-Order的管理 2.应用程 ...
- Android开发_Android数据的四种存储方式
Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...
- Android中实现定时器的四种方式
第一种方式利用Timer和TimerTask 1.继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); ...
- Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示
Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家 ...
- 【转】Android播放音频MediaPlayer的几种方式介绍
接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPl ...
- 【Android】播放音频的几种方式介绍
接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPl ...
- Android源码中中一种常见的struct使用方法
直接看例子: #include<iostream> #include<stdlib.h> using namespace std; struct Base{ int ba; i ...
随机推荐
- Linux下memcached安装和启动方法
Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...
- struts2中拦截器与过滤器的区别
1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器. 3.拦截器只能对Action请求起作用,而过滤器则可以对几乎 ...
- jquery插件之文字间歇自动向上滚动
该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的文字间歇向上滚动特效,当鼠标移动到文字上时,向上滚动会停 ...
- tomcat 设置根目录访问
from http://nj-apple-tree.iteye.com/blog/1635953 1,设置跟路径时,三种方式 在Tomcat默认安装后,tomcat的主目录是webapps/root目 ...
- [CareerCup] 16.5 Semphore 信号旗
16.5 Suppose we have the following code:public class Foo { public Foo() { . . . } public void first( ...
- Many2one类型的fields Compute得到的值 搜索
v8 默认情况下compute的值不存储于数据库中,在高级搜索中也不可以进行搜索 想要对这种类型的值搜索,需要在field的定义中添加search参数,在search的函数中编写搜索逻辑. 例子: r ...
- jq最新前三篇文章高亮显示
/*---------最新前三篇文章高亮显示-------------*/ function latest(){ var color_arr=new Array( "blue", ...
- zju(11)在IAR中移植ucos到msp430
准备材料 1.在TI官网上下载430的固件库,我用的是msp430f5528的板子,下载的是F5xx_F6xx_Core_Lib 地址http://www.ti.com/tool/msp-exp430 ...
- 笔记本(WIN7|XP)发射wifi信号 当无线路由使用
Windows7系统 第一步:是你的电脑上要有两个网卡一个有线一个无线(笔记本应该都有)台式机可以考虑买个USB无线网卡(50左右) 第二步:win+R CMD 输入(只输入红色部分) netsh ...
- cms修改栏目单页样式错位调整
if (dt.Rows[0]["ClassTemplet"].ToString().Trim() == "") { rows_key.Style.Value = ...