应用内打开文件有时候太麻烦,可以通过调用手机自带软件打开,比如wps、Misrosoft,这样做一是节省了开发时间,二是功能比较多,毕竟人家是专业的。那么如何实现

预览图

/*** @Description: 打开文件工具类* @author: ZhangYW* @time: 2019/1/10 10:52*/
public class OpenFileUtil {private static final String[][] MATCH_ARRAY={//{后缀名,    文件类型}{".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/msword"},{".xls",    "application/msword"},{".xlsx",    "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/plain"},{".z",        "application/x-compress"},{".zip",    "application/zip"},{"",        "*/*"}};/*** 根据路径打开文件* @param context 上下文* @param path 文件路径*/public static void openFileByPath(Context context, String path) {if(context==null||path==null)return;Intent intent = new Intent();//设置intent的Action属性intent.setAction(Intent.ACTION_VIEW);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_DEFAULT);//文件的类型String type = "";for(int i =0;i < MATCH_ARRAY.length;i++){//判断文件的格式if(path.contains(MATCH_ARRAY[i][0])){type = MATCH_ARRAY[i][1];break;}}try {File out = new File(path);Uri fileURI;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {// 由于7.0以后文件访问权限,可以通过定义xml在androidmanifest中申请,也可以直接跳过权限// 通过定义xml在androidmanifest中申请
//                fileURI = FileProvider.getUriForFile(context,
//                        "com.lonelypluto.zyw_test.provider",
//                        out);// 直接跳过权限StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();StrictMode.setVmPolicy(builder.build());fileURI = Uri.fromFile(out);}else{fileURI = Uri.fromFile(out);}//设置intent的data和Type属性intent.setDataAndType(fileURI, type);//跳转if (context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {context.startActivity(intent);} else {Toast.makeText(context, "没有找到对应的程序", Toast.LENGTH_SHORT).show();}} catch (Exception e) { //当系统没有携带文件打开软件,提示Toast.makeText(context, "无法打开该格式文件", Toast.LENGTH_SHORT).show();e.printStackTrace();}}
}

如果通过定义xml在androidmanifest中申请,新建provider_paths.xml在res/xml中

<?xml version="1.0" encoding="utf-8"?>
<paths><external-path name="sgcg" path=""/>
</paths>

然后在androidmanifest.xml中的application中

<application>
...<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.lonelypluto.zyw_test.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths" /></provider>
...
</application>

最后调用

OpenFileUtil.openFileByPath(content, path);

android根据文件类型调用手机系统软件打开文件相关推荐

  1. 显示android缓存文件,android – 使用ACTION_VIEW在缓存目录中打开文件

    我一直在寻找这个,但我无法让它正常工作.让我解释. 我有一个Android应用程序,可以将文件(图像,文档,-)保存在缓存目录中.起初我曾经使用getExternalCacheDir()方法并将它们保 ...

  2. cmd执行bat结果不回显_cmd - 如何在bat文件中调用另一个bat文件

    情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调用b.bat,如下. a.bat @echo off echo I am a.ba ...

  3. cmd 如何在bat文件中调用另一个bat文件

    微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调 ...

  4. Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略

    Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略 目录

  5. 实战 - 文件上传功能:校验文件类型,文件大小,获取文件真实类型

    文件上传的漏洞和防御-设置黑名单和白名单 以PHP脚本语言为例,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够 ...

  6. python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题

    python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题 1.在一个py文件中调用另一个py文件中的变量 新建一个py文件,记为t1.py # t1.py m = 2 n = 1 a ...

  7. word无法读取此文档,文档可能已损坏 请尝试下列方法:*打开并修复文件*用文本恢复转换器打开文件

    若对您有所启发 欢迎打赏 古典小说网 致力于打造极致阅读体验 首创卡拉OK读书方式 首创,桌面大屏幕TXT阅读方式 今天遇到这个问题,word刚刚关闭,然后就打不开了 出现上面提示 解决方法: 先打开 ...

  8. idea如何屏蔽.iml .idea等不需要的文件类型 避免commit提交无效文件

    文章目录 idea如何屏蔽.iml .idea等不需要的文件类型 避免commit提交无效文件 git相关知识 git特点介绍: git基本信息 idea如何屏蔽.iml .idea等不需要的文件类型 ...

  9. 服务器文件夹取消只读,服务器上的excle文件有人打开文件编辑后关闭文件,别人再去打开文件时“**”正在编辑,用只读方式打开!excel怎样解除只读...

    在office2007 word excle PPT 中怎么设置权限为:禁止复制,禁止打印,禁止修改,仅只读功能呢?! 在工具----选项----安全性,根据你的要求设置相关密码即可! excel怎么 ...

最新文章

  1. SpringBoot-400-Bad-Request(Request-header-is-too-large)
  2. 微软示例数据仓库AdventureWorksDW 与数据仓库概述
  3. 常用模块之 time,datetime,random,os,sys
  4. js使用location的方法实验
  5. 30 PP配置-生产车间控制-定义计划策略
  6. 去除Windows-XP系统下的关机功能
  7. 学习笔记:自己编译安装OpenCV+测试opencv安装是否成功
  8. mongodb 插入一个数组 java_mongodb:推送到数组元素的子数组或添加到数组(如果不存在)...
  9. SRS之SrsRtmpConn::publishing详解
  10. ZigBee Z-Stack 2.04 IAR软件版本
  11. 配好lsd_slam后的使用PTAM工具标定相机
  12. chromium os系统编译与环境搭建
  13. CorelDRAW_X6使用汇总
  14. **旅行-interveiw
  15. 64位windows无法正常安装dnw的解决方案
  16. MATLAB等高线图
  17. 百度回复针对目前相关性问题
  18. php5.3.3下载 64_PHP for Windows5.3.5 下载 - 51下载网
  19. 使用 Navicat 代码段
  20. usesCleartextTraffic

热门文章

  1. 微信PC绿色版有什么特点
  2. 被讨厌的勇气(摘录)
  3. 服务器(Linux)查看Tomcat运行日志
  4. Python爬虫案例,腾讯动漫爬虫,步骤超详细解释。
  5. PHP报错:Call to undefined function bcmul()
  6. 2022前端大厂面试题之JavaScript篇(1)
  7. table表格单元格padding_table的使用以及其内padding、margin的实现
  8. 多线程5一AbstractQueuedSynchronizer源码分析一
  9. 如何解决Origin登录后界面空白无法接受好友请求的情况
  10. 概述-用户画像是什么?