【问题标题】:Use torch while scanning barcode扫描条码时使用手电筒
【发布时间】:2018-05-30 11:14:27
【问题描述】:

我正在使用 ZXing.Mobile.Forms 来扫描条形码。 我想在扫描条形码时打开手电筒。我试过 ToggleTorch() 但我没有看到手电筒灯。 请帮助克服这种情况。 这是我的代码:

        var scanner = new ZXing.Mobile.MobileBarcodeScanner();
        scanner.ToggleTorch();
        var option = new ZXing.Mobile.MobileBarcodeScanningOptions { UseCode39ExtendedMode = true, TryHarder = true, PureBarcode = true, };
        var result = await scanner.Scan(option);
        if (result != null)
            await Application.Current.MainPage.DisplayAlert(title, result.Text, "Cancel");
        await Application.Current.MainPage.Navigation.PopAsync(true);

【问题讨论】:

  • 尝试在扫描仪后切换手电筒。扫描线。
  • 感谢@Vahid,它现在正在工作,但只有在检测到任何条形码值时,手电筒才会打开。我想在开始扫描时打开手电筒。
  • 试试scanner.IsTorchOn = true;在调用scanner.Scan(option);之前
  • scanner.IsTorchOn 是只读属性@Vahid
  • 我也试过scanner.Torch(true);

标签: xamarin.forms zxing.net


【解决方案1】:

好的,这里是以 MVVM 方式做你想做的事情的主要思想:

XAML:

<zxing:ZXingScannerView x:Name="ScannerView"
                        IsTorchOn="{Binding IsTorchOn}"
                        IsScanning="{Binding IsScanning}"
                        IsAnalyzing="{Binding IsAnalyzing}"
                        ScanResultCommand="{Binding OnScanResult}"/>

代码隐藏:

public partial class BarcodeScannerPage
    {
        private BarcodeScannerPageModel _pageModel;

        public BarcodeScannerPage()
        {
            InitializeComponent();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();

            if(_pageModel == null) return;
            _pageModel.IsScanning = true;
            _pageModel.IsAnalyzing = true;
            _pageModel.IsTorchOn= true;
        }

        protected override void OnBindingContextChanged()
        {
            base.OnBindingContextChanged();
            _pageModel = BindingContext as BarcodeScannerPageModel;
        }
    }

页面模型:

public class BarcodeScannerPageModel
    {
        #region instance variables
        private bool _isScanning;
        private bool _isAnalyzing;
        private bool _isTorchOn;
        #endregion

        public BarcodeScannerPageModel()
        {
            IsTorchOn = true;
        }

        public bool IsScanning
        {
            get => _isScanning;
            set
            {
                _isScanning = value;
                RaisePropertyChanged();
            }
        }

        public bool IsAnalyzing
        {
            get => _isAnalyzing;
            set
            {
                _isAnalyzing = value;
                RaisePropertyChanged();
            }
        }

        public ICommand OnScanResult
        {
            get
            {
                return new Command(async (result) =>
                {
                        if (result.ToString().IsNullOrEmpty()) return;

                        Device.BeginInvokeOnMainThread(async () =>
                        {
                            IsAnalyzing = false;
                            //your code here...
                        });
                });
            }
        }

        public bool IsTorchOn
        {
            get => _isTorchOn;
            set
            {
                _isTorchOn = value;
                RaisePropertyChanged();
            }
        }
    }

这里我假设 MVVM 已正确设置和使用,包括“PropertyChanged”事件和设置“BindingContext”。更多信息:

MVVM

From Data Bindings to MVVM

MVVM & Data Binding with Xamarin.Forms

使用一些 MVVM 框架,例如 FreshMvvm 可以让事情变得更简单。

【讨论】:

  • 它正在打开扫描屏幕,扫描条形码并给我结果
  • xmlns:zxing="clr-namespace:ZXing.Net.Mobile.Forms;assembly=ZXing.Net.Mobile.Forms" 是命名空间,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多