ReactNative如何调用自定义的原生模块

Android

在 MainApplication .java文件中, getPackages方法中注册该模块。

该模块必须实现ReactPackage  

 public class RootViewPackage implements ReactPackage {

   public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {

            然后在里面 添加自定义的原生模块     

            List<NativeModule> modules = new ArrayList<>();

            baiduAiModule = new BaiduAiModule(reactContext);

             modules.add(baiduAiModule);

    }

}

ios

在 AppDelegate.m文件 , didFinishLaunchingWithOptions 方法中注册该模块。

-----------------------

在js中调用 原生模块 

简单总结::  

如果要调用 RN的原生组件或页面(activity), 使用  

const SenseTime = NativeModules.SenseTimeModule

SenseTime.XXXX () 这样就可以触发原生模块的逻辑 。 

---------

如果要与RN的原生模块通讯, 需要创建事件管理对象 。

const eventEmitter = new NativeEventEmitter(SenseTime)   // 创建事件管理对象

eventEmitter.emit('eventName', eventData);  // 发布事件

eventEmitter.addListener('eventName', eventHandler); // 监听事件

import {
  NativeEventEmitter,
  NativeModules,
} from "react-native"

const SenseTime = NativeModules.SenseTimeModule

  // 人脸识别
  const faceRecognition = () => {
    SenseTime.startLiveness()
    const name = 'LivenessSenseTimeResultCode'
    const eventEmitter = new NativeEventEmitter(SenseTime)   // 创建事件管理对象
    let subS: any = null
    const cb = (res:any) => {
      if (res.livenessId === '-1') {
        // Umeng.onEventMessage('SenseTimeLivenessResultFailed', res);
      }
      if (subS){
        // eventEmitter.removeSubscription(subS);
      }
      // responseSuccess(res, data);
    }
    subS = eventEmitter.addListener(name, cb)  
  }

参考:

RN与原生模块互调 - 简书

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值