wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL-ON_Android/Scan.cs
@@ -1,4 +1,5 @@
using System;
using System.IO;
using Shared;
using ZXing.Mobile;
@@ -9,36 +10,117 @@
        public Scan()
        {
        }
        static MobileBarcodeScanner scanner;
        public static void OpenScan(Action<string> action)
        {
            (Shared.Application.Activity as BaseActivity).SetCamera((obj) => {
            string cancel = "取消";
            string flashText = "";
            string titleText = "二维码扫描";
            if (Language.CurrentLanguage != "Chinese")
            {
                cancel = "Cancel";
                flashText = "";
                titleText = "Scan";
            }
            ((BaseActivity)Shared.Application.Activity).SetCamera(async (obj) =>
            {
                if (obj)
                {
                    var scanner = new MobileBarcodeScanner { };
                    // ZXing
                    scanner.UseCustomOverlay = false;
                    // 底部两个按钮文字
                    scanner.FlashButtonText = "";//"识别";
                    scanner.CancelButtonText = Language.CurrentLanguage == "Chinese" ? "取消" : "Cancel";
                    if (scanner == null)
                    {
                        MobileBarcodeScanner.Initialize(Shared.Application.Activity.Application);
                        var mZXingCustomScanView = new ZXingCustomScanView(Shared.Application.Activity.Application);
                        mZXingCustomScanView.cancelTextView.Text = cancel;
                        mZXingCustomScanView.flashTextView.Text = flashText;
                        mZXingCustomScanView.titleTextView.Text = titleText;
                        var bOn = false;
                        scanner = new ZXing.Mobile.MobileBarcodeScanner()
                        {
                            UseCustomOverlay = true,
                            CustomOverlay = mZXingCustomScanView
                        };
                    // 方框上,下方文字提示
                    scanner.TopText = Language.CurrentLanguage == "Chinese" ? "请将条形码对准方框内" : "Please align the bar code in the scan box";
                    scanner.BottomText = "";
                        mZXingCustomScanView.OnCancel += () =>
                        {
                    // 延时三秒自动扫秒
                    var opt = new MobileBarcodeScanningOptions();
                    opt.DelayBetweenContinuousScans = 3000;
                    scanner.ScanContinuously(opt, (obj2) => {
                        scanner.Cancel();
                        action?.Invoke(obj2.Text);
                    });
                            scanner?.Cancel();
                        };
                        mZXingCustomScanView.OnTorch += () =>
                        {
                            bOn = !bOn;
                            scanner?.Torch(bOn);
                        };
                    }
                    var result = await scanner.Scan();
                    if (result != null)
                        action?.Invoke(result.Text);
                    else
                        action?.Invoke(null);
                }
                else
                {
                    action?.Invoke("");
                    action?.Invoke(null);
                }
            });
        }
        public static byte[] BytesFromText(string text, int width = 300, int height = 300)
        {
            var barcodeWriter = new ZXing.Mobile.BarcodeWriter
            {
                Format = ZXing.BarcodeFormat.QR_CODE,
                Options = new ZXing.Common.EncodingOptions
                {
                    Width = width,
                    Height = height,
                    Margin = 0
                }
            };
            barcodeWriter.Renderer = new ZXing.Mobile.BitmapRenderer();
            var bitmap = barcodeWriter.Write(text);
            using (var stream = new MemoryStream())
            {
                bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, stream);  // this is the diff between iOS and Android
                stream.Position = 0;
                return stream.ToArray();
            }
        }
        //public static void OpenScan1(Action<string> action)
        //{
        //    (Shared.Application.Activity as BaseActivity).SetCamera((obj) => {
        //        if (obj)
        //        {
        //            var scanner = new MobileBarcodeScanner { };
        //            // ZXing
        //            scanner.UseCustomOverlay = false;
        //            // 底部两个按钮文字
        //            scanner.FlashButtonText = "";//"识别";
        //            scanner.CancelButtonText = Language.CurrentLanguage == "Chinese" ? "取消" : "Cancel";
        //            // 方框上,下方文字提示
        //            scanner.TopText = Language.CurrentLanguage == "Chinese" ? "请将条形码对准方框内" : "Please align the bar code in the scan box";
        //            scanner.BottomText = "";
        //            // 延时三秒自动扫秒
        //            var opt = new MobileBarcodeScanningOptions();
        //            opt.DelayBetweenContinuousScans = 3000;
        //            scanner.ScanContinuously(opt, (obj2) => {
        //                scanner.Cancel();
        //                action?.Invoke(obj2.Text);
        //            });
        //        }
        //        else
        //        {
        //            action?.Invoke("");
        //        }
        //    });
        //}
    }
}