背景介绍:

MIME:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

在Android中通过文件的MIME类型来判断有哪些应用程序可以处理这些文件,并使用其中的某一个应用程序(如果有多个可选的应用程序,则用户必须指定一个)处理之。

我在写android资源管理器(文件浏览器)的时候,希望能在资源管理器的中实现打开文件的操作,此时就需要用到文件的MIME类型。

---------------------------------------- 背景分割线 -----------------------------------------

实现方法:

/**
 * 根据文件后缀名获得对应的MIME类型。
 * @param file
 */
private String getMIMEType(File file)
{
    String type="*/*";
    String fName=file.getName();
    //获取后缀名前的分隔符"."在fName中的位置。
    int dotIndex = fName.lastIndexOf(".");
    if(dotIndex < 0){
        return type;
    }
    /* 获取文件的后缀名 */
    String end=fName.substring(dotIndex,fName.length()).toLowerCase();
    if(end=="")return type;
    //在MIME和文件类型的匹配表中找到对应的MIME类型。
    for(int i=0;i<MIME_MapTable.length;i++){
        if(end.equals(MIME_MapTable[i][0]))
            type = MIME_MapTable[i][1];
    }
    return type;
}
/**
 * 打开文件
 * @param file
 */
private void openFile(File file){
    //Uri uri = Uri.parse("file://"+file.getAbsolutePath());
    Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    //设置intent的Action属性
    intent.setAction(Intent.ACTION_VIEW);
    //获取文件file的MIME类型
    String type = getMIMEType(file);
    //设置intent的data和Type属性。
    intent.setDataAndType(/*uri*/Uri.fromFile(file), type);
    //跳转
    startActivity(intent);    
}

现在就差一个MIME类型和文件类型的匹配表了。

"文件类型——MIME类型"的匹配表:

//建立一个MIME类型与文件后缀名的匹配表
private final String[][] MIME_MapTable={
    //{后缀名,    MIME类型}
    {".3gp",    "video/3gpp"},
    {".apk",    "application/vnd.android.package-archive"},
    {".asf",    "video/x-ms-asf"},
    {".avi",    "video/x-msvideo"},
    {".bin",    "application/octet-stream"},
    {".bmp",      "image/bmp"},
    {".c",        "text/plain"},
    {".class",    "application/octet-stream"},
    {".conf",    "text/plain"},
    {".cpp",    "text/plain"},
    {".doc",    "application/msword"},
    {".exe",    "application/octet-stream"},
    {".gif",    "image/gif"},
    {".gtar",    "application/x-gtar"},
    {".gz",        "application/x-gzip"},
    {".h",        "text/plain"},
    {".htm",    "text/html"},
    {".html",    "text/html"},
    {".jar",    "application/java-archive"},
    {".java",    "text/plain"},
    {".jpeg",    "image/jpeg"},
    {".jpg",    "image/jpeg"},
    {".js",        "application/x-javascript"},
    {".log",    "text/plain"},
    {".m3u",    "audio/x-mpegurl"},
    {".m4a",    "audio/mp4a-latm"},
    {".m4b",    "audio/mp4a-latm"},
    {".m4p",    "audio/mp4a-latm"},
    {".m4u",    "video/vnd.mpegurl"},
    {".m4v",    "video/x-m4v"},    
    {".mov",    "video/quicktime"},
    {".mp2",    "audio/x-mpeg"},
    {".mp3",    "audio/x-mpeg"},
    {".mp4",    "video/mp4"},
    {".mpc",    "application/vnd.mpohun.certificate"},        
    {".mpe",    "video/mpeg"},    
    {".mpeg",    "video/mpeg"},    
    {".mpg",    "video/mpeg"},    
    {".mpg4",    "video/mp4"},    
    {".mpga",    "audio/mpeg"},
    {".msg",    "application/vnd.ms-outlook"},
    {".ogg",    "audio/ogg"},
    {".pdf",    "application/pdf"},
    {".png",    "image/png"},
    {".pps",    "application/vnd.ms-powerpoint"},
    {".ppt",    "application/vnd.ms-powerpoint"},
    {".prop",    "text/plain"},
    {".rar",    "application/x-rar-compressed"},
    {".rc",        "text/plain"},
    {".rmvb",    "audio/x-pn-realaudio"},
    {".rtf",    "application/rtf"},
    {".sh",        "text/plain"},
    {".tar",    "application/x-tar"},    
    {".tgz",    "application/x-compressed"}, 
    {".txt",    "text/plain"},
    {".wav",    "audio/x-wav"},
    {".wma",    "audio/x-ms-wma"},
    {".wmv",    "audio/x-ms-wmv"},
    {".wps",    "application/vnd.ms-works"},
    //{".xml",    "text/xml"},
    {".xml",    "text/plain"},
    {".z",        "application/x-compress"},
    {".zip",    "application/zip"},
    {"",        "*/*"}    
};

这个表目前还不全,上面的只是一些常用的文件类型,对于其他的文件类型和MIME的匹配值我会在以后更新。

转载于:https://www.cnblogs.com/mslan/p/4234398.html

Android 中文件类型与MIME的匹配表(转)相关推荐

  1. Android 中文件类型与MIME的匹配表

    Android 中文件类型与MIME的匹配表 转载于:https://www.cnblogs.com/zhujiabin/p/5669008.html

  2. android判断文件类型是否为音频文件

    android 中判断音频文件类型,通常有两种做法.一种是根据音频文件扩展名,这是最常用.最简单的方法:另一种是判断音频 文件头 信息,也是最准确的办法. 在Android系统内部提供了根据 文件名 ...

  3. 7、Linux中文件类型、文件属性

    Linux中文件类型简介:Windows中通过扩展名来区分文件类型,但是在Linux中文件的扩展名与文件类型无关,为了兼容用户使用Windows的习惯,我们也会用扩展名来表示Linux中的文件类型.在 ...

  4. Android关联文件类型,使得自己app支持打开【加入到“用其它应用打开”的列表中】

    ----稍作记录,避免下次忘了又得我去查官方文档---- 有时候,我们开发的app需要支持打开某些文件,如何才能使得打开文件时系统能把我们开发的app列出来呢? 例如, 1.我开发了一个浏览器,那用户 ...

  5. java web中文件类型,java web项目文件上传中常见的mime类型/文件类型校验、验证/只允许特定类型的文件(基于Apache的tika)...

    java代码 final Tika tika = new Tika(); Set allowMimeTypeAll = ImmutableSet.of("image/pjpeg", ...

  6. s()++php,.phps(dotphps)文件类型以及MIME类型详细描述

    今天碰到有人问phps文件是什么文件类型,做什么用的,由于这个问题很少有人在网上问,而且php.net网站上也没有直接可以搜索到的描述,因此我在此回答如下: phps文件就是php的源代码文件,通常用 ...

  7. android根据文件类型调用手机系统软件打开文件

    应用内打开文件有时候太麻烦,可以通过调用手机自带软件打开,比如wps.Misrosoft,这样做一是节省了开发时间,二是功能比较多,毕竟人家是专业的.那么如何实现 预览图 /*** @Descript ...

  8. VC++中文件类型小结

    为什么80%的码农都做不了架构师?>>>    .dsw---- 这种类型的文件在VC中是级别最高的,称为Workspace文件   .dsp---- 在VC中,应用程序是以Proj ...

  9. android中文件加密和解密的实现

    最近项目中需要用到加解密功能,言外之意就是不想让人家在反编译后通过不走心就能获取文件里一些看似有用的信息,但考虑到加解密的简单实现,这里并不使用AES或DES加解密 为了对android中assets ...

最新文章

  1. 基于熵权法优劣解距离法_基于优劣解距离法的火电机组单辅机运行状态评估
  2. ajax csv写文件内容,接收.csv文件作为ajax成功函数中的数据
  3. 广域网之间是通过路由器互联吗?—Vecloud
  4. B2C Opinions
  5. 【python核心编程】第六章 序列
  6. mysql企业监控_mysql企业监控
  7. OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主从集群
  8. Django中ORM模型总结(二)[抽象模型类,模型类的对应关系,模型类的属性,字段类型]...
  9. 微信养号防封攻略_防封群微信怎么卖
  10. jsp和jspx的区别
  11. 微信小程序音量调节插件
  12. java单词大全_编程常用英语单词大全
  13. 计算机无法筛选怎么办,电脑突然出现什么筛选键怎么处理?
  14. 油猴-今日头条去广告脚本
  15. C# “贝格尔”编排法
  16. JavaScript基础 ——【了解JavaScript】
  17. 【数据结构-ZZU】01. 绪论
  18. mysql 持有锁 等待锁_MySQL找出锁等待
  19. 4.Python数据容器之字符串(str)
  20. 浅谈MyBatis 之 入门(一)

热门文章

  1. 计算机access2级选择题真题,计算机二级《ACCESS》选择题练习及答案
  2. php switch 函数,PHP丨PHP基础知识之条件语SWITCH判断「理论篇」
  3. 如何提升微服务的幸福感?
  4. 技术人的灵魂 3 问,阿里工程师如何解答?
  5. html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证
  6. mate7刷android 6.0,华为Mate7 6.0系统刷recovery_Mate7 6.0专用第三方recovery
  7. 查看mysql日志大小,SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace)
  8. python如何在官网下载1005无标题,如何安装python cairo?
  9. x5内核有什么优点_欧尚X5国产又一黑马SUV,颜值高性能强,顶配仅需10万左右
  10. python最基本的两种循环结构_Python基础 — 分支和循环