android回调weex android调用weex --- weex android交互

第一篇文章中,已经粗略讲述了,安卓中集成weex sdk的方法;
这种情况一般用于在安卓程序中,部分界面使用轻应用,所以集成weex来代替webview实现部分网页的功能;android回调weex android调用weex — weex android交互

这片文章讲述下,js如何调用android native的功能,及natvie如何主动调用js的函数。
weex已经提供了一些功能,但是有一些比如:获取mac地址、封装一些natvie的自带播放功能给js使用,则需要提供js调用native的功能;当然,natvie有时候做完一些事情后,也需要主动调用js函数,告诉js接下来的动作。

**

第一部分,js调用natvie

**
参考官网,添加wxmodule模块。

总结一下 native中要改动两个文件,js中直接使用:
**

1.创建新的模块XXModule 继承WXModule

**
在此模块中增加接口,并增加注释;例如:

 public class MyModule extends WXModule {

  //run ui thread
  @JSMethod (uiThread = true)
  public void printLog(String msg) {
    Toast.makeText(mWXSDKInstance.getContext(),msg,Toast.LENGTH_SHORT).show();
  }

  //run JS thread
  @JSMethod (uiThread = false)
  public void fireEventSyncCall(){
   //implement your module logic here
  }
}

2.在application中注册此模块:

public class WXApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        WXSDKEngine.addCustomOptions("appName", "WXSample");
        WXSDKEngine.addCustomOptions("appGroup", "WXApp");
        WXSDKEngine.initialize(this,
                new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build()
        );
        try {
      WXSDKEngine.registerModule("MyModule", WXEventModule.class);//这里注册MyModule
        } catch (WXException e) {
            e.printStackTrace();
        }

**

3.js中使用

**

<template>
  <div>
    <text onclick="click">testMyModule</text>
  </div>
</template>

<script>
  module.exports = {
    methods: {
      click: function() {
        weex.requireModule('MyModule').printLog("I am a weex Module");//这里使用MyModule中的printLog函数,并传递参数;
      }
    }
  }
</script>

第一部分到此为止,下面讲述,natvie如何调用js呢?
**

第二部分,natvie调用js

**
weex中提供了一个JSCallBack的机制,和webview的不同,webview的使用方式不在介绍。
这里有个点,就是natvie要调用js,还是要知道调用js哪个函数,所以是需要js先调用natvie,并把回调的函数名字告诉native,然后native就可以在需要的时候进行回调了。

下面的例子是:调用自定义的module模块中函数,获取mac地址,当获取到MAC地址后呢,回调js,js在进行toast提示。

例如:

var modal = weex.requireModule('MyModule');
modal.getDeviceMac(function (string){
        //调用nativie中的方法打日志,得出回调成功了
        modal.printLog(string);
    });

这里,调用了natvie的MyModule模块的getDeviceMac函数,并传递了回调函数,只不过函数没起名字,这没有什么影响。
接下来看native如何处理:

@JSMethod(uiThread = false)
    public void getDeviceMac(JSCallback jsCallback) {
        jsCallback.invoke(SystemUtils.getWlanMac());
    }

可以看到,回调的方法是:jsCallback.invoke(),还有一个jsCallback.invokeAndKeepAlive();这个是一直回调,一般使用前者即可。
其中invoke中可以携带参数(上面示例中带的string参数),定义如下:

public interface JSCallback {
  /**
   * invoke javascript callback method, this method will destoryed after invoke.
   * @param data
   */
  void invoke(Object data);

  /**
   * invoke javascript callback method and keep callback alive for later use.
   * @param data
   */
  void invokeAndKeepAlive(Object data);
}

参考文章:Weex和Android之间交互传递

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值