近期公司有个需求,PDF格式需要在应用内打开浏览,Word、Excel要求不高直接用第三方软件打开即可,找了两种解决办法。

第一, 全部在应用内打开,可接入腾讯的TBS(没有做尝试),可参考链接接入TBS文章

第二,PDF可使用AndroidPdfViewer在应用内下载打开即可,Word、Excel下载后直接跳转至第三方软件打开

我选择了第二种办法,以后有空再尝试第一种解决办法吧。

以上两种办法都需要先下载文件再打开浏览,下载的解决方案这里就不描述了,网上很多,我使用的是廖子尧的第三方框架OkDownload,廖子尧GitHub可以学习一下,个人感觉还是挺好用的。

这里主要想记录下打开方式以及要注意的点:

android 7.0 新增私有目录访问权限,Google 官方说明:为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问 (0700)。此设置可防止私有文件的元数据泄漏。
所以这里在访问下载的文件存储路径时,也需要动态判断系统版本添加文件读取权限,使用FileProvider获取路径,否则会触发 FileUriExposedException异常

下面列举了三种打开文件类型的写法:

private void openFileIntent(String path, String type) {if (!StringUtils.isNullOrWhiteSpace(path)) {Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");Uri uri;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {uri = FileProvider.getUriForFile(getActivity(), getApplicationContext().getPackageName() + ".provider", new File(path));intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//给目标文件临时授权,必需添加} else {uri = Uri.fromFile(new File(path));}intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);try {if (StringUtils.isEqual(type, "doc")) {intent.setDataAndType(uri, "application/msword");this.startActivity(intent);this.finish();} else if (StringUtils.isEqual(type, "xls")) {intent.setDataAndType(uri, "application/vnd.ms-excel");this.startActivity(intent);this.finish();} else if (StringUtils.isEqual(type, "ppt")) {intent.setDataAndType(uri, "application/vnd.ms-powerpoint");this.startActivity(intent);this.finish();}} catch (Exception e) {MessageUtils.showCusToast(getActivity(), "没有找到打开该文件的应用程序");finish();}}}

再记录下setDataAndType设置所对应的值:

   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"},{"", "*/*"}};

Android通过第三方软件打开Word、Excel、PPT、PDF等文档相关推荐

  1. 如何在谷歌Chrome新版浏览器中打开并编辑Word/Excel/PPT等Office文档?(视频演示)

    如何在谷歌Chrome新版浏览器中打开并编辑Word/Excel/PPT等Office文档?

  2. Vue 预览word,excel,ppt等office文档-内网访问(基于onlyoffice,后端返回文件流)

    Vue 预览word,excel等office 先看效果!! 需求背景:在前端页面中预览office文件且是内网访问,服务器不可访问外网的前提. 因此微软的接口就废掉了,因为他接口的条件是可以访问外网 ...

  3. Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法)

    Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法) 1.需求背景 2.环境准备工作 2.1 JACOB介绍及安装 2.2 Microsoft Office W ...

  4. C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案

    C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案 1.前言 2.安 ...

  5. 服务器保存时提示文档未保存文件格式,,EXCEL另存为PDF提示:文档未保存

    excel另存为pdf,保存类型里怎么添加Pdf型式? 新版本的直接里面就有这个选项,老版本的可以在网上搜索Excel转pdf插件即可(有pdf虚拟打印机的也可以直接选择打印成pdf,不需要安装插件) ...

  6. 性能优化之通过Aspose组件将Word/Excel/PPT/PDF转成HTML文件,解决大附件预览性能问题

    在最近的一个项目中,遇到一个非常棘手的性能问题,场景是这样的:有PC端和手机端两个应用,用户在PC端上传的附件,如word,Excel,pdf等,当用户出差或不在电脑边上时,上传的附件在手机端能够打开 ...

  7. lucent检索技术之创建索引:使用POI读取txt/word/excel/ppt/pdf内容

    在使用lucent检索文档时,必须先为各文档创建索引.索引的创建即读出文档信息(如文档名称.上传时间.文档内容等),然后再经过分词建索引写入到索引文件里.这里主要是总结下读取各类文档内容这一步. 一. ...

  8. 关于在线预览word,excel,ppt,pdf的需求处理方法。

    参考文档:http://www.cnblogs.com/wolf-sun/p/3574278.html 我选用的方案:先用office com组件生成pdf,然后使用pdf.js在线预览pdf文档.在 ...

  9. php word excel转pdf文件怎么打开,php office文件(word/excel/ppt)转pdf文件,pptpdf

    php office文件(word/excel/ppt)转pdf文件,pptpdf 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, 关于预览office文件实现核心就是,把o ...

  10. php word/excel/ppt 转pdf

    转载至:https://blog.csdn.net/sangjinchao/article/details/78053545 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, ...

最新文章

  1. Linux下的I/O
  2. kepserver 6.5_非凡说| 先定一个6.5分小目标,财大生如何突破瓶颈拿下雅思!
  3. 文件上传到ubuntu -- WinSCP 登录ftp服务器
  4. 搭建 Hadoop2.7.2 + Spark1.6环境
  5. [luoguP4142]洞穴遇险
  6. 学习日报 1029 sqlserver的初使用
  7. 数组c语言与指针,浅析C语言数组与指针
  8. 第十四章:求雨的法术
  9. MyEclipse8.5破解方法
  10. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)(热身赛)
  11. Linux 学习笔记 (四)Ubuntu14.04 解决上网问题安装无线网卡驱动
  12. android通过xmpp实现服务器到客户端的推送功能
  13. 矩阵运算--特征矩阵
  14. ACM-ICPC 2018北京网络赛-A题 Saving Tang Monk II-优先队列
  15. cv2 interpolate插值-align_corners
  16. MeanTeacher论文学习笔记
  17. 第六届蓝桥杯大赛个人赛决赛(软件类)真题
  18. jntoo.php,admin/website.php · 曹琪/shufadasai-englishi - Gitee.com
  19. hta 北京自动挂号器
  20. 极品特效HTML5动画推荐,不看的程序员后悔一辈子

热门文章

  1. 科学计算机开多次方根号,计算器开多次方怎么操?
  2. 第九届蓝桥杯 b组 明码
  3. pip缓存下载的包文件
  4. Photoshop 2022下缩放和平移图像
  5. (long)123是c语言常量吗,C语言常量与变量
  6. postman常用断言
  7. Hbase、Kudu和ClickHouse横向对比V2.0
  8. 双三次差值bicubic
  9. html数据透视,Excel数据透视表使用过程中常见问题 如何在excel数据透视表中使用函数公式...
  10. 使用 .NET Core 开发 BT Tracker 服务器