美文网首页
Android 默认使用wps打开本地文档

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

作者: mt大山 | 来源:发表于2019-01-09 10:18 被阅读0次

    最近开发一个需求是使用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,大功告成。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ejkwrqtx.html