Сканирование штрих-кода не позволяет пользователю перемещать сканирование штрих-кода дважды - PullRequest
0 голосов
/ 25 октября 2019

Я использую сканер 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;
}

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Для всех остальных, вы можете использовать функцию опций zxing DelayBetweenContinuousScans

zxing = new ZXingScannerView
{
     HorizontalOptions = LayoutOptions.FillAndExpand,
     VerticalOptions = LayoutOptions.FillAndExpand,
     AutomationId = "zxingScannerView",
};
zxing.Options = new MobileBarcodeScanningOptions()
{
  DelayBetweenContinuousScans = 2000
};
0 голосов
/ 25 октября 2019

Я так и сделал, поставил 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");

            });
        };

    }
...