0

Net.Mobile 在应用程序中实现条码扫描。

我目前有一个实现扫描页面的小演示应用程序,我可以读取条形码并做一些事情。我正在使用 Xamarin Forms 来实现条形码扫描。我查看了 ZXing 提供的示例应用程序,并复制了他们的一款扫描仪的代码,以便在我的演示中使用。现在我已经在 android 中测试了这个应用程序,我使用的是 API 21 手机,它像地狱一样滞后,但总的来说它可以工作。我可以扫描条形码并导航到新屏幕。

在 iOS 上测试时(使用最新版本的 iphone 6 - 11.2.5)我注意到 iphone 永远不会停止读取条形码。以下是手机识别条形码时调用的代码:

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

// Stop analysis until we navigate away so we don't keep reading barcodes
zxing.IsAnalyzing = false;

// Show an alert
await DisplayAlert("Scanned Barcode", result.Text, "OK");

// Navigate away
await Navigation.PushAsync(new ScanResultsPage());

});

因此,您可以看到识别条形码时首先调用的是zxing.IsAnalyzing = false;,这适用于 android。但是在 iOS 上它会继续扫描,如果我将手机指向条形码,屏幕上会添加越来越多的警报。我是 Xamarin Forms 的新手,在将条形码原生添加到 iOS 时从未遇到任何问题。

我真的不知道从哪里开始调试它,我在这行代码上放了一个断点zxing.IsAnalyzing = false;,它执行并且我可以看到该值设置为 false。

这可能是 ZXing 框架本身的问题吗?

谢谢

(我在应用程序委托中调用了 init)

4

1 回答 1

0

参考 示例用法,我认为你应该添加scanPage.IsScanning = false;停止扫描。

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

    // Pop the page and show the result
    Device.BeginInvokeOnMainThread (() => {
        await Navigation.PushAsync(new ScanResultsPage());       
        DisplayAlert("Scanned Barcode", result.Text, "OK");
    });
};
于 2018-02-09T06:29:58.970 回答