我使用mvvmcross成功地将ZXing的ContinuousScan用于xamarin,我只需按下我的一个视图模型中的按钮就可以显示相机。我在4000的连续扫描之间使用了延迟,以允许用户以慢速读取条形码。第一次进入视图模型并进入扫描仪,一切都很完美。然后我按回来,我有一个包含代码的列表,我再次按回去并离开视图模型。我再次进入视图模型并打开扫描仪,它几乎没有关注条形码,它扫描它两到三次,而不等待最初设置为它的4000ms延迟。我在这里缺少什么?
public MvxCommand ObtainCommand()
{
return new MvxCommand(delegate
{
if (HandleScanResultEvent != null) HandleScanResultEvent(this, null);
MobileBarcodeScanner.Initialize(Application);
var scanner = new MobileBarcodeScanner();
scanner.UseCustomOverlay = false;
scanner.TopText = Ts.TopTextScanContiniously;
scanner.BottomText = Ts.BottomTextScan;
var opt = new MobileBarcodeScanningOptions();
opt.DelayBetweenContinuousScans = 5000;
//Start scanning
scanner.ScanContinuously(opt, HandleScanResult);
});
}
Handle结果将事件引发到视图模型并读取条形码。
void HandleScanResult(ZXing.Result r)
{
if (r != null)
{
var opa = new OperationArgument
{
Operation = new Operation
{
Data r.Text,
Format = FromXingFormat(r.BarcodeFormat)
}
};
if (DataObtained != null && !(String.IsNullOrWhiteSpace(r.Text)))
{
DataObtained(this, opa);
}
}
}
通过分配给viewmodel的mvxCommand打开条形码扫描器。已发布的代码位于注册为单例的类中。