HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2019-11-13 8b9ce384b26c414db32f98e94e088f5334869c2d
ZigbeeApp/GateWay.Droid/Application.cs
@@ -15,7 +15,9 @@
using Microsoft.AppCenter.Analytics;
using Microsoft.AppCenter.Crashes;
using Com.Tencent.MM.Sdk.Openapi;
using ZXing.Mobile;
using System.IO;
namespace com.hdl.home
{
@@ -273,3 +275,59 @@
        }
    }
}
namespace Shared
{
    public static class QRCode
    {
        static ZXing.Mobile.MobileBarcodeScanner scanner;
        public static void ScanQRcode(Action<string> action)
        {
            ((BaseActivity)Shared.Application.Activity).SetCamera(async (obj) => {
                if (obj)
                {
                    if (scanner == null)
                    {
                        MobileBarcodeScanner.Initialize(Shared.Application.Activity.Application);
                        scanner = new ZXing.Mobile.MobileBarcodeScanner();
                    }
                    var result = await scanner.Scan();
                    if (result != null)
                        action?.Invoke(result.Text);
                    else
                        action?.Invoke(null);
                }
                else
                {
                    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();
            }
        }
    }
}