Android中调用系统所装的软件打开文件(转)

在应用中如何调用系统所装的软件打开一个文件,这是我们经常碰到的问题,下面是我所用到的一种方法,和大家一起分享一下!

这个是打开文件的一个方法:

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

MIME_MapTable是所有文件的后缀名所对应的MIME类型的一个String数组:

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

这个MIME类型可能不够完整,你有要补充的吗?

原文:http://tonysun3544.iteye.com/blog/1265884

Android中调用系统所装的软件打开文件(转)的更多相关文章

  1. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  2. android中调用系统的发送短信、发送邮件、打电话功能

    1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:");  Intent sendIntent = new Intent(Intent.ACT ...

  3. Android中调用系统的相机和图库获取图片

    //--------我的主布局文件------很简单---------------------------------<LinearLayout xmlns:android="http ...

  4. 关于android中调用系统拍照,返回图片是旋转90度

    转载博客:http://blog.csdn.net/walker02/article/details/8211628 项目开发中遇到的一个问题,对于三星手机在做手机照片选择时出现图片显示不正常,研究后 ...

  5. 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...

  6. Android中消息系统模型和Handler Looper

    http://www.cnblogs.com/bastard/archive/2012/06/08/2541944.html Android中消息系统模型和Handler Looper 作为Andro ...

  7. [转][android][利用JNI技术在Android中调用、调试C++代码]

    在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...

  8. Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博

    原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...

  9. 在Android中调用WebService

    某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...

随机推荐

  1. 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归

    孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...

  2. NodeJs03 express框架 Todo商城

    前言 由于NodeJs本身的异步非阻塞特性和对http的天然支持,所以使用NodeJs编写高性能,可伸缩的Web服务器非常简单.开发完整的Web服务器还需要路由,错误处理,请求拦截,请求和响应的解析, ...

  3. Oracle常用数据库系统表单以及SQL的整理

    因为最近涉及到了一些数据库的归档,备份等工作,所以一部分的重心放在了数据库上,毕竟之前对数据库的了解也只停留在了一般的建表,查询,最多最多再写一写触发器之类的东西. 通常都是自己瞎搞搞,也就懂一点皮毛 ...

  4. Android事件分发机制详解(2)----分析ViewGruop的事件分发

    首先,我们需要 知道什么是ViewGroup,它和普通的View有什么区别? ViewGroup就是一组View的集合,它包含很多子View和ViewGroup,是Android 所有布局的父类或间接 ...

  5. kvm搭建完成了,那么问题来了,到底是什么原理

    kvm中到底是怎么模拟的CPU和内存? 收到了大量的 这里有一个裸的调用kvm接口的实例,超赞: http://www.cnblogs.com/Bozh/p/5753379.html 使用kvm的AP ...

  6. Icarus Verilog和GTKwave使用简析

    Icarus Verilog和GTKwave使用简析 来源 http://blog.csdn.net/husipeng86/article/details/60469543 本文测试文件在window ...

  7. 堆栈(Stacks)

    堆栈(Stacks) 准备工作 安装Docker 1.13及以上版本 安装Docker Compose正如第三部分的准备工作. 安装Docker Machine正如第四部分的准备工作. 阅读第一部分的 ...

  8. [bzoj] 1878 HH的项链 || 莫队

    原题 给定长为 n 的一个序列,接下来 m 次询问,每次询问区间 [ l , r ] 内有多少个不同的数. 莫队: 离线\(O(n\log(n))\). 将序列分块. 以左端点所在块为第一关键字,右端 ...

  9. 国旗计划(flag)

    国旗计划(flag) 题目描述 A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了n名 ...

  10. Windows域同步检查repadmin

    C:\Users\>repadmin /show replUsage: repadmin <cmd> <args> [/u:{domain\user}] [/pw:{pa ...