Expo Camera修改barcodeTypes在Android端失效问题求助
Expo Camera Android端barcodeTypes不更新问题解析与修复
问题根源
- Android平台的Expo CameraView组件,在
barcodeScannerSettings参数变更时,底层的条码扫描器不会自动重新加载配置。而iOS端内部做了props变更的监听逻辑,会自动重启扫描器应用新配置,所以两边表现不一致。 - 简单来说,Android的相机扫描器初始化后,默认不会监听props变化去调整识别类型,必须让组件重新初始化才能读取新的配置。
靠谱修复方案
用key强制组件重渲染
当allowQR状态切换时,给CameraView添加一个随状态变化的key,让React销毁旧的Camera组件、创建新的实例,这样新的barcodeTypes配置就会生效:
<CameraView key={`camera-${allowQR}`} onBarcodeScanned={handleScanCode} barcodeScannerSettings={{ barcodeTypes: allowQR ? ["qr"] : ["code128", "ean13", "ean8", "upc_a", "upc_e"], }} style={style} />
备选思路(不推荐)
理论上可以通过ref获取Camera实例,调用底层方法更新配置,但目前Expo Camera的公开API里没有直接支持这个操作的接口,所以还是用key的方法最稳妥。
效果验证
修改后切换allowQR状态时,Android端的CameraView会重新初始化,新的条码识别类型就能正常生效,和iOS端表现一致。
内容的提问来源于stack exchange,提问作者Trần Tuấn Đạt
相关产品推荐
相关产品推荐

