对Native 与 React 交互的学习

4 篇文章 0 订阅
4 篇文章 0 订阅

对Native 与 React 交互的学习

1\ 新建 ZhuRnCallAndroid.class 继承 ReactContextBaseJavaModule 复写getName方法
并分别定义:React调用Native 函数 :rnCallAndroid()
Native调用React代码 函数 : androidToRn()

     public class ZhuRnCallAndroid extends ReactContextBaseJavaModule {

         private ReactApplicationContext mContext;

           public ZhuRnCallAndroid(ReactApplicationContext reactContext) {
              super(reactContext);
              mContext = reactContext;
           }

           @Override
           public String getName() {
              return "ZhuRnCallAndroid";
           }

           @ReactMethod
           public void rnCallAndroid(String msg, final Callback isOk, final Callback err){
             Toast.makeText(mContext,msg,Toast.LENGTH_SHORT).show();
             new Thread(new Runnable() {
                @Override
                 public void run() {
                    try{
                         Thread.sleep(3000);
                         String str = null;
                         str.toString();
                         isOk.invoke("回调成功");    //通过这种方式 已经实现了Android调用React端代码的通讯
                     }catch (Exception e){
                         err.invoke("回调失败");   //通过回调的方式是可控的
                     }
                  }
                }).start();
               //Intent  intent = new Intent(mContext,MyActivity.class);    //单纯的起一个Activity ,然后在Native中触发一个调用React事件
               //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
               //mContext.startActivity(intent);
           }


        /**
        * 调用React 端
        * @param msg
        */
           public void androidToRn(String msg){ 
                //Native端主动发送事件,React端被动的接收
               mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("zhuMonth",msg);
          }
         }  

2\ 新建类 ZhuMyReactPack.class 并 implements ReactPackage ,并注册ZhuRnCallAndroid接口.

public class ZhuMyReactPack implements ReactPackage {
  public  ZhuRnCallAndroid mZhuRnCallAndroid;
  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
      List<NativeModule> list = new ArrayList<NativeModule>();
      mZhuRnCallAndroid = new ZhuRnCallAndroid(reactContext);
      list.add(mZhuRnCallAndroid);   //注册
      return list;
  }

  @Override
  public List<Class<? extends JavaScriptModule>> createJSModules() {
      return Collections.emptyList();
  }

  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Collections.emptyList();
  }
}

3\ RN部分代码 导入NativeModules React调用Native

View部分
    <Text onPress={this._onPress} style={{textAlign: 'center',backgroundColor:'red',fontSize:50}}>
        OnClickToAndroid
    </Text>


_onPress() {
    NativeModules.ZhuRnCallAndroid.rnCallAndroid("啷个哩个啷",
        (isOk)=> {
            console.log(isOk);    //打印的信息从Android端返回
        },
        (err)=>{
            console.log(err);
         });
}

4\ 导入DeviceEventEmitter Native调用React

 componentWillMount() {
    DeviceEventEmitter.addListener("zhuMonth",this.handAndroidMan);
}

componentWillUnMount() {
    DeviceEventEmitter.remove("zhuMonth",this.handAndroidMan);
}

/**
 * Android端回调触发打印日志
 * @param msg
 */
handAndroidMan(msg){
     console.log(msg);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值