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)
}
参考: