Android打开不同类型文件

转自:http://blog.csdn.net/t5721654/article/details/6860287

 

正好做一个下载预览功能,要打开文件,看到这篇相当不错的文章就转过来了。其中openFile方法可以自己改一下通过Intent.createChooser()方式来选择打开程序。

 

背景介绍:

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

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

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

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

实现方法:

 

[java]  view plain copy
  1. /** 
  2.  * 根据文件后缀名获得对应的MIME类型。 
  3.  * @param file 
  4.  */  
  5. private String getMIMEType(File file)  
  6. {  
  7.     String type="*/*";  
  8.     String fName=file.getName();  
  9.     //获取后缀名前的分隔符"."在fName中的位置。  
  10.     int dotIndex = fName.lastIndexOf(".");  
  11.     if(dotIndex < 0){  
  12.         return type;  
  13.     }  
  14.     /* 获取文件的后缀名 */  
  15.     String end=fName.substring(dotIndex,fName.length()).toLowerCase();  
  16.     if(end=="")return type;  
  17.     //在MIME和文件类型的匹配表中找到对应的MIME类型。  
  18.     for(int i=0;i<MIME_MapTable.length;i++){  
  19.         if(end.equals(MIME_MapTable[i][0]))  
  20.             type = MIME_MapTable[i][1];  
  21.     }  
  22.     return type;  
  23. }  
  24. /** 
  25.  * 打开文件 
  26.  * @param file 
  27.  */  
  28. private void openFile(File file){  
  29.     //Uri uri = Uri.parse("file://"+file.getAbsolutePath());  
  30.     Intent intent = new Intent();  
  31.     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  32.     //设置intent的Action属性  
  33.     intent.setAction(Intent.ACTION_VIEW);  
  34.     //获取文件file的MIME类型  
  35.     String type = getMIMEType(file);  
  36.     //设置intent的data和Type属性。  
  37.     intent.setDataAndType(/*uri*/Uri.fromFile(file), type);  
  38.     //跳转  
  39.     startActivity(intent);      
  40. }  

 


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

 

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

[java] view plain copy
  1. //建立一个MIME类型与文件后缀名的匹配表  
  2. private final String[][] MIME_MapTable={  
  3.     //{后缀名,    MIME类型}  
  4.     {".3gp",    "video/3gpp"},  
  5.     {".apk",    "application/vnd.android.package-archive"},  
  6.     {".asf",    "video/x-ms-asf"},  
  7.     {".avi",    "video/x-msvideo"},  
  8.     {".bin",    "application/octet-stream"},  
  9.     {".bmp",      "image/bmp"},  
  10.     {".c",        "text/plain"},  
  11.     {".class",    "application/octet-stream"},  
  12.     {".conf",    "text/plain"},  
  13.     {".cpp",    "text/plain"},  
  14.     {".doc",    "application/msword"},  
  15.     {".exe",    "application/octet-stream"},  
  16.     {".gif",    "image/gif"},  
  17.     {".gtar",    "application/x-gtar"},  
  18.     {".gz",        "application/x-gzip"},  
  19.     {".h",        "text/plain"},  
  20.     {".htm",    "text/html"},  
  21.     {".html",    "text/html"},  
  22.     {".jar",    "application/java-archive"},  
  23.     {".java",    "text/plain"},  
  24.     {".jpeg",    "image/jpeg"},  
  25.     {".jpg",    "image/jpeg"},  
  26.     {".js",        "application/x-javascript"},  
  27.     {".log",    "text/plain"},  
  28.     {".m3u",    "audio/x-mpegurl"},  
  29.     {".m4a",    "audio/mp4a-latm"},  
  30.     {".m4b",    "audio/mp4a-latm"},  
  31.     {".m4p",    "audio/mp4a-latm"},  
  32.     {".m4u",    "video/vnd.mpegurl"},  
  33.     {".m4v",    "video/x-m4v"},      
  34.     {".mov",    "video/quicktime"},  
  35.     {".mp2",    "audio/x-mpeg"},  
  36.     {".mp3",    "audio/x-mpeg"},  
  37.     {".mp4",    "video/mp4"},  
  38.     {".mpc",    "application/vnd.mpohun.certificate"},          
  39.     {".mpe",    "video/mpeg"},      
  40.     {".mpeg",    "video/mpeg"},      
  41.     {".mpg",    "video/mpeg"},      
  42.     {".mpg4",    "video/mp4"},      
  43.     {".mpga",    "audio/mpeg"},  
  44.     {".msg",    "application/vnd.ms-outlook"},  
  45.     {".ogg",    "audio/ogg"},  
  46.     {".pdf",    "application/pdf"},  
  47.     {".png",    "image/png"},  
  48.     {".pps",    "application/vnd.ms-powerpoint"},  
  49.     {".ppt",    "application/vnd.ms-powerpoint"},  
  50.     {".prop",    "text/plain"},  
  51.     {".rar",    "application/x-rar-compressed"},  
  52.     {".rc",        "text/plain"},  
  53.     {".rmvb",    "audio/x-pn-realaudio"},  
  54.     {".rtf",    "application/rtf"},  
  55.     {".sh",        "text/plain"},  
  56.     {".tar",    "application/x-tar"},      
  57.     {".tgz",    "application/x-compressed"},   
  58.     {".txt",    "text/plain"},  
  59.     {".wav",    "audio/x-wav"},  
  60.     {".wma",    "audio/x-ms-wma"},  
  61.     {".wmv",    "audio/x-ms-wmv"},  
  62.     {".wps",    "application/vnd.ms-works"},  
  63.     //{".xml",    "text/xml"},  
  64.     {".xml",    "text/plain"},  
  65.     {".z",        "application/x-compress"},  
  66.     {".zip",    "application/zip"},  
  67.     {"",        "*/*"}      
  68. };  

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

你可能感兴趣的:(android)