【问题标题】:ZXing barcode scanner in Xamarin Forms on iOS doesn't read barcodesiOS 上 Xamarin Forms 中的 ZXing 条码扫描仪无法读取条码
【发布时间】:2017-09-30 15:10:42
【问题描述】:

我正在开发一个针对 Android 和 iOS 的 Xamarin Forms PCL 项目,该项目需要一些基本的条形码扫描功能。

我在this tutorial 和引用this guide 之后使用ZXing.Net.Mobile 包的表单版本启动并运行它,它在Android 上运行良好。然而,在 iOS 上,相机会出现,但不会触发 OnScanResult 事件。

我已经在运行几个不同版本(从 8.0 到 10.3 的任何地方)的几台 iOS 设备上对其进行了测试,并摆弄了我能想到的一切,还参考了他们的示例项目。 ZXing.Net.MobileZXing.Net.Mobile.Forms nuget 包已安装在所有项目中。

这是我的扫描仪代码,由我主页上的按钮触发:

var scanPage = new ZXingScannerPage();

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

    Device.BeginInvokeOnMainThread(async () =>
    {
        await Navigation.PopAsync();
        await DisplayAlert("Scanned Barcode", result.Text, "OK");
    });
};

await Navigation.PushAsync(scanPage);

和 AppDelegate.cs:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();

    global::ZXing.Net.Mobile.Forms.iOS.Platform.Init();

    LoadApplication(new App());

    return base.FinishedLaunching(app, options);
}

经过两天的斗争,我觉得自己已经无计可施了。有没有其他人遇到过类似的问题?感谢您的指导!


编辑 1

这是单击按钮触发上述代码时的设备日志输出(仅限消息列)。当相机打开并指向各种条形码时,不会添加任何日志项目。我在这里没有看到任何可疑之处,但也许其他人看到了?

  • PERF:Alloc AVCaptureVideoPreviewLayer 耗时 14.14 毫秒。
  • AppleH4CamIn::power_on_hardware
  • AppleH4CamIn::ISP_SelectBestMIPIFrequencyIndex_gated - 通道:0,索引:0
  • 开始扫描
  • AppleH4CamIn::setPowerStateGated: 1
  • ZXingScannerView.Setup() 耗时 0.167 毫秒。
  • ASL 发件人统计数据
  • AppleH4CamIn::ISP_FlushInactiveDARTMappings: 0x00000000
  • AppleH4CamIn::ISP_SelectBestMIPIFrequencyIndex_gated - 通道:0,索引:0

编辑 2

我从github repo 运行了示例 Xamarin Forms PCL,并且在 iOS 上遇到了同样的问题,相机可以正常打开,但从未读取过条形码。因此,我认为问题一定出在我的 Visual Studio 和/或 Xamarin 设置上。我在稳定的 Xamarin 频道上运行 Visual Studio 2015 Community。

【问题讨论】:

  • 您实际上是在使用调试器来验证 OnScanResult 没有被调用,还是仅仅依靠警报/导航告诉您?
  • 我已经完成了它,但我没有看到它被调用。我还在设备运行时显示设备日志,一切看起来都很好,没有错误触发。

标签: ios xamarin.forms zxing


【解决方案1】:
add this on ios

protected override void OnAppearing()
        {
            base.OnAppearing();
            qrcode.IsScanning = true;
        }`enter code here`

        protected override void OnDisappearing()
        {
            qrcode.IsScanning = false;
            base.OnDisappearing();

        }

【讨论】:

  • 我搞砸了手动设置IsScanning = true 没有任何成功。我将设备日志添加到我的帖子中,我相信 Start Scanning 行表明它正在按预期工作。
  • @ElliotStarks 我是新人,请告诉我我需要在哪个文件中添加此代码。请
【解决方案2】:

试试这个:

scanPage.IsAnalyzing = true;

【讨论】:

    【解决方案3】:

    我终于以this project 为起点。这只是一个使用 ZXing 的基本条码扫描实现,但不知为何我终于可以在 iOS 上读取条码了。

    这可能是版本相关的问题,但我无法缩小范围。

    编辑

    我在 Xamarin 论坛中发布了同样的问题:https://forums.xamarin.com/discussion/comment/272209#Comment_272209

    看来答案是降级到 ZXing 2.1.47 版本。几个月来我没有对这个库做任何工作,所以我没有测试新版本。

    【讨论】:

      【解决方案4】:

      IsAnalyzingIsScanning 不同。

      我遇到了和你一样的问题。但是使用IsAnalyzing = true;之后就修复了。

      【讨论】:

        最近更新 更多