H5多应用调用方案设计
1.引言
1.1 目的
为指导第三方应用开发人员安卓系统上调用Html5应用程序开发提供方案设计
2.方案设计
2.1总体方案设计介绍
2.2 H5应用层接口
2.2.1 runApp(packageName,activity,jsonData,succss,fail);
该接口的主要功能是调用H5应用,如上图H5APP1调用H5APP2。
入参分别为:
packageName:需要调用的安卓APP2的应用包名,值为字符串类型
activity:安卓应用的activity,值为字符串类型(需要前面加上应用包名)
jsonData:传给H5APP2的数据,值为json对象
succss:处理H5APP2的返回的成功回调
fail:处理H5APP2的返回的失败回调
2.2.2 appResult(resultJsonObj)
该接口主要的功能是将H5APP2处理的数据返回给H5APP1
入参:
resultJsonObj:值为json对象,H5APP2返回给H5APP1的数据
2.3 native层实现原理介绍
安卓原生应用间的调用是通过采用startActivityForResult机制来实施的
基本原理:
安卓应用app1通过startActivityForResult方式调用安卓应用App2,安卓应用APP2收到传递过来的Bundle数据进行处理。
在处理完成之后,安卓应用app2通过setResult,并且finish自己的Activity。
安卓应用app1在onActivityResult接收到处理结果
2.4.六大交互过程案例介绍
2.4.1 H5APP1到安卓原生应用1过程
H5APP1到安卓原生应用是通过cordova框架提供的插件,H5APP1提供的接口为:
var device = cordova.require("pax-plugin-device.PaxDevice");
device.runApp(packageName,activity,jsondata,succss,fail);
其中device为cordova插件对js层提供的对象
2.4.2安卓原生应用APP1到安卓原生应用APP2过程
安卓应用app1通过startActivityForResult方式调用安卓应用App2过程:
ComponentName componentName = new ComponentName(args.getString(0), args.getString(1));
ComponentName(packageName, activity)接口的两个参数分别是安卓APP2的应用包名和安卓APP2的应用的界面名;这里使用的是H5APP1传下来的
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("transDate", args.get(2).toString());
处理H5APP1传下来的json数据,传递给安卓原生app2
intent.putExtras(bundle);
intent.setComponent(componentName);
myCordova.cordova.startActivityForResult(myCordova, intent, 0);
调用安卓原生APP2的应用
2.4.3安卓原生应用APP2到H5APP2过程
安卓原生应用APP2通过Intent i = getIntent() ,获取安卓原生应用APP1传递过来的json数据
String transData=i.getStringExtra("transDate");
然后调用安卓webview 的loadUrl(launchUrl+"?"+transData);方法将json数据嵌入到url中传递给H5APP2应用
2.4.4 H5APP2到安卓原生APP2
H5APP2处理接收的url数据,并通过cordova框架插件提供的接口将处理结果传递给安卓原生APP2
var device = cordova.require("pax-plugin-device.PaxDevice");
device.appResult(resultJsonObj);
入参为json对象。如:{
retCode:”success”,
amt:”0.1”
}
2.4.5 安卓原生APP2到安卓原生APP1
H5APP2通过调用cordova接口将结果送给安卓原生APP2, 在处理完成之后,安卓应用APP2通过setResult,将数据传递给安卓原生APP1,并且finish自己的Activity。
示例代码如下:
Intent mIntent = new Intent();
mIntent.putExtra("appResultData", args.get(0).toString());
// 设置结果,并进行传送
myCordova.cordova.getActivity().setResult(resultCode, mIntent);
myCordova.cordova.getActivity().finish();
2.3.6 安卓原生APP1到H5APP1
安卓应用APP1通过onActivityResult接口接收到安卓原生APP2传递的数据,并调用cordova回调success将数据传递给H5APP1。
示例代码如下:
private static CallbackContext _callbackContext;
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("enter onActivityResult ","dsadsa");
String change01 = data.getStringExtra("appResultData");
// 根据上面发送过去的请求吗来区别
switch (requestCode) {
case 0:
Log.d("----2222+++---:",change01);
_callbackContext.success(change01);
break;
default:
break;
}