快速体验WPS SDK接入

文档由 肖骁 于 2024-03-13 02:23 创建,由 肖骁 于 2024-03-22 08:41 更新
文档标签:
文档分类:
158

WPS官方提供了便于移动第三方应用快速接入WPS文档能力的SDK,通过WPS-SDK第三方应用能够实现第三方应用和WPS应用进行交互,从而使用WPS的文档能力。

 

1、能力范围

1.1 基础开放能力

  • 打开文档能力
    • 单开:一次只打开一个文档,支持WPS各组件(文字、表格、演示、PDF等)
    • 多开:一次打开多个文档,支持WPS各组件(文字、表格、演示、PDF等)
  • 新建文档能力
    • 支持文字组件格式(Word)的文档新建
    • 支持表格组件格式(Excel)的文档新建
    • 支持演示组件格式(PPT)的文档新建
  • 获取WPS端内文档

通过SDK可以调起WPS文件选择,选择WPS端内文档从而将文档返回给第三方应用

  • 事件通知闭环能力
    • 支持文档保存事件通知:WPS保存文档后会通知给第三方应用,形成交互闭环
    • 支持文档关闭事件通知:WPS关闭文档后会通知给第三方应用,形成交互闭环

1.2 更多能力

https://365.kdocs.cn/l/clq8BwkjL5lF

2、接入准备

获取SDK集成相关物料包含

  • 集成依赖库
  • 集成参考Demo
  • 集成参考文档

详见:https://365.kdocs.cn/l/clq8BwkjL5lF

3、开始集成

3.1 环境配置

在自己项目工程中导入wps-sdk依赖库(wps_sdk.aar)

  • 将wps-sdk-xxx.aar 拷贝到项目中的libs目录下
  • 在项目build.gradle中添加
dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir:'libs')
    //或者
//    implementation files("/libs/wps-sdk-xxx.aar")
     .....
}

3.2. SDK初始化

在第三方应用Application中的onCreate方法中调用

调用 WpsSdk.getInstance().init(…)进行初始化

参考示例

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        SdkConfig config = new SdkConfig.Builder()
                //开启日志开关
                .setEnableDebug(BuildConfig.DEBUG)
//                .setWpsPackageName("cn.wps.moffice_i18n_TV") //传入WPS的包名,比如需要调用TV版等,默认调用WPS版本不需要设置
                .build();
        //初始化
        WpsSdk.getInstance().init(this,  config, new ResultCallback() {
            @Override
            public void onCallback(Result result) {
                if (result.code == 0){
                    Toast.makeText(MyApplication.this, "WPS SDK初始成功", Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(MyApplication.this, "初始化失败:"+result, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

3.3 功能接口调用

3.3.1 打开文档

WPS SDK支持两种打开文档能力:单开和多开

3.3.1.1单开

一次打开一个文档

//1.------------ 将filePath 转换成FileUri----------
String filePath = "/storage/emulated/0/Android/data/cn.wps.sdk.demo/files/document/123.docx";
Uri fileUri; // Android 7.0(包含)之后使用FileProvider,之前使用file协议if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// File转化为FileProvider类型的Uri,对应FileProvider名字必须AndroidManifest.xml中定义匹配
  fileUri = FileProvider.getUriForFile(context, getPackageName() + ".fileprovider",     new File(filePath));
  } else{
      fileUri = Uri.fromFile(filePath);
  }
//2.------------ 调用WPS SDK 相关接口打开文档----------       
FileApi fileApi = WpsSdk.getInstance().getService(FileApi.class);
if (FileApi != null) {
    fileApi.openFile(context, fileUri);
}

PS:

  • 详细代码请参考Demo中的cn.wps.sdk.demo.activity.SingleOpenActivity#openFile

3.3.1.2 多开

一次可以打开多个文档

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);
            (fileApi == null){
              return;
            }
            if (uriList.size() > 1) {
                //多开
                 fileApi.openFiles(this,uriList);
            } else {
               //单开
                fileApi.openFile(this,uriList.get(0));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 

PS:

  • 详细代码请参考Demo中的cn.wps.sdk.demo.activity.MultiOpenActivity#openFiles

 

3.3.2 新建文档

WPS SDK支持通过API接口新建文件能,目前支持文档类型为文字、表格、演示三组件,详细参见FileType类型

public enum FileType {

    /**
     * 文字组件(World)
     */
    WPS,
    /**
     * 演示组件(PPT)
     */
    WPP,
    /**
     * 表格组件(Excel)
     */
    ET
}

调用参考代码:

//新建文档参考代码
private void newFile(){
    FileType fileType = FileType.WPS;//新建文字类型
    FileApi fileApi = WpsSdk.getInstance().getApi(FileApi.class);
    if (fileApi != null) {
      fileApi.newFile(NewDocumentActivity.this, fileType);
    }
}

 

3.3.3 获取WPS端内文档

通过SDK可以调起WPS文件选择器,选择WPS端内文档从而将文档返回给第三方应用

调用相关API接口,调起WPS文件选择器

参考示例代码:

FileManagerApi fileManagerApi = WpsSdk.getInstance().getApi(FileManagerApi.class);
if (fileManagerApi != null) {
    fileManagerApi.selectFiles(MainActivity.this, new ResultCallback<Uri>() {
        @Override
        public void onCallback(Result<Uri> result) {
            if (result.code == 0) {
                Uri fileUri = result.data;
                Log.d("WpsSdkLog", "MainActivity selectFiles onCallback 转换输出路径 :fileUri=" + fileUri);
                //从WPS路径拷贝到第三方应用路径
//                        String outFile = FileUtil.copyFileFromUri(MainActivity.this, fileUri, "output");
//                        Log.d("WpsSdkLog", "MainActivity selectFiles onCallback: outFile=" + outFile);
                Toast.makeText(MainActivity.this, " 选择的文件路径:" + fileUri, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, " 出现异常:" + result.msg, Toast.LENGTH_SHORT).show();
            }
        }
    });
}

 

3.3.4 事件通知

3.3.4.1 文档保存事件

支持文档保存事件通知:WPS保存文档后会通知给第三方应用,形成交互闭环。

参考示例代码:

FileApi fileApi = WpsSdk.getInstance().getApi(FileApi.class);
if (fileApi != null) {
    fileApi.addEventListener(SingleOpenActivity.this, ApiEvent.DocumentAfterSave, new EventListener() {
        @Override
        public void onEvent(String s, Bundle bundle) {
            String path = bundle.getString("CurrentPath");
            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, uriList.get(0), bundle);
}

3.3.4.2 文档关闭事件

支持文档关闭事件通知,WPS文档关闭后会通知给第三方应用,形成交互闭环。

参考示例代码:

FileApi fileApi = WpsSdk.getInstance().getApi(FileApi.class);
if (fileApi != null) {           
  fileApi.addEventListener(SingleOpenActivity.this, ApiEvent.DocumentAfterClose, new EventListener() {
    @Override
    public void onEvent(String s, Bundle bundle) {
        String path = bundle.getString("CurrentPath");
        Uri currentFileUri = bundle.getParcelable("CurrentFileUri");
        Log.d("WpsSdk", "demo onEvent DocumentAfterClose : s=" + s + " bundle=" + bundle + " path=" + path + " currentFileUri=" + currentFileUri);
        Utils.showToast(SingleOpenActivity.this, "文档路径:" + currentFileUri);
    }
  });
  fileApi.openFile(this, uriList.get(0), bundle);
}

 

4、联系我们

WPS SDK集成资料申请