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类型。

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

实现方法:

/**
 * 根据文件后缀名获得对应的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"},
    {"",        "*/*"}
};
时间: 2024-07-30 11:26:12

Android打开不同类型文件的相关文章

Android打开各种类型的文件方法总结

很简单,通过调用系统的intent,我们可以打开各种文件,不熟悉的朋友可以了解下action.datatype.uri的相关知识. 通用方法如下: public static Intent openFile(String filePath){ File file = new File(filePath); if(!file.exists()) return null; /* 取得扩展名 */ String end=file.getName().substring(file.getName().l

用intent打开各种类型文件

public class MyIntent { //android获取一个用于打开HTML文件的intent public static Intent getHtmlFileIntent( String param ) { Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(para

android 打开SD卡文件夹,并获得选中文件的路径怎么实现?

============问题描述============ 如题,我想在我的程序中点击一个按钮,然后打开系统自带的文件管理器,选择文件后,返回选中文件的路径到我的程序中,类似于下面这个图的 然后我点击文件管理器之后,可以到文件管理器中得到我选中的文件的路径,供我的程序使用,怎么实现?用广播? ============解决方案1============ 我觉得只能自己实现这个文件管理器才行 ============解决方案2============ 自己写文件管理

Android 打开本地文件

Android 打开本地的文件,目前来说,其实很常见.而且现在有手机版的office了.查看office的全家桶就更加方便. 首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文件的 MIME 类型来确定 如果不知道是什么类型,那就是 : */* 类型匹配表: private static final String[][] MIME_MapTable={ //{后缀名, MIME类型} {".3gp", "video/3gpp"}, {&quo

Android 打开/播放电脑的音频/视频文件

今天早上一到办公室,照常打开博客园看文章,看到有一片文章是用  http://www.cnblogs.com/wdfrog/p/3738180.html 看到这哥们实现的方法好复杂,又是配置电脑端,又是配置手机端,还又是转码啥的,倒腾时间长不说,而且还很麻烦,这里介绍下我是如何用手机直接播放电脑上的文件的. 之所以播放电脑上的文件,主要原因是视频文件都很大,清晰度高的一部电影都1GB左右了,对于手机来说,虽然能够装得下,但是看完就得删了,没法长时间储存在手机上, 来回往手机上拷视频文件,就这文件

Mac系统打开应用程序文件夹的方法+解决Android studio出现fetching android sdk component超时打不开的问题

Mac系统打开应用程序文件夹的方法 我们知道Mac系统文件系统不同于Windows,在Windows下的应用程序安装程序师以.exe为后缀,而mac系统则是以.dmg为后缀.从App Store下载下来的应用程序,双击dmg文件就会出现以下类似这种情形,这里笔者安装的是Android Studio: 把Android Studio拖动到Applications中即可完成安装. 跟Windows不一样,我们没有类似C盘专门存放系统应用程序的文件,有时候我们想去看看应用程序的安装文件,这时我们在Fi

[Android]用图库打开指定的文件夹,没错是第一个画面直接是图库的文件夹画面

参考了这个里面的代码 http://bbs.csdn.net/topics/380084274 一直报错 06-16 23:58:50.698 26148-26161/com.example.myapplication.app W/ContentResolver﹕ Failed to get type for: content://media/external/images/media/120818 (Unknown URL : content://media/external/images/m

C#项目打开/保存文件夹/指定类型文件,获取路径(转)

C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325/ 1.打开文件路径:                  OpenFileDialog ofd = new OpenFileDialog();                //new一个方法            ofd.Filter = "(*.et;*.xls;*.xlsx)|*.et;*.x

Ubuntu下安装android studio的时候,无法进入图形界面--/usr/lib/jdk1.8.0_60/jre/lib/i386/libawt_xawt.so: libXtst.so.6: 无法打开共享对象文件: 没有那个文件或目录

详细错误描述: java.lang.reflect.InvocationTargetException    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.i