文章目录
- 前言
- 一、其他软件调用文档中的安卓原生代码
- 二、在uniAPP中实现上述方式
- 三、总结
- 四、感谢
前言
由于业务需求需要,我方研发的安卓APP需要调用其他安卓APP,并且将保存返回的文件存储路径进行读取后操作。对方软件公司提供了对接文档和一个测试调用的安装包和一个目标跳转的安装包,测试调用的安装包也是用的安卓原生代码写的。但是我们的安卓应用采用的是 uniApp 的方式编译而来的,所以我们需要尝试用 uniApp 安卓的方式去实现这个功能。
一、其他软件调用文档中的安卓原生代码
Intent intent = new Intent(Intent.ACTION_VIEW);
String packageName = "com.android.**.**"; // 包名
String className = "com.android.**.**.**"; // 类名
intent.setClassName(packageName, className);
// 文件保存的路径
intent.putExtra("path", "/****/**");
// 标题
intent.putExtra("case_title", "*******标题");
// 时间
intent.putExtra("case_time", "2018-12-10");
// 地点
intent.putExtra("case_address", "xx 市 xx 区 xx 路 xxx 号 xxxx");
// 创建人
intent.putExtra("person", ".......");
// 类型
intent.putExtra("case_type", "****");
// 被人
intent.putExtra("victim", "张三");
// 文件类型
intent.putExtra("dwg_type", "平面图");
// 文件名:如果编辑修改之前绘制的现场图,则需要有本参数;否则,不需要本参数
intent.putExtra("filename", "2023521153131.cad");
startActivityForResult(intent, 0);
二、在uniAPP中实现上述方式
// 获取宿主上下文
var main = plus .android.runtimeMainActivity();
// 通过反射获取Android的Intent对象
var Intent = plus.android.importClass("android.content.Intent");
// 通过宿主上下文创建 intent
var intent =new Intent(Intent.ACTION_VIEW); // 设置要开启的Activitv包类路径
intent.setClassName("com.android.**.**","com.android.**.**.**")
// 开启新的任务栈(跨进程)
// intent.setFlags(Intent.FLAG ACTIVITY NEW TASK) ;
// uni向android原生界面传值
intent.putExtra("path","/****/****");
intent.putExtra("case_title","*******标题");
intent.putExtra("case_time","2018-12-10"):
intent.putExtra("case address","xxxx");
// ... 中间省略传参
intent.putExtra("filename","2023521153131.cad"):
// 请求码保证了,开始的新界面和返回的是同一个操作
var CODE_REQUEST= 0;
// 采用startActivityForResult开启新的界面,当界面关闭时可以处理返回结果,CODE REQUEST请求码是唯一标识
main.startActivityForResult(intent,CODE_REQUEST):
// 设置原生界面返回后的回调操作
main.onActivityResult = function(requestCode resultCode, data){
console.log(requestCode resultCode, data);
}
三、总结
实现在 uniapp 中通过 Intent 的方式启动其他APP并且传参。a 应用调用 b 应用的方式有很多,网上还有很多。