今天写一篇条形码扫描的文章,使用的是ZXing。
实现非常简单,下面一起来看一下步骤。
首先在项目中导入包:
接下来直接可以使用了:
直接在你的ViewController中声明变量:
MobileBarcodeScanner scanner;
初始化变量:
scanner = new MobileBarcodeScanner(this.NavigationController);
下面的代码是在一个按钮点击事件中调用扫码的:
Btn.TouchUpInside += async (sender, e) =>
{
// ZXing
scanner.UseCustomOverlay = false;
// 底部两个按钮文字
scanner.FlashButtonText = "识别";
scanner.CancelButtonText = "取消";
// 方框上,下方文字提示
scanner.TopText = "请将条形码对准方框内";
scanner.BottomText = "确认后按下右下角识别按钮";
//Start scanning
var result = await scanner.Scan();
// 处理结果
HandleScanResult(result);
};
下面是对结果简单的处理:
void HandleScanResult(ZXing.Result result)
{
string msg = "";
if (result != null && !string.IsNullOrEmpty(result.Text))
msg = "扫描结果: " + result.Text;
else
msg = "你取消了!";
this.InvokeOnMainThread(() =>
{
var av = new UIAlertView("Barcode Result", msg, null, "OK", null);
av.Show();
});
}
最后贴一张扫描的效果图
差点忘了,添加摄像头的权限:Privacy - Photo Library Usage Description。
上面实现的扫描条形码呢,需要我们手动点击识别按钮来识别,下面将调用的代码稍微改动一下,添加一个三秒延时自动识别:
Btn.TouchUpInside += (sender, e) =>
{
// ZXing
scanner.UseCustomOverlay = false;
// 底部两个按钮文字
scanner.FlashButtonText = "识别";
scanner.CancelButtonText = "取消";
// 方框上,下方文字提示
scanner.TopText = "请将条形码对准方框内";
scanner.BottomText = "确认后按下右下角识别按钮";
// 延时三秒自动扫秒
var opt = new MobileBarcodeScanningOptions();
opt.DelayBetweenContinuousScans = 3000;
scanner.ScanContinuously(opt, HandleScanResult);
};
好了,这样子调用即可达到自动识别的效果。
写完了后遇到一个坑,如上面截图,公司给的条形码都是纸质打印的,当时刚写完后一直扫不上,于是开始怀疑ZXing性能的问题了。
后来换了几个条形码都没有问题。
最后在仔细看了看纸质的条形码打印的质量有问题。
大家遇到扫不上的时候先检查一下条形码有没有问题。