设为首页 加入收藏

TOP

C#-Xamarin利用ZXing.Net.Mobile进行扫码(一)
2019-09-17 18:24:59 】 浏览:39
Tags:C#-Xamarin 利用 ZXing.Net.Mobile 进行

前言

很多人觉得Xamarin的开源少,没法用来开发项目。

但,实际上Xamarin已经有很多开源代码了;只要不是特别特殊的项目,基本上是都可以满足开发。

下面我们来看一下Xamarin中利用开源代码ZXing.Net.Mobile进行扫码。

引用ZXing.Net.Mobile

在Xamarin中进行扫码,需要先引用开源代码ZXing.Net.Mobile。

下面我们先打开Nuget,搜索ZXing.Net.Mobile,如下图:

然后我们点击右侧安装。

接着VisualStudio可能会提示我们这样的错误。

错误 检测到 Xamarin.Android.Support.Compat 存在版本冲突。直接从项目引用包可解决此问题。 
SalesApp -> Xamarin.Android.Support.Design 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2) 
SalesApp -> ZXing.Net.Mobile 2.4.1 -> Xamarin.Android.Support.v4 25.4.0.1 -> Xamarin.Android.Support.Compat (= 25.4.0.1). 

这是因为我们选择安装的ZXing.Net.Mobile依赖的DLL和我们项目的DLL对应不上。

解决办法很简单,选择下右侧ZXing.Net.Mobile的其他版本安装。

----------------------------------------------------------------------------------------------------

但在VisualStudio2017中有个非常坑的地方,就是nuget的引用会将相关dll都组织成一个包,然后一起引用,如下图:

看上去引用更简洁,按理说应该是好事,但这里有个问题就是,你引用的dll并没有被下载到本地。

也就是说,如果你网不好,或者断网,就别想调试了。

所以最终我还是选择把相关dll都下载下来,然后直接引用,相关dll如下图:

 

使用MobileBarcodeScanner扫码

本项目里,我们使用ZXing.Net.Mobile下的MobileBarcodeScanner类进行扫码。

下面简单介绍下MobileBarcodeScanner的使用方法。

首先,MobileBarcodeScanner类的实例需要调用Scan方法才会进行扫码。

而Scan方法被调用后,会自己打开了一个Activity。

而这个被打开的Activity的UI,就是,他对应的axml也是可以被自定义的。

自定义的方法就是Scan方法被调用前,为MobileBarcodeScanner类的CustomOverlay属性赋值。

有兴趣的同学可以查看下MobileBarcodeScanner的【源代码】,更深入的了解一些。

MobileBarcodeScanner的Scan方法有两个参数。

第一个参数是当前调用扫码的Activity,也可以传Null,传Null的话,MobileBarcodeScanner类里自己找Context为他赋值。

第二个参数是当前扫描的配置属性;为MobileBarcodeScanningOptions类型。

下面我们看调用代码。

 View zxingOverlay;
 MobileBarcodeScanner scanner;
 protected override void OnCreate(Bundle savedInstanceState)
 {
     base.OnCreate(savedInstanceState);
     SetContentView(Resource.Layout.MainActivity);
    
     Button btnScan = this.FindControl<Button>("btnScan");
     btnScan.Click += (s, e) =>
     { 
         scanner = new MobileBarcodeScanner(); 
         Task t = new Task(AutoScan);
         t.Start();
     };  
 }
 async void AutoScan()
 { 
     scanner.UseCustomOverlay = true;
     zxingOverlay = LayoutInflater.FromContext(this).Inflate(Resource.Layout.ZxingOverlay, null); 
     ImageView ivScanning = zxingOverlay.FindViewById<ImageView>(Resource.Id.ivScanning); 
     Button btnCancelScan = zxingOverlay.FindViewById<Button>(Resource.Id.btnCancelScan);
     btnCancelScan.Click += (s, e) =>
     {
         if (scanner != null)
         {
             scanner.Cancel();
         }
     };

     zxingOverlay.Measure(MeasureSpecMode.Unspecified.GetHashCode(), MeasureSpecMode.Unspecified.GetHashCode());
     int width = zxingOverlay.MeasuredWidth;
     int height = zxingOverlay.MeasuredHeight; 

     // 从上到下的平移动画
     Animation verticalAnimation = new TranslateAnimation(0, 0, 0, height);
     verticalAnimation.Duration = 3000; // 动画持续时间
     verticalAnimation.RepeatCount = Animation.Infinite; // 无限循环

     // 播放动画
     ivScanning.Animation = verticalAnimation;
     verticalAnimation.StartNow();
           
     scanner.CustomOverlay = zxingOverlay;
     var mbs = MobileBarcodeScanningOptions.Default;
     mbs.AssumeGS1 = true;
     mbs.AutoRotate = true;
     mbs.DisableAutofocus = false;
     mbs.PureBarcode = false;
     mbs.TryInverted = true;
     mbs.TryHarder = true;
     mbs.UseCode39ExtendedMode = true;
     mbs.UseFrontCameraIfAvailable = false;
     mbs.UseNativeScanning = true;

     var result
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CentOS初次安装基本配置 下一篇WinForm中DataGridView的TextBoxC..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目