背景介绍:

  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< p>

   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的匹配值我会在以后更新。


转:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-3985.html


更多相关文章

  1. Android:无法在同一部手机上执行通过Linux部署编译的文件
  2. 多个dex文件定义了Landroid/支持/v13/app/FragmentCompatICS。
  3. 解决:AndroidStudio 下使用AIDL不能生成对应java文件
  4. 尽管在清单文件中指定了权限,但是ACCESS_FINE_LOCATION SecurityE
  5. Android Web-View:将本地Javascript文件注入远程网页
  6. 如何执行删除请求而不返回类型或回调?(改造)
  7. Ubuntu Android/Sdk/build-tools/23.0.3/aapt": error=2, 没有那
  8. 小米1出现的资源文件找不到问题!
  9. android文件读写,ndk文件读写

随机推荐

  1. ionic之切换开关
  2. 使用Jquery打印div内容
  3. 选择jquery - 列表未以模态形式加载
  4. Jquery UI draggable不会调整其他DIV的大
  5. prototype.Function没有在node.js中导出
  6. JavaScript:使用函数参数检索javascript对
  7. 入职必备技能(三)HTML、CSS、JAVASCRIPT
  8. Javascript 排序算法(转)
  9. AngularJS我在哪里可以访问加载的控制器
  10. 动画在画布中移动图像