Android 默认使用wps打开本地文档

2019-01-09  本文已影响0人  mt大山

最近开发一个需求是使用wps打开本地的文档,所以记录一下方便以后查阅

对于Android 7.0 以后文件的读写 请参照一下链接
https://www.jianshu.com/p/5ebfa842e6c1
如何跳过 7.0对文件访问的权限目前我知道的有以下两点
1、将build.gradle下的targetSdkVersion改成23以下(这个也会跳过6.0的权限,但很多应用平台以后要对这个进行检测,如果不知道6.0权限检测,可能影响APP上架)
2、在Application的onCreate中加入

  //解决FileUriExposedException。
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }

参考:https://blog.csdn.net/mashang123456789/article/details/78468847

代码:

判断手机是否安装了 wps

  private 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;
    }

获取文档类型

 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 if(end.equals("txt")){
            type = "text/plain";
        }else if(end.equals("html") || end.equals("htm")){
            type = "text/html";
        } else {
            //如果无法直接打开,就跳出软件列表给用户选择
            type = "*/*";
        }
        return type;
    }

打开文档

  private Intent getWordFileIntent(String Path) {
        File file = new File(Path);
        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri uri = Uri.fromFile(file);
        String type = getMIMEType(file);
       if(type.contains("pdf") || type.contains("vnd.ms-powerpoint") || type.contains("vnd.ms-word") || type.contains("vnd.ms-excel") || type.contains("text/plain")|| type.contains("text/html")){
           if (isInstall(this, "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);
           }
       }else{
           intent.addCategory("android.intent.category.DEFAULT");
           intent.setDataAndType(uri, type);
       }
        return intent;
    }

应用:

 Intent intent = getWordFileIntent("文件路径");
 startActivity(intent);

经测试华为手机如果没有可应用的打开方式,程序会报错。解决办法如下:
1、判断文件是否为PDF文件
推荐使用 Android PdfViewer
[链接地址:https://github.com/barteksc/AndroidPdfViewer(https://github.com/barteksc/AndroidPdfViewer)

2、如果不是PDF文件

 Intent intent = getWordFileIntent(BASE_PATH + list.get(clickPosition).get("fileName"));
                    try{
                        startActivity(intent);
                    }catch (Exception e){
                        showToast("无可用打开方式,建议下载wps后重试");
                    }

给用户一个友好提示。

OK,大功告成。

上一篇下一篇

猜你喜欢

热点阅读