最近做一个安卓端OA需求的时候,需要调用第三方应用打开文档,一下子想到了免费的wps,于是尝试在OA调用wps打开文档,由于wps是免费的,可以一直用。发现还可以调用wps同时打开多个文档,而且打开的文档在wps内部还是可以切换文档视图的,感觉体验还不错,可以分享下。


调用代码示例如下:



private void openFiles(List<FileItem> fileSelects){
        ArrayList<Uri> uriList = new ArrayList<>();
        for (FileItem fileSelect : fileSelects) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uriList.add( FileProvider.getUriForFile(this,getPackageName()+".fileprovider", new File(fileSelect.filePath)));
            } else {
                uriList.add(Uri.fromFile(new File(fileSelect.filePath)));
            }
        }
        try {
            if (uriList.size() == 0) {
                return;
            }
            FileApi fileApi =  WpsSdk.getInstance().getApi(FileApi.class);
            if (fileApi == null){
                return;
             }
            if (uriList.size() > 1) {
                //多开
                 fileApi.openFiles(this,uriList);
            } else {
               //单开
                fileApi.openFile(this,uriList.get(0));
            }
        } catch (Exception e) {
            e.printStackTrace();
       }


第三方OA应用调用WPS同时打开多个文档_初始化


这里是通过sdk打开的,能正常打开,打开多个文档后还能切换不同文档的视图。

意外的是,连打开pdf也是支持的,很赞。

sdk的初始化很简单,几句代码搞定:


SdkConfig config = new SdkConfig.Builder()
   //开启日志开关
      .setEnableDebug(true)
      .build();
//初始化
WpsSdk.getInstance().init(this,config);


还可以注册文档打开/保存等操作的时间监听,这样OA系统可以利用监听事件做自己的业务。

FileApi fileApi = WpsSdk.getInstance().getApi(FileApi.class);
if (fileApi != null) {
    fileApi.addEventListener(SingleOpenActivity.this, ApiEvent.DocumentAfterSave, new EventListener() {
        @Override
        public void onEvent(String eventName, Bundle bundle) {
           String path = bundle.getString("CurrentPath");
            //注意在高版本Android系统中,第三方应用是无法读取WPS私有路径,需要通过获取WPS提供的URI来访问文档数据
            Uri currentFileUri = bundle.getParcelable("CurrentFileUri");
            Log.d("WpsSdk", "demo onEvent DocumentAfterSave : s=" + s + " bundle=" + bundle + " path=" + path+ " currentFileUri="+currentFileUri);
            Utils.showToast(SingleOpenActivity.this, "文档保持路径:" + currentFileUri);
        }
    });
    //注意在调用文档打开之前进行注册
    fileApi.openFile(this, fileUri, bundle);
}

上面的实力,可以在文档打开后弹出OA自己的UI,或者保存文件后OA做文件上传到服务器等操作


另外,打开文档的过程中还可以做到文件不落地,即通过流文件的方式打开。


附上一些sdk的说明文档把,官方文档写的还行,还是容易看懂的

第三方OA应用调用WPS同时打开多个文档_初始化_02


详情见https://p.wpseco.cn/wiki/doc/654b2b92b379f04d9535e5ce