为什么zxing扫描器多次识别QR码导致绑定命令重复触发?
ZXing扫码命令重复触发修复方案
该问题的核心诱因是ZXingScannerView默认扫描到结果后不会自动终止扫描流程,会短时间内重复识别同一张二维码,最终导致命令被触发两次,可按以下步骤修复:
- 执行命令时先终止扫描状态
在扫码命令逻辑中优先将绑定的IsScanning属性设为false,阻止后续重复识别,修改后的命令代码如下:
scanCommand = new RelayCommand(obj => { // 仅在扫描开启状态下执行逻辑,避免重复调用 if (!IsScanning) return; IsScanning = false; _ = navigation.PushAsync(new TestPage1()); });
需额外补充:如果从跳转的页面返回扫码页时需要恢复扫码能力,可在扫码页的OnAppearing生命周期方法中将IsScanning重新赋值为true。
- 新增防抖逻辑规避极端场景重复触发
如果存在偶发的重复触发情况,可增加时间窗口防抖逻辑,限制短时间内仅能触发一次扫码操作,示例代码如下:
private DateTime _lastScanTime = DateTime.MinValue; // 初始化命令逻辑 scanCommand = new RelayCommand(obj => { // 2秒内重复扫码直接拦截 if ((DateTime.Now - _lastScanTime).TotalSeconds < 2) return; _lastScanTime = DateTime.Now; if (!IsScanning) return; IsScanning = false; _ = navigation.PushAsync(new TestPage1()); });
- 排查绑定重复问题
确认XAML中仅对ScanResultCommand做了一次绑定,后台代码也不存在重复给scanCommand赋值的逻辑,避免多绑定导致的多次调用。
内容的提问来源于stack exchange,提问作者Souta Norogami
相关产品推荐
相关产品推荐

