最近做一个安卓端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();
}
这里是通过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的说明文档把,官方文档写的还行,还是容易看懂的