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文档,一直停留在首页,提示正在加载文档类型相关推荐

  1. Android默认优先使用WPS打开PDF文档

    使用第三方App打开PDF文档,当选择使用WPS时,出现提示获取文档类型,一直打不开的情况. 解决办法,首先检测是否安装了WPS软件.如果安装了,则用WPS打开,否则,使用默认工具打开. 具体实现如下 ...

  2. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档

    在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...

  3. 多端手机网页中直接打开PDF文档

    1. 需求 接到一个需求,客户想在手机端的网页里直接能查看到 pdf 文档,一开始我的思路是加一个<a>标签让他跳转链接到 pdf 文档的地址,经过测试发现在 IOS 系统中,网页跳转之后 ...

  4. ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件

    一.自己的APP调用第三方打开文件 主要是使用 UIDocumentInteractionController 类 并实现 UIDocumentInteractionControllerDelegat ...

  5. 使用第三方应用打开pdf文件

    /*** android获取一个用于打开PDF文件的intent** @param path 要打开的文件的绝对路径* @return*/public Intent getPdfFileIntent( ...

  6. linux中常用打开pdf文档指令软件

    在linux系统中,常用的打开pdf文档的指令代码 evince xxx.pdf acroread xxx.pdf okular xxx.pdf adobe xxx.pdf

  7. 利用pdf.js在手机端网页中直接打开PDF文档

    在项目中用到了需要在手机端直接打开PDF文档的情况,借鉴网友们的意见使用了pdf.js,测试了一下简单好用,下面是使用例子 <!DOCTYPE html> <html> < ...

  8. 手机打开PDF文档中文英文支持(乱码问题)解决攻略

    手机打开PDF文档中文英文支持(乱码问题)解决攻略 参考文章: (1)手机打开PDF文档中文英文支持(乱码问题)解决攻略 (2)https://www.cnblogs.com/seachal/p/52 ...

  9. 【android】调用系统app打开word文档遇到的问题

    app突然点击word文件下载后没反应,搞了半天居然是少了个"-"的问题,但是以前都没问题,突然就打不开了,网上也找不到答案: 原来的type是"application/ ...

最新文章

  1. Oracle Dataguard之Real-Time Apply
  2. TYVJ P1062 合并傻子 Label:环状dp
  3. python2和python3字符串区别_python2和python3字符串区别
  4. 简单mysql优化_MySQL简单优化
  5. CSS学习笔记 -- Position(定位)
  6. DisplayX显示器测试、显示器屏幕检测
  7. 绿坝老板不诚实,蒙骗政府官员
  8. 华为linux用什么浏览器,Linux系统浏览器最受用户欢迎前十排名
  9. github php right way,GitHub - seraph526/php-the-right-way: 收集PHP最佳实践、编码规范和权威学习指南,方便PHP开发者阅读和查找...
  10. QQ空间说说如何批量删除
  11. 用户输入一个字符串,请将字符串中的所有字母全部向后移动移动一位,最后一个字母放到字符串的开头,最后将新的字符串输出。
  12. 【NAACL 2021】RCI:在基于 Transformer 的表格问答中行和列语义捕获
  13. 俞敏洪在北京大学2008年开学典礼上的演讲辞
  14. 用python程序编写问卷调查_如何使用Python实现调查问卷的自动填写
  15. 主攻文推荐攻守都有系统_第一百四十八章:攻守之间 - 足球神话 - 找小说网
  16. 二分法算法复杂度简化_让我们简化算法的复杂性!
  17. 常见加密算法的Python实现
  18. C语言之将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
  19. [转载]让matlab发出声音、播放音乐
  20. 利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)

热门文章

  1. 第一性原理的钥匙—逻辑奇点
  2. 用 Python 读取气象环境数据并绘图
  3. 【原创】彼得德鲁克《管理的实践》札记(四)
  4. 7月新能源车冰火两重天:吉利 上汽大众增速最高 风神新能源占比最高
  5. Nginx 限流方法
  6. Asp数据库访问代码自动产生工具-ASPRunner(适用初学者和为了提高开发效率的Developer)
  7. 呼兰的程序员吐槽会,成为这届云栖大会最大的亮点
  8. [codility]Grocery-store
  9. C#.net开发基于WinForm的简单图书馆系统(附源码地址)
  10. 【原创】Performanced C++ 经验规则 第一条:你不知道的构造函数(上)