Android中调用系统所装的软件打开文件(转)
Android中调用系统所装的软件打开文件(转)
在应用中如何调用系统所装的软件打开一个文件,这是我们经常碰到的问题,下面是我所用到的一种方法,和大家一起分享一下!
这个是打开文件的一个方法:
- /**
 - * 打开文件
 - * @param file
 - */
 - private void openFile(File file){
 - 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类型。
 - * @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++){ //MIME_MapTable??在这里你一定有疑问,这个MIME_MapTable是什么?
 - if(end.equals(MIME_MapTable[i][0]))
 - type = MIME_MapTable[i][1];
 - }
 - return type;
 - }
 
MIME_MapTable是所有文件的后缀名所对应的MIME类型的一个String数组:
- 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"},
 - {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
 - {".xls", "application/vnd.ms-excel"},
 - {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
 - {".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"},
 - {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
 - {".prop", "text/plain"},
 - {".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/plain"},
 - {".z", "application/x-compress"},
 - {".zip", "application/x-zip-compressed"},
 - {"", "*/*"}
 - };
 
这个MIME类型可能不够完整,你有要补充的吗?
原文:http://tonysun3544.iteye.com/blog/1265884
Android中调用系统所装的软件打开文件(转)的更多相关文章
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
		
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
 - android中调用系统的发送短信、发送邮件、打电话功能
		
1 调用发送短信功能: Uri smsToUri = Uri.parse("smsto:"); Intent sendIntent = new Intent(Intent.ACT ...
 - Android中调用系统的相机和图库获取图片
		
//--------我的主布局文件------很简单---------------------------------<LinearLayout xmlns:android="http ...
 - 关于android中调用系统拍照,返回图片是旋转90度
		
转载博客:http://blog.csdn.net/walker02/article/details/8211628 项目开发中遇到的一个问题,对于三星手机在做手机照片选择时出现图片显示不正常,研究后 ...
 - 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
		
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
 - Android中消息系统模型和Handler Looper
		
http://www.cnblogs.com/bastard/archive/2012/06/08/2541944.html Android中消息系统模型和Handler Looper 作为Andro ...
 - [转][android][利用JNI技术在Android中调用、调试C++代码]
		
在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...
 - Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博
		
原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...
 - 在Android中调用WebService
		
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...
 
随机推荐
- golang中从一个日期开始往后增加一段时间
			
废话少说上code, 这个是从当前日期开始,往后增加一个月时间 package main import ( "fmt" "time" ) func main() ...
 - Linux中awk后面的RS, ORS, FS, OFS 含义
			
转载自http://blog.csdn.net/qq416647781/article/details/40649419 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的 ...
 - 【linux】如何解决VMWare上linux虚拟机连不上外网的问题?
			
>>>故障现象:虚拟机连接不到外网? >>>故障背景: Centos7.4发行版本: 虚拟机和VM软件都是nat模式: 注意这里默认的VMWare的DHCP服务时开 ...
 - 第十一篇:MySQL基础
			
本篇内容 MySQL概述 MySQL安装 MySQL库增.删.改.查 MySQL表增.删.改.查 MySQL表记录增.删.改.查 一. MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典 M ...
 - 【bzoj3781】小B的询问  莫队算法
			
原文地址:http://www.cnblogs.com/GXZlegend/p/6803821.html 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L ...
 - Codeforces Round #389 (Div. 2) 752F(树的权值重心)
			
题目大意 给定2k个队伍分别住在2k个城市里,需要设定若干个城市,然后选取2个队伍要在它们的最短路径上设一个城市作为休息站 要求设立最少的休息站,然后输出如何安排2个队伍 首先若干个其实就是在坑人,实 ...
 - root权限
			
点击左侧终端标 步骤阅读 2 出现命令提示符 3 首先输入:sudo passwd root(设置root密码) 4 输入当前系统的账户密码(账户:admin-pc的密码) 5 输入新的root密码, ...
 - C语言fopen函数了解
			
fopen()函数功能:open a file. 原型:FILE * fopen(const char * path,const char * mode); 需要#include<stdio.h ...
 - 2015年4月1日 14:36:56 EF 主从表更新
			
公司封装框架的人把eF封在了工作单元里面,使用了Unitofwork这样的形式, 我用代码生成器生成了基础的单表操作的代码. 这种方式对多表有问题. 暂时只得,一张表一张表地操作, 我采用先用List ...
 - Linux Mint---开启桌面三维特效
			
其实系统默认已经安装好了compiz,我们只需要切换就可以了 menu->control center->desktop setting->window 开启compiz的时候,由于 ...