美文网首页AndroidAndroid笔记
安卓APP调用WPS打开Office文件并返回APP

安卓APP调用WPS打开Office文件并返回APP

作者: 敲代码的小三爷 | 来源:发表于2018-11-13 17:29 被阅读561次

    原创文章:转载请注明出处

    安卓APP调用WPS打开Office文件并返回APP功能实现(附wps工具)

    在某些app(如OA系统app)开发工程中,往往会遇到编辑Office文档的需求,而我们一般采取最为有效的方法便是调用三方的专业Office软件。

    基础功能:app跳转WPS打开Office文档

    • 检查是否已安装WPS
    private boolean checkWps(){
        Intent intent = getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");//WPS个人版的包名
        if (intent == null) {
            return false;
        } else {
            return true;
        } 
    }
    
    • 打开文档
    Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage( "cn.wps.moffice_eng");
    Bundle bundle = new Bundle();
    intent.setData(Uri.parse(fileUrl));//这里采用传入文档的在线地址进行打开,免除下载的步骤,也不需要判断安卓版本号
    intent.putExtras(bundle);
    mActivity.startActivity(intent);
    

    进阶功能:设置文档打开模式,使用广播进行WPS操作监听

    • 创建接口与广播
    // 回调接口
    public interface WpsInterface {
        void doRequest(String filePath);//filePath为文档的保存路径
        void doFinish();
    }
    // 广播接收器
    private class WpsCloseListener extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                if (intent.getAction().equals("cn.wps.moffice.file.save")) {
                    String fileSavePath = intent.getExtras().getString(Define.SAVE_PATH);
                    if(canWrite) {
                        wpsInterface.doRequest(fileSavePath);// 保存回调
                    }
                } else if (intent.getAction().equals("cn.wps.moffice.file.close")||
                        intent.getAction().equals("com.kingsoft.writer.back.key.down")) {
                    wpsInterface.doFinish();// 关闭,返回回调
                    mActivity.unregisterReceiver(wpsCloseListener);//注销广播
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    • 注册广播
    public void initWpsCloseListener() {
        wpsCloseListener = new WpsCloseListener();
        IntentFilter filter = new IntentFilter(Define.OFFICE_SERVICE_ACTION);
        filter.addAction("com.kingsoft.writer.back.key.down");//按下返回键
        filter.addAction("com.kingsoft.writer.home.key.down");//按下home键
        filter.addAction("cn.wps.moffice.file.save");//保存
        filter.addAction("cn.wps.moffice.file.close");//关闭
        mActivity.registerReceiver(wpsCloseListener,filter);//注册广播
    }
    
    • 打开文档
    public void openDoc() {
        Bundle bundle = new Bundle();
        if (canWrite) {// 判断是否可以编辑文档
            bundle.putString("OpenMode", "Normal");// 一般模式
        } else {
            bundle.putString("OpenMode", "ReadOnly");// 只读模式
        }
        bundle.putBoolean("SendSaveBroad", true);// 关闭保存时是否发送广播
        bundle.putBoolean("SendCloseBroad", true);// 关闭文件时是否发送广播
        bundle.putBoolean("HomeKeyDown", true);// 按下Home键
        bundle.putBoolean("BackKeyDown", true);// 按下Back键
        bundle.putBoolean("IsShowView", false);// 是否显示wps界面
        bundle.putBoolean("AutoJump", true);// //第三方打开文件时是否自动跳转
        //设置广播
        bundle.putString("ThirdPackage", mActivity.getPackageName());
        //第三方应用的包名,用于对改应用合法性的验证
        //bundle.putBoolean(Define.CLEAR_FILE, true);
        //关闭后删除打开文件
        intent.setAction(android.content.Intent.ACTION_MAIN);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        intent.setData(Uri.parse(fileUrl));
        intent.putExtras(bundle);
        mActivity.startActivity(intent);
    }
    
    • 返回到你的app页面
      *为了适配大部分机型而采用以下方式将你的app从后台拉回前台,需要将你的跳转前(栈顶)activity启动模式设置为singleTop,且重新打开的页面为新的页面,需要手动finish();
    public void appBack() {
        try {
            ActivityManager mAm = (ActivityManager) mActivity.getSystemService(Context.ACTIVITY_SERVICE);
            //获得当前运行的task
            List<ActivityManager.RunningTaskInfo> taskList = mAm.getRunningTasks(1);
            //找到当前应用的task,并启动task的栈顶activity,达到程序切换到前台
            for (ActivityManager.RunningTaskInfo rti : taskList) {
                if (rti.topActivity.getPackageName().equals(mActivity.getPackageName())) {
                    Intent LaunchIntent = new Intent(Intent.ACTION_MAIN);
                    ComponentName cn = new ComponentName(mActivity.getPackageName(), rti.topActivity.getClassName());
                    LaunchIntent.setComponent(cn);
                    mActivity.startActivity(LaunchIntent);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    希望此篇文章能为你带来帮助!再会!如有疑问🤔️或需要相关工具请联系我
    联系QQ:1018895572
    最后,祝你生活愉快!

    相关文章

      网友评论

        本文标题:安卓APP调用WPS打开Office文件并返回APP

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