Xamarin.iOS ZXing.Net.Mobile条形码扫描器

3

我正在尝试向我的Xamarin.iOS应用程序添加条形码扫描功能。我是从Visual Studio开发的,并从Xamarin组件商店中添加了Zxing.Net.Mobile组件。

我已按示例实现它:

ScanButton.TouchUpInside += async (sender, e) => {
            //var options = new ZXing.Mobile.MobileBarcodeScanningOptions();
            //options.AutoRotate = false;
            //options.PossibleFormats = new List<ZXing.BarcodeFormat>() {
            //    ZXing.BarcodeFormat.EAN_8, ZXing.BarcodeFormat.EAN_13
            //};

            var scanner = new ZXing.Mobile.MobileBarcodeScanner(this);
            //scanner.TopText = "Hold camera up to barcode to scan";
            //scanner.BottomText = "Barcode will automatically scan";
            //scanner.UseCustomOverlay = false;
            scanner.FlashButtonText = "Flash";
            scanner.CancelButtonText = "Cancel";
            scanner.Torch(true);
            scanner.AutoFocus();

            var result = await scanner.Scan(true);
            HandleScanResult(result);
        };

void HandleScanResult(ZXing.Result result)
    {
        if (result != null && !string.IsNullOrEmpty(result.Text))
            TextField.Text = result.Text;
    }

问题在于当我点击扫描按钮时,捕获视图会正确显示,但如果我尝试捕获条形码,则没有任何反应,似乎扫描仪无法识别任何条形码。
有人遇到过这个问题吗?我该如何解决?
提前感谢您的帮助!

你试过这里吗?https://components.xamarin.com/gettingstarted/zxing.net.mobile 这里有一个示例代码(我从未使用过条形码扫描器)。 - unbalanced
是的,我按照那个示例代码进行了操作,但它并没有起作用。我还尝试从Github仓库运行iOS示例,但也没有成功。这可能是我的iPad 2的问题(我正在使用它进行测试)? - Androidian
你能够理解并遵循这篇文章吗?https://blog.xamarin.com/barcode-scanning-made-easy-with-zxing-net-for-xamarin-forms/ - unbalanced
不幸的是,它与Xamarin Forms相关。我需要iOS版本。 - Androidian
1个回答

6

我在这里回答了类似的问题。因为默认摄像头分辨率设置得太低,所以我无法扫描条形码。对于这种情况的具体实现应该是:

ScanButton.TouchUpInside += async (sender, e) => {
        var options = new ZXing.Mobile.MobileBarcodeScanningOptions {
            CameraResolutionSelector = HandleCameraResolutionSelectorDelegate
        };

        var scanner = new ZXing.Mobile.MobileBarcodeScanner(this);
        .
        .
        .
        scanner.AutoFocus();

        //call scan with options created above
        var result = await scanner.Scan(options, true);
        HandleScanResult(result);
    };

然后是 HandleCameraResolutionSelectorDelegate 的定义:

CameraResolution HandleCameraResolutionSelectorDelegate(List<CameraResolution> availableResolutions)
{
    //Don't know if this will ever be null or empty
    if (availableResolutions == null || availableResolutions.Count < 1)
        return new CameraResolution () { Width = 800, Height = 600 };

    //Debugging revealed that the last element in the list
    //expresses the highest resolution. This could probably be more thorough.
    return availableResolutions [availableResolutions.Count - 1];
}

谢谢@bonetoad。这是唯一适用于ZXing 3.10、Xamarin forms 5.0和iOS 11+的解决方法。 - Tyson Swing
谢谢,这也帮了我!09/21,库仍然是3.1测试版,项目被放弃了吗? - Guillaume Martin
我不确定。看起来至少在2021年01月19日,github仓库上有一些活动:https://github.com/Redth/ZXing.Net.Mobile/releases/tag/3.1.0-beta2 - bonetoad
返回可用分辨率 [availableResolutions.Count - 1]; - 这行代码没有为我返回最高分辨率。CameraResolution availableRes = availableResolutions.Where(y => y.Height == availableResolutions.Max(x => x.Height)).FirstOrDefault(); 返回 availableRes; - 这个可以正常工作。 - Sikandar Amla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接