安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开

安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开

前提: 高版本想使用Uri.fromFile() file://的形式 需要在onCreate 或init方法中添加下面代码.

 // 使高版本可以使用file://
        if(Build.VERSION.SDK_INT >= 18){
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
            builder.detectFileUriExposure();
        }

按钮点击事件

//使用说明书
        mDatabind.manual.setOnClickListener(v -> {
            String ALY_PDF_URL = "https://meter-reading.oss-cn-beijing.aliyuncs.com/leak-detection-pdf/leak-detection-pdf-app" +
                    "/说明书(软件部分-手机端).pdf";
            String Local_PDF_URL = Environment.getExternalStorageDirectory() + "/Download/Browser/供水管网渗漏智能监测终端与管理系统使用说明书(软件部分-手机端).pdf";
            ToastUtil.showToast("正在下载使用说明书...");
            Download(ALY_PDF_URL,Local_PDF_URL);
            ToastUtil.showToast("下载成功");
            getSelectWindow(Local_PDF_URL);
        });

打开选择窗口

 /**
     * 打开选择窗口
     * @param URL 本地pdf文件存储路径
     */
    public void getSelectWindow(String URL){
        final String[] arr = {"WPS office"};
        AlertDialog.Builder alertBuilder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), null));
        alertBuilder.setItems(arr, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                if (arr[i].equals("WPS office")) {
                    goWpsOffice(URL);
                }
                alertDialog.dismiss();
            }
        });
        alertDialog = alertBuilder.create();
        Window window = alertDialog.getWindow();
        window.setGravity(Gravity.BOTTOM);
        alertDialog.show();
    }

判断是否存在app

    /**
     * 判断是否存在app
     * @param appName
     * @return
     */
    public boolean isMobile_spExist(String appName) {
        PackageManager manager = getActivity().getPackageManager();
        List<PackageInfo> pkgList = manager.getInstalledPackages(0);
        for (int i = 0; i < pkgList.size(); i++) {
            PackageInfo pI = pkgList.get(i);
            if (pI.packageName.equalsIgnoreCase(appName))
                return true;
        }
        return false;
    }

调用第三方软件WPS

    /**
     * 调用第三方软件WPS
     */
    private void goWpsOffice( String fileUrl) {
        if (isMobile_spExist(WpsModel.PackageName.NORMAL)) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setPackage(WpsModel.PackageName.NORMAL);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            //将功能Scheme以URI的方式传入data
            Uri uri = Uri.fromFile(new File(fileUrl));
            intent.setData(uri);
            getActivity().startActivity(intent);
        } else {
            Uri uri = Uri.parse("market://details?id=cn.wps.moffice_eng");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
                getActivity().startActivity(intent);
            }
        }
    }

从阿里云服务器下载说明书pdf

 /**
     * 从阿里云服务器下载说明书pdf
     * @param path 阿里云pdf路径
     * @param Local_PDF_URL 本地手机pdf存储路径
     */
    public void Download(final String path, String Local_PDF_URL){
        //将用户信息传入服务器
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    URL url = new URL(path);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setConnectTimeout(5000);//推荐设置网络延时
                    httpURLConnection.setReadTimeout(5000);//设置从主机读取数据超时(单位:毫秒)
                    httpURLConnection.setRequestMethod("GET");
                    httpURLConnection.setDoInput(true);
                    httpURLConnection.connect(); //此处必须显式进行连接
                    //以下同Post
                    //获取响应的状态码,判断是否请求成功
                    if(httpURLConnection.getResponseCode()==HttpURLConnection.HTTP_OK){
                        //获得网络字节输入流对象
                        InputStream is=httpURLConnection.getInputStream();// 不是操作文件的吗
                        //建立内存到硬盘的连接
                        FileOutputStream fos=new FileOutputStream(new File(Local_PDF_URL));
                        //老三样 写文件
                        byte[] b=new byte[4 * 1024];
                        int len=0;
                        while((len=is.read(b))!=-1){  //先读到内存
                            fos.write(b, 0, len);
                        }
                        fos.flush();
                        fos.close();
                    }
                }catch (IOException ioe){
                }
            }
        }.start();
    }

WpsModel

public class WpsModel {

    public static final String OPEN_MODE = "OpenMode";// 打开文件的模式。
    public static final String SEND_SAVE_BROAD = "SendSaveBroad";// 文件保存时是否发送广播。
    public static final String SEND_CLOSE_BROAD = "SendCloseBroad";// 文件关闭时是否发送广播
    public static final String THIRD_PACKAGE = "ThirdPackage";// 第三方的包名,关闭的广播会包含该项。
    public static final String CLEAR_BUFFER = "ClearBuffer";// 关闭文件时是否请空临时文件。
    public static final String CLEAR_TRACE = "ClearTrace";// 关闭文件时是否删除使用记录。
    public static final String CLEAR_FILE = "ClearFile";// 关闭文件时是否删除打开的文件。
    public static final String VIEW_PROGRESS = "ViewProgress";// 文件上次查看的进度。
    public static final String AUTO_JUMP = "AutoJump";// 是否自动跳转到上次查看的进度。
    public static final String SAVE_PATH = "SavePath";// 文件保存路径。
    public static final String VIEW_SCALE = "ViewScale";// 文件上次查看的视图的缩放。
    public static final String VIEW_SCALE_X = "ViewScrollX";// 文件上次查看的视图的X坐标。
    public static final String VIEW_SCALE_Y = "ViewScrollY";// 文件上次查看的视图的Y坐标。
    public static final String USER_NAME = "UserName";// 批注的作者。
    public static final String HOMEKEY_DOWN = "HomeKeyDown";// 监听home键并发广播
    public static final String BACKKEY_DOWN = "BackKeyDown";// 监听back键并发广播
    public static final String ENTER_REVISE_MODE = "EnterReviseMode";// 以修订模式打开文档
    public static final String CACHE_FILE_INVISIBLE = "CacheFileInvisible";// Wps生成的缓存文件外部是否可见

    public class OpenMode {
        public static final String NORMAL = "Normal";// 只读模式
        public static final String READ_ONLY = "ReadOnly";// 正常模式
        public static final String READ_MODE = "ReadMode";// 打开直接进入阅读器模式
        // 仅Word、TXT文档支持
        public static final String SAVE_ONLY = "SaveOnly";// 保存模式(打开文件,另存,关闭)
        // 仅Word、TXT文档支持
    }

    public class ClassName {
        public static final String NORMAL = "cn.wps.moffice.documentmanager.PreStartActivity2";
        // 普通版
        public static final String ENGLISH = "cn.wps.moffice.documentmanager.PreStartActivity2";
        // 英文版
        public static final String ENTERPRISE = "cn.wps.moffice.documentmanager.PreStartActivity2";
        // 企业版
    }

    public class PackageName {
        public static final String NORMAL = "cn.wps.moffice_eng";// 普通版
        public static final String ENGLISH = "cn.wps.moffice_eng";// 英文版
    }

    public class Reciver {
        public static final String ACTION_BACK = "com.kingsoft.writer.back.key.down";// 返回键广播
        public static final String ACTION_HOME = "com.kingsoft.writer.home.key.down";// Home键广播
        public static final String ACTION_SAVE = "cn.wps.moffice.file.save";// 保存广播
        public static final String ACTION_CLOSE = "cn.wps.moffice.file.close";// 关闭文件广播
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴走的山交

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值