react-native - 来自物理条码扫描器的 React Native 捕获事件
问题描述
我正在尝试在 React Native 应用程序中实现条形码扫描仪(此型号是 Generalscan M100BT)。目前可以正常扫描到 TextiInput,但软键盘正在使用中,无法隐藏它。所以我们试图从扫描仪捕获事件,但我无法确定我应该查看哪个事件,也无法确定哪个模块生成它,或者一旦我确定哪个事件有它,如何获取 EAN 代码。我正在使用 Snoopy 查看 Bridge 并试图缩小查看范围,这里有一些 logcat 输出,我认为可能是我正在寻找的事件,但我不太确定
12-30 14:06:45.193 7608 7686 I ReactNativeJS: N->JS : RCTEventEmitter.receiveEvent([1149,"topLayout",{"target":1149,"layout":{"y":458,"height":0,"width":360,"x":0}}]) *
12-30 14:06:45.195 7608 7686 I ReactNativeJS: N->JS : RCTEventEmitter.receiveEvent([1155,"topLayout",{"target":1155,"layout":{"y":0,"height":561,"width":360,"x":0}}]) *
12-30 14:06:45.196 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1383]]) *
12-30 14:06:45.197 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1384]]) *
12-30 14:06:45.198 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1380,1382]]) *
12-30 14:06:45.357 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1386]]) *
12-30 14:06:45.358 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1390]]) *
12-30 14:06:45.361 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onAnimatedValueUpdate",{"value":2,"tag":3}]) *
12-30 14:07:17.609 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onHWKeyEvent",{"tag":879,"eventType":"focus"}]) *
12-30 14:07:17.964 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onHWKeyEvent",{"tag":879,"eventType":"select"}]) *
12-30 14:07:17.978 7608 7686 I ReactNativeJS: N->JS : RCTEventEmitter.receiveEvent([879,"topClick",{}]) *
12-30 14:07:18.072 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1394]]) *
12-30 14:07:18.081 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onAnimatedValueUpdate",{"value":1,"tag":3}]) *
12-30 14:07:18.083 7608 7686 I ReactNativeJS: N->JS : <callback for NativeAnimatedModule.startAnimatingNode>([{"finished":true}]) *
12-30 14:07:18.095 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1399]]) *
12-30 14:07:18.250 7608 7686 I ReactNativeJS: N->JS : JSTimers.callTimers([[1400]]) *
12-30 14:07:18.295 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onHWKeyEvent",{"tag":879,"eventType":"blur"}]) *
12-30 14:07:18.296 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onHWKeyEvent",{"tag":13,"eventType":"focus"}]) *
12-30 14:07:18.305 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onAnimatedValueUpdate",{"value":1,"tag":3}]) *
12-30 14:08:24.954 7608 7686 I ReactNativeJS: N->JS : RCTDeviceEventEmitter.emit(["onHWKeyEvent",{"tag":13,"eventType":"select"}]) *
12-30 14:08:24.969 7608 7686 I ReactNativeJS: N->JS : RCTEventEmitter.receiveEvent([13,"topClick",{}]) *
除此之外,我正在尝试使用以下方法捕获事件:
const nativeEventEmitter = new NativeEventEmitter(NativeModules.{BarcodeScannerModule});
nativeEventEmitter.addListener('onHWKeyEvent', (data) => console.log("Barcode Scanner Event: ", data));
但我不知道在哪里寻找与此代码一起使用的 {BarcodeScannerModule} 模块名称,
更新
这是接收扫描条形码的 TextInput 的代码,在 onSubmitEditing 上它使用事件:
<TextInput style={{ color: "white", width: 0, height: 0 }}
onFocus={() => NativeModules.KeyboardModule.hideKeyboard()}
autoFocus={true}
onChange={this.handleTextChange}
ref={(input) => { this.scanInput = input }}
caretHidden={true}
onSubmitEditing={(event) => { this.findEanData(event.nativeEvent.text); }}
/>
任何帮助是极大的赞赏!
解决方案
我正在关闭这个问题,因为发现我可以使用 react-native-keyevent 捕获事件,这不起作用,因为设备和扫描仪之间存在蓝牙问题。
推荐阅读
- python - 使用 python3-scipy.integrate 的球体体积
- json - 将 N 和 E 值转换为 OpenSSL 的 RSA 公钥?
- c++ - 这个在 c++ 中使用 x86 DIV 的 asm 块有什么用?
- c# - 服务器上的一个 AngularJS IIS 网站连接到 WebAPI,但相同的站点没有
- scala - 给定小时和月份和年份,将其转换为 Spark scala 中的时间戳
- c# - 如何按字母顺序对字符数组进行排序,以使同一字母的大写和小写版本彼此相邻?
- python-3.x - 从 pygmo 群岛获取进化日志
- ios - 使用统一的ContactWithIdentifier刷新CNContact:编辑一次联系人记录后将不允许编辑返回的联系人
- javascript - 将值从组件 data() 传递到其他文件
- java - 将 Spring @RequestBody JSON 对象转换为映射 Java