ZXing.Mobile.MobileBarcodeScanner.Cancel() not working

◇◆丶佛笑我妖孽 提交于 2019-12-11 04:22:32

问题


I'm developing a mobile application on Xamarin Forms for UWP, Android and IOS on Visual Studio.

I'm currently testing the app on my computer(Windows 10) and my phone (also Windows 10).

I'm using Zxing MobileBarcodeScanner to scan multiple barcodes.

When i press the back button i call the MobileBarcodeScanner.Cancel().

The only thing that it does is to close the camera. It doesn't depose the MobileBarcodeScanner's UI and i didn't found any solution for that.

Can anyone help me or suggest a solution?

Also the Cancel Button and the Flash Button aren't shown to the scanner UI.

Code:

private void showScanner()
{
    var scanner = new MobileBarcodeScanner(App.coreDispatcher)
    {
        UseCustomOverlay = false,
        TopText = "Hold camera up to barcode to scan",
        BottomText = "Barcode will automatically scan",
        CancelButtonText = "Done",
        FlashButtonText = "Flash"
    }

    var opt = new MobileBarcodeScanningOptions { DelayBetweenContinuousScans = 3000 };

    scanner.ScanContinuously(opt, HandleScanResult);
}

protected override bool OnBackButtonPressed()
{
    scanner.Cancel();
}

private void HandleScanResult(ZXing.Result result)
{
    string msg;
    if (result != null && !string.IsNullOrEmpty(result.Text)) // Success
    {
        msg = result.Text;
    }
    else // Canceled
    {
        msg = "Scanning Canceled!";
    }
}

回答1:


The only thing that it does is to close the camera. It doesn't depose the MobileBarcodeScanner's UI and i didn't found any solution for that

There is an issue in your code snippets. In the showScanner() method, you have defined a scanner variable, but in OnBackButtonPressed() method, looks like you have used a global variable also called scanner.

Maybe the following way should be correct:

MobileBarcodeScanner scanner;

private void showScanner(){
    scanner = new MobileBarcodeScanner(App.coreDispatcher) //Here, remove var
    {
        ......
    }

}
protected override bool OnBackButtonPressed()
{
    scanner.Cancel();
}

And if you have check the Xamarin.Forms sample

It uses the ZXingScannerPage to host your layout and handle some logics, including Cancel and ToggleTorch etc, see here

Also the Cancel Button and the Flash Button aren't shown to the scanner UI.

Please use Custom Overlay, just set MobileBarcodeScanner.UseCustomOverlay property to true and check the sample code in here

And also ZXing.Net.Mobile Getting Started



来源:https://stackoverflow.com/questions/38528326/zxing-mobile-mobilebarcodescanner-cancel-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!