使用第三方App打开PDF文档,当选择使用WPS时,出现提示获取文档类型,一直打不开的情况。

解决办法,首先检测是否安装了WPS软件。如果安装了,则用WPS打开,否则,使用默认工具打开。

具体实现如下:

1、工具类SystemUtil

public class SystemUtil {public static boolean isInstall(Context context, String packageName) {final PackageManager packageManager = context.getPackageManager();// 获取所有已安装程序的包信息List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);for (int i = 0; i < pinfo.size(); i++) {if (pinfo.get(i).packageName.equalsIgnoreCase(packageName))return true;}return false;}}

2、下载文档类

public class DownloadUtils {private static ProgressDialog mDialog = null;/*** 显示下载进度条** @param aty*/public static void showProgressDialog(Activity aty) {if (mDialog == null) {mDialog = new ProgressDialog(aty);mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//设置风格为圆形进度条mDialog.setMessage(aty.getResources().getString(R.string.msg_downloading));mDialog.setIndeterminate(false);//设置进度条是否为不明确mDialog.setCancelable(true);//设置进度条是否可以按退回键取消mDialog.setCanceledOnTouchOutside(false);mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {mDialog = null;}});mDialog.show();}}/*** 关闭下载进度条*/public static void closeProgressDialog() {if (mDialog != null) {mDialog.dismiss();mDialog = null;}}/*** 获取打开文档意图** @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.invt.fileprovider", file);}String type = getMIMEType(file);//优先使用WPS打开//检测是否安装了wps软件,没有安装选择默认打开Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);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");intent.setDataAndType(uri, type);}return intent;}/*** 下载文件到sdcard** @param fileName* @param input*/public static void writeToSDCard(String fileName, InputStream input) {// 判断是否挂载了SD卡String storageState = Environment.getExternalStorageState();if (storageState.equals(Environment.MEDIA_MOUNTED)) {String directory = getDownloadPath();File dir = new File(directory);if (!dir.exists()) {dir.mkdirs();}File file = new File(directory, fileName);if (file.exists()) {file.delete();}try {FileOutputStream fos = new FileOutputStream(file);byte[] b = new byte[2048];int j = 0;while ((j = input.read(b)) != -1) {fos.write(b, 0, j);}fos.flush();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}/*** 获取下载路径** @return*/public static String getDownloadPath() {String compName = AppString.getCompanyName();return Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + compName + "/Doc/";}/*** 获取文档类型,并打开** @param f* @return*/private static String getMIMEType(File f) {String type = "";String fName = f.getName();/* 取得扩展名 */String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length()).toLowerCase();/* 依扩展名的类型决定MimeType */if (end.equals("pdf")) {type = "application/pdf";} else if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") ||end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {type = "audio/*";} else if (end.equals("3gp") || end.equals("mp4")) {type = "video/*";} else if (end.equals("jpg") || end.equals("gif") || end.equals("png") ||end.equals("jpeg") || end.equals("bmp")) {type = "image/*";} else if (end.equals("apk")) {type = "application/vnd.android.package-archive";} else if (end.equals("pptx") || end.equals("ppt")) {type = "application/vnd.ms-powerpoint";} else if (end.equals("docx") || end.equals("doc")) {type = "application/vnd.ms-word";} else if (end.equals("xlsx") || end.equals("xls")) {type = "application/vnd.ms-excel";} else {//如果无法直接打开,就跳出软件列表给用户选择type = "*/*";}return type;}}

3、使用

        DownloaderTask task = new DownloaderTask();task.execute(mDownloadUrl);
/*** 任务类*/private class DownloaderTask extends AsyncTask<String, Void, String> {@Overrideprotected String doInBackground(String... params) {String url = params[0];String fileName = url.substring(url.lastIndexOf("/") + 1);try {fileName = URLDecoder.decode(fileName, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}MyLogger.i("download", "fileName=" + fileName);try {URL resUrl = new URL(url);HttpURLConnection conn = (HttpURLConnection) resUrl.openConnection();conn.connect();InputStream input = conn.getInputStream();DownloadUtils.writeToSDCard(fileName, input);input.close();return fileName;} catch (Exception e) {e.printStackTrace();return null;}}@Overrideprotected void onCancelled() {super.onCancelled();}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);DownloadUtils.closeProgressDialog();if (result == null) {ToastUtils.showShortToast(StartActivity.this, R.string.msg_downloaderror);return;}ToastUtils.showShortToast(StartActivity.this, R.string.msg_downloadsuccess);String dir = DownloadUtils.getDownloadPath();File file = new File(dir, result);Intent intent = DownloadUtils.getFileIntent(StartActivity.this, file);//自动打开startActivity(intent);}@Overrideprotected void onPreExecute() {super.onPreExecute();DownloadUtils.showProgressDialog(StartActivity.this);}@Overrideprotected void onProgressUpdate(Void... values) {super.onProgressUpdate(values);}}

核心代码:

/*** 获取打开文档意图** @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.invt.fileprovider", file);}String type = getMIMEType(file);//优先使用WPS打开//检测是否安装了wps软件,没有安装选择默认打开Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);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");intent.setDataAndType(uri, type);}return intent;}

完!!!

Android默认优先使用WPS打开PDF文档相关推荐

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

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

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

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

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

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

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

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

  5. Android调用WPS第三方App打开PDF文档,一直停留在首页,提示正在加载文档类型

    Android 7.0 以后对Uri的访问进行了限制,需要在manifest项目清单文件里面添加 provider,具体怎么写这个就不说了. 解决此问题只需添加以下代码即可: intent.addFl ...

  6. wps android qq 群,手机WPS怎样发送文档给QQ?WPS怎样发送文档给QQ教程

    软件大小: 52.26MB 软件版本: 2.1.0 软件类型: 办公工具 查看详情 直接下载 手机WPS怎样发送文档给QQ?不少刚使用手机WPS的人不晓得怎么操作,那么下面来看看WPS怎样发送文档给Q ...

  7. 使用Cajviewer打开pdf文档的一个发现

    最近上期刊网看论文,发现Cajviewer可以打开pdf类型的论文.这有什么大不了的?您一定这么想. 我用Cajviewer打开以前收集的pdf格式的文档时有个意外的发现.有些pdf文档,作者设了很多 ...

  8. [解决方案] Mendelay无法打开pdf文档:显示 unable to open this file

    前言 本文旨在解决:明明pdf文件存在且能打开,但是在Mendelay中却提示打不开的情况. 为什么在此记录呢? 因为我想了很久,最后才通过"蛛丝马迹"找到原因,这个过程很有思辨意 ...

  9. 手机如何打开PDF文档并分类整理?

    我们日常经常需要使用手机查看各种PDF文件,尤其是电子书,那么用手机怎样才能打开PDF文件呢?能不能将需要查看的文档进行分类整理呢? 首先手机打开PDF文件需要安装PDF阅读器,比如我们安装极速PDF ...

最新文章

  1. RxJava 过滤操作符skip 与 skipLast
  2. matlab svr 预测,SVR 多目标预测
  3. Mono 把 .NET 应用程序移植到 Linux
  4. 吃了这些数据集和模型,跟 AI 学跳舞,做 TensorFlowBoys
  5. 在C#中,变量名前的@符号是什么意思? [重复]
  6. 虚拟主机6大骗术,站长朋友小心了
  7. Ubuntu开启NFS、SSH服务(驱动开发用到、电脑端登录ARM板用到)
  8. ie浏览器剪贴板操作警告弹窗关闭方法
  9. paip.提升性能---- 网站并发数的总结.txt
  10. 利用 MATLAB 和 DCRAW 处理数码相机 RAW 文件的完整流程
  11. PyQt5-Label背景颜色和文本颜色的设置
  12. 电脑桌面的计算机图标都不见了,如何解决电脑桌面的图标都不见了的问题
  13. html的progress 怎么改变默认样式
  14. 基于ZYNQ的VGA驱动
  15. 2020年1024程序员节,成为CSDN博客专家
  16. 基于arduino、ros手柄控制机械臂
  17. 有关信息学竞赛的常见问题
  18. 校园招聘--网易笔试
  19. LC并联谐振电路的原理
  20. 微信录音功能在哪里?图文教学,轻松学会微信隐藏技能

热门文章

  1. mysql源码分析——聚簇索引
  2. Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读
  3. Matlab中叉乘和点乘的区别与其在冒号表达式中“标量化”的应用
  4. 自学python第三天
  5. bugku where is flag
  6. Rundeck部署和基本使用
  7. 安卓技能之闪电侠 -- 消息推送
  8. 记一次异常Caused by: java.lang.ClassNotFoundException: cn.exrick.xboot.core.entity.XXX
  9. 类和对象——登堂入室
  10. java 获取url_Java获取当前访问url地址(SpringMVC)