webapp与安卓原生应用通信过程

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;
    }

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值