原创文章:转载请注明出处
安卓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
最后,祝你生活愉快!
网友评论