Android通过第三方软件打开Word、Excel、PPT、PDF等文档
近期公司有个需求,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等文档相关推荐
- 如何在谷歌Chrome新版浏览器中打开并编辑Word/Excel/PPT等Office文档?(视频演示)
如何在谷歌Chrome新版浏览器中打开并编辑Word/Excel/PPT等Office文档?
- Vue 预览word,excel,ppt等office文档-内网访问(基于onlyoffice,后端返回文件流)
Vue 预览word,excel等office 先看效果!! 需求背景:在前端页面中预览office文件且是内网访问,服务器不可访问外网的前提. 因此微软的接口就废掉了,因为他接口的条件是可以访问外网 ...
- Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法)
Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法) 1.需求背景 2.环境准备工作 2.1 JACOB介绍及安装 2.2 Microsoft Office W ...
- 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.安 ...
- 服务器保存时提示文档未保存文件格式,,EXCEL另存为PDF提示:文档未保存
excel另存为pdf,保存类型里怎么添加Pdf型式? 新版本的直接里面就有这个选项,老版本的可以在网上搜索Excel转pdf插件即可(有pdf虚拟打印机的也可以直接选择打印成pdf,不需要安装插件) ...
- 性能优化之通过Aspose组件将Word/Excel/PPT/PDF转成HTML文件,解决大附件预览性能问题
在最近的一个项目中,遇到一个非常棘手的性能问题,场景是这样的:有PC端和手机端两个应用,用户在PC端上传的附件,如word,Excel,pdf等,当用户出差或不在电脑边上时,上传的附件在手机端能够打开 ...
- lucent检索技术之创建索引:使用POI读取txt/word/excel/ppt/pdf内容
在使用lucent检索文档时,必须先为各文档创建索引.索引的创建即读出文档信息(如文档名称.上传时间.文档内容等),然后再经过分词建索引写入到索引文件里.这里主要是总结下读取各类文档内容这一步. 一. ...
- 关于在线预览word,excel,ppt,pdf的需求处理方法。
参考文档:http://www.cnblogs.com/wolf-sun/p/3574278.html 我选用的方案:先用office com组件生成pdf,然后使用pdf.js在线预览pdf文档.在 ...
- php word excel转pdf文件怎么打开,php office文件(word/excel/ppt)转pdf文件,pptpdf
php office文件(word/excel/ppt)转pdf文件,pptpdf 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, 关于预览office文件实现核心就是,把o ...
- php word/excel/ppt 转pdf
转载至:https://blog.csdn.net/sangjinchao/article/details/78053545 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, ...
最新文章
- Linux下的I/O
- kepserver 6.5_非凡说| 先定一个6.5分小目标,财大生如何突破瓶颈拿下雅思!
- 文件上传到ubuntu -- WinSCP 登录ftp服务器
- 搭建 Hadoop2.7.2 + Spark1.6环境
- [luoguP4142]洞穴遇险
- 学习日报 1029 sqlserver的初使用
- 数组c语言与指针,浅析C语言数组与指针
- 第十四章:求雨的法术
- MyEclipse8.5破解方法
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)(热身赛)
- Linux 学习笔记 (四)Ubuntu14.04 解决上网问题安装无线网卡驱动
- android通过xmpp实现服务器到客户端的推送功能
- 矩阵运算--特征矩阵
- ACM-ICPC 2018北京网络赛-A题 Saving Tang Monk II-优先队列
- cv2 interpolate插值-align_corners
- MeanTeacher论文学习笔记
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题
- jntoo.php,admin/website.php · 曹琪/shufadasai-englishi - Gitee.com
- hta 北京自动挂号器
- 极品特效HTML5动画推荐,不看的程序员后悔一辈子