android不同类型文件

转自http://www.cnblogs.com/hibraincol/archive/2010/09/16/1828502.html

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

背景介绍:

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

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

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

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

实现方法:

  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类型。
 * @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类型"的匹配表:


   
   
  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类型与文件后缀名的匹配表
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的匹配值我会在以后更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值