Android调用WPS第三方App打开PDF文档,一直停留在首页,提示正在加载文档类型
Android 7.0 以后对Uri的访问进行了限制,需要在manifest项目清单文件里面添加 provider,具体怎么写这个就不说了。
解决此问题只需添加以下代码即可:
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
意思就是在程序中动态的grant URI权限给Action接收者。
/*** 获取打开文档意图** @param file* @return*/public static Intent getFileIntent(Activity activity, File file) {Uri uri = Uri.fromFile(file);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//通过FileProvider创建一个content类型的Uriuri = FileProvider.getUriForFile(activity, "com.ss.fileprovider", file);}String type = getMIMEType(file);//优先使用WPS打开//检测是否安装了wps软件,没有安装选择默认打开, 动态的grant URI权限Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setAction(android.content.Intent.ACTION_VIEW);intent.setDataAndType(uri, type);if (SystemUtil.isInstall(activity, "cn.wps.moffice_eng")) {intent.setClassName("cn.wps.moffice_eng","cn.wps.moffice.documentmanager.PreStartActivity2");//intent.setData(uri);} else {intent.addCategory("android.intent.category.DEFAULT");}return intent;}
参考代码:
//建立一个文件类型与文件后缀名的匹配表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"},{".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 文件路径*/private 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);//文件的类型String type = "";for(int i =0;i<MATCH_ARRAY.length;i++){//判断文件的格式if(path.toString().contains(MATCH_ARRAY[i][0].toString())){type = MATCH_ARRAY[i][1];break;}}try {File out = new File(path);Uri fileURI;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {fileURI = FileProvider.getUriForFile(context,"com.lonelypluto.test.provider",out);}else{fileURI = Uri.fromFile(out);}//设置intent的data和Type属性intent.setDataAndType(fileURI, type);//跳转context.startActivity(intent);} catch (Exception e) { //当系统没有携带文件打开软件,提示Toast.makeText(this,"无法打开该格式文件",Toast.LENGTH_SHORT).show();e.printStackTrace();}}
完!!!
Android调用WPS第三方App打开PDF文档,一直停留在首页,提示正在加载文档类型相关推荐
- Android默认优先使用WPS打开PDF文档
使用第三方App打开PDF文档,当选择使用WPS时,出现提示获取文档类型,一直打不开的情况. 解决办法,首先检测是否安装了WPS软件.如果安装了,则用WPS打开,否则,使用默认工具打开. 具体实现如下 ...
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...
- 多端手机网页中直接打开PDF文档
1. 需求 接到一个需求,客户想在手机端的网页里直接能查看到 pdf 文档,一开始我的思路是加一个<a>标签让他跳转链接到 pdf 文档的地址,经过测试发现在 IOS 系统中,网页跳转之后 ...
- ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
一.自己的APP调用第三方打开文件 主要是使用 UIDocumentInteractionController 类 并实现 UIDocumentInteractionControllerDelegat ...
- 使用第三方应用打开pdf文件
/*** android获取一个用于打开PDF文件的intent** @param path 要打开的文件的绝对路径* @return*/public Intent getPdfFileIntent( ...
- linux中常用打开pdf文档指令软件
在linux系统中,常用的打开pdf文档的指令代码 evince xxx.pdf acroread xxx.pdf okular xxx.pdf adobe xxx.pdf
- 利用pdf.js在手机端网页中直接打开PDF文档
在项目中用到了需要在手机端直接打开PDF文档的情况,借鉴网友们的意见使用了pdf.js,测试了一下简单好用,下面是使用例子 <!DOCTYPE html> <html> < ...
- 手机打开PDF文档中文英文支持(乱码问题)解决攻略
手机打开PDF文档中文英文支持(乱码问题)解决攻略 参考文章: (1)手机打开PDF文档中文英文支持(乱码问题)解决攻略 (2)https://www.cnblogs.com/seachal/p/52 ...
- 【android】调用系统app打开word文档遇到的问题
app突然点击word文件下载后没反应,搞了半天居然是少了个"-"的问题,但是以前都没问题,突然就打不开了,网上也找不到答案: 原来的type是"application/ ...
最新文章
- Oracle Dataguard之Real-Time Apply
- TYVJ P1062 合并傻子 Label:环状dp
- python2和python3字符串区别_python2和python3字符串区别
- 简单mysql优化_MySQL简单优化
- CSS学习笔记 -- Position(定位)
- DisplayX显示器测试、显示器屏幕检测
- 绿坝老板不诚实,蒙骗政府官员
- 华为linux用什么浏览器,Linux系统浏览器最受用户欢迎前十排名
- github php right way,GitHub - seraph526/php-the-right-way: 收集PHP最佳实践、编码规范和权威学习指南,方便PHP开发者阅读和查找...
- QQ空间说说如何批量删除
- 用户输入一个字符串,请将字符串中的所有字母全部向后移动移动一位,最后一个字母放到字符串的开头,最后将新的字符串输出。
- 【NAACL 2021】RCI:在基于 Transformer 的表格问答中行和列语义捕获
- 俞敏洪在北京大学2008年开学典礼上的演讲辞
- 用python程序编写问卷调查_如何使用Python实现调查问卷的自动填写
- 主攻文推荐攻守都有系统_第一百四十八章:攻守之间 - 足球神话 - 找小说网
- 二分法算法复杂度简化_让我们简化算法的复杂性!
- 常见加密算法的Python实现
- C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
- [转载]让matlab发出声音、播放音乐
- 利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)
热门文章
- 第一性原理的钥匙—逻辑奇点
- 用 Python 读取气象环境数据并绘图
- 【原创】彼得德鲁克《管理的实践》札记(四)
- 7月新能源车冰火两重天:吉利 上汽大众增速最高 风神新能源占比最高
- Nginx 限流方法
- Asp数据库访问代码自动产生工具-ASPRunner(适用初学者和为了提高开发效率的Developer)
- 呼兰的程序员吐槽会,成为这届云栖大会最大的亮点
- [codility]Grocery-store
- C#.net开发基于WinForm的简单图书馆系统(附源码地址)
- 【原创】Performanced C++ 经验规则 第一条:你不知道的构造函数(上)