【问题标题】:Scanning of barcode not letting user move barcode scans twice条码扫描不允许用户移动条码扫描两次
【发布时间】:2019-10-25 15:10:44
【问题描述】:

我正在使用 zxing 扫描仪,它工作得很好,但由于某种原因,它会扫描相同的条形码两次。我已经设置了一个线程延迟以尝试保持视口打开,但让操作员有时间将设备从条形码上移开,但运气不好,他们报告了两次扫描项目,但我们不想关闭视口.

但要添加,我不想关闭 ZXingScannerView,只需暂停它,让用户有足够的时间准备下一个条形码

下面的代码是在一个按钮的按钮点击下,他们没有点击按钮两次,即使扫描两次。

ZXingDefaultOverlay overlay;        
ZXingScannerView zxing;  
zxing = new ZXingScannerView
{
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand,
            AutomationId = "zxingScannerView",
};


zxing.OnScanResult += (result) =>
Device.BeginInvokeOnMainThread(async () =>
{               

    BarCode = result.Text;

    await PlayBeep();
    await Task.Delay(2000); //This is the delay I was given so that it would not scan right away again but leave the view open
    overlay = new ZXingDefaultOverlay
        {
            TopText = "Hold your phone up to the barcode",
            BottomText = "Scanning will happen automatically",
            ShowFlashButton = zxing.HasTorch,
            AutomationId = "zxingDefaultOverlay",

        };
        var grid = new Grid
        {
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
        };
        grid.Children.Add(zxing);
        grid.Children.Add(overlay);

        // The root page of your application
        Content = grid;
}

【问题讨论】:

  • 这很可能是一个可怕的 hack(这里没有 Xamarin 经验),但您可以将匿名 OnScanResult 处理程序移动到单独的方法并将该方法注册为处理程序。然后是 hacky 部分:在方法 _de_register 中,在开始时处理处理程序,进行扫描,然后延迟并在方法结束之前重新注册处理程序。
  • @MarkusDeibel 谢谢马克我会先等几个回复,但我确实明白你的意思,但你需要使用设备调用,所以你这样做
  • @MarkusDeibel 我应该说这是点击按钮
  • @MarkusDeibel 构造函数是否在 xamrain 表单中被调用两次?。

标签: c# xamarin.forms zxing.net


【解决方案1】:

对于其他任何人,您可以使用 zxing 选项函数 DelayBetweenContinuousScans

zxing = new ZXingScannerView
{
     HorizontalOptions = LayoutOptions.FillAndExpand,
     VerticalOptions = LayoutOptions.FillAndExpand,
     AutomationId = "zxingScannerView",
};
zxing.Options = new MobileBarcodeScanningOptions()
{
  DelayBetweenContinuousScans = 2000
};

【讨论】:

  • 你好,以后有时间记得标记答案。
  • @JuniorJiang-MSFT 抱歉,新工作有点忙。
【解决方案2】:

我这样做了,把scanPage.IsScanning = false;防止两次阅读器

    ZXingScannerPage scanPage;
    SendData sd;

    private async void Btnpe001_Clicked(object sender, System.EventArgs e)
    {
        scanPage = new ZXingScannerPage();
        sd = new SendData();

        await Navigation.PushAsync(scanPage);

        scanPage.OnScanResult += (result) =>
        {
            scanPage.IsScanning = false;

            Device.BeginInvokeOnMainThread(async () =>
            {
                sd.Action = "personentry";
                sd.DataToSend = result.Text;
                await sd.SendAsync();

                await Navigation.PopAsync();
                await DisplayAlert("Autenticado", result.Text, "OK");

            });
        };

    }

【讨论】:

  • @我仍然希望能够在扫描新条形码时阅读,但我希望有暂停功能我不想离开页面我确实说过这里你的移动远离页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多