我正在为具有Android操作系统的设备开发条形码扫描仪应用程序。在该设备中,motorola提供用于扫描条形码和获取数据的SDK。我已经编写了一个反应原生应用程序,用于呈现我的UI和本机安卓以获取条形码。现在我想要做的事情就像每次当本机android获取扫描数据作为来自motorola sdk的回调它应该将它传递给rect native.I尝试回调方法但回调只能被本机模块调用一次,这对我不起作用因为项目将被多次扫描。
答案 0 :(得分:5)
不幸的是,这是isn't covered too well in the official docs。 我想将此方法添加到我的所有桥接模块
private void sendEvent(String eventName, @Nullable WritableMap params) {
getReactApplicationContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
Params可以有许多不同的类型。这是他们如何从Java映射到JS
Boolean -> Bool
Integer -> Number
Double -> Number
Float -> Number
String -> String
Callback -> function
WritableMap -> Object
WritableArray -> Array
如果要从本机代码向React Native发出和事件,请使用此函数。如果要将Array或Object作为参数传递,则必须事先构建WritableMap或WritableArray
示例:
public void emitInfo() {
infoMap = Arguments.createMap();
infoMap.putString("name", "dooley-doo");
infoMap.putInt("version", 16);
infoMap.putBoolean("isTrustworthy", False);
sendEvent('INFO_EVENT', infoMap);
}
然后在JS中,您可以像这样订阅此事件:
const eventEmitter = new NativeEventEmitter(NativeModules.myModule);
this.subscription = eventEmitter.addListener('INFO_EVENT',(params)=>console.log(params));
然后当你完成后,取消订阅如下:this.subscription.remove();
答案 1 :(得分:4)
在index.android.js文件中添加这些行
&myArray[middle]
并且在android中从哪里想要从android native发送数据以反应原生JS调用此
import {NativeEventEmitter } from 'react-native';
class ReactNativeExample extends Component {
constructor(props) {
super(props);
this.subscription = null;
....
}
componentDidMount() {
const EVENT_NAME = new NativeEventEmitter(NativeModules.ChatMessageManager);
this.subscription = EVENT_NAME.addListener(
'EVENT_TAG',
(message) => {
//Your logic
});
}
componentWillUnmount() {
this.subscription.remove();
}
}
答案 2 :(得分:0)
上面提到的答案很有帮助。就我而言,我在MainActivity.java中将reactContext定义为
ReactInstanceManager mReactInstanceManager = getReactNativeHost().getReactInstanceManager();
ReactApplicationContext reactContext = (ReactApplicationContext) mReactInstanceManager.getCurrentReactContext();
并通过
private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
希望有帮助。