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 = await scanner.Scan(this, mbs);

  HandleScanResult(result);

} 

void HandleScanResult(ZXing.Result result)

{

  if (result != null && !string.IsNullOrEmpty(result.Text))

  {

    if (result.Text != null && result.Text.Trim().Length > 5)

    {

      this.RunOnUi(() => { this.ShowToast(result.Text); });

    }

    else

    {

      this.RunOnUi(() => { this.ShowToast("扫描无数据"); });

    }

  }

  else

  {

    this.RunOnUi(() => { this.ShowToast("扫描取消"); });

  }

  scanner.Cancel(); 

}

如上代码所示,我们把项目中写好的ZxingOverlay.axml赋值给了MobileBarcodeScanner的CustomOverlay属性。

并且在赋值前,我们为页面内的btnCancelScan按钮定义了取消事件;同时还定义了一个扫描动画。

因为定义动画时,页面还没加载出来,所以要取高度进行动画移动的话,需要先进行下预测。

代码中调用了Measure方法进行预测,然后再取出预测的高度和宽度MeasuredHeight,MeasuredWidth进行动画操作。

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

最终扫描界面如下图所示:

到此扫码使用就介绍完了。

框架代码已经传到Github上了,欢迎大家下载。Github地址:https://github.com/kiba518/KibaApp

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现简单获取扫码枪信息代码

    一个扫码枪遵循TCP协议,通过改代码即可获取扫码枪所扫描的信息:(有一个串口服务器): using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.Diagnostics; using System.Net; namespac

  • C#支付宝扫码支付代码完整版

    本文实例为大家分享了C#支付宝扫码支付示的具体代码,供大家参考,具体内容如下 支付宝工具类 using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Web; namespace ZK_ECommerce.Shop.pay.alipay { public class AliPay { p

  • C# MVC 微信支付教程系列之扫码支付代码实例

    今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码.扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多. 例如我们在地铁.公交站常见的那些自动售货机(不错,就是那种投硬币,就可以自动出货的那种机器)中都用到.微信(支付宝)的扫码支付的出现,大大的减少了这方面的风险,近些年来,二维码的应用越来越广,甚

  • c#版在pc端发起微信扫码支付的实例

    等了好久,微信官方终于发布了.net的demo. 主要代码: /** * 生成直接支付url,支付url有效期为2小时,模式二 * @param productId 商品ID * @return 模式二URL */ public string GetPayUrl(string productId, string body, string attach, int total_fee, string goods_tag) { Log.Info(this.GetType().ToString(), "

  • C# Xamarin利用ZXing.Net.Mobile进行扫码的方法

    前言 很多人觉得Xamarin的开源少,没法用来开发项目. 但,实际上Xamarin已经有很多开源代码了:只要不是特别特殊的项目,基本上是都可以满足开发. 下面我们来看一下Xamarin中利用开源代码ZXing.Net.Mobile进行扫码. 引用ZXing.Net.Mobile 在Xamarin中进行扫码,需要先引用开源代码ZXing.Net.Mobile. 下面我们先打开Nuget,搜索ZXing.Net.Mobile,如下图: 然后我们点击右侧安装. 接着VisualStudio可能会提示

  • Java利用沙箱支付实现电脑扫码支付教程

    目录 一.准备工作 二.效果展示 三.实现代码 3.1 后台代码 3.2 前台代码 一.准备工作 1.注册支付宝开放平台账号,成为开发者. 地址:https://open.alipay.com/platform/home.htm 2.进入沙箱,进行配置. 3.我们可以看到这个界面 4.后面需要使用的参数 APPID 商户私钥(使用系统默认密钥的公钥模式,点击查看获取) 支付宝公钥 支付宝网关 5.手机上下载沙箱支付宝 (到时候支付用这个支付宝支付) 6.下载好支付宝沙箱版后,登录支付宝提供的账号

  • JS判断微信扫码的方法

    一.navagitor的userAgent属性中,判断是否含有micromessenger 二.代码 /** * 判断微信扫码 */ function isWechat() { var ua = navigator.userAgent.toLowerCase(),flag = false; // if(ua.match(/MicroMessenger/i) === "micromessenger"){ if(ua.indexOf("micromessenger")

  • Android利用zxing快速集成二维码扫描的实例教程

    前言 大家应该都还记得,以前的我们常见的都是条形扫码,自从微信使用二维码扫描后,现在市场上基本都用二维码扫描,基本上每一个项目都会有一个二维码扫描,这篇就简单快速的实现一个扫描效果,让我们对二维码的扫描有一个初步的认识和让我们的项目可以快速的集成二维码扫描的功能.下面话不多说了,来一起看看详细的介绍吧. 实现方法: 1.首先我们需要导入一些依赖库,在我们的gradle文件里 2.集成之后我们就可以直接用了,代码很简单. 通过调用这些方法我们就可以实现扫描,这里说一下这些方法的作用,setDesi

  • 详解Flutter扫码识别二维码内容

    前面一篇写了生成二维码图片,这篇来写使用相机扫描识别二维码 识别二维码需要用到插件barcode_scan 首先在pubspec.yaml文件中添加以下依赖,添加依赖后在pubspec.yaml运行flutter packages get或 使用IDE更新软件包. dependencies: ... barcode_scan: ^1.0.0 Android配置 在使用它之前需要先配置 android\app\src\main\AndroidManifest.xml 在该文件中添加添加app获取相

  • Android利用ZXing扫描二维码的实例代码解析

    相关阅读: Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题 此项目源码地址:请点击这里 看一下zxing的项目结构,我这里直接拿过来用的 看一下扫码的activity: package com.fanyafeng.barcode.activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle

  • C#利用ZXing.Net生成条形码和二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.而ZXing.Net是ZXing的端口之一. 在工程中引用ZXing.Net 在项目中,点击项目名称右键-->管理NuGet程序包,打开NuGet包管理器窗口,进行搜索下载即可,如下图所示: ZXing.Net关键类结构图 包括Reader[识

  • Android 超简易Zxing框架 生成二维码+扫码功能

    zxing是一个二维码的框架. 配置 1. implementation 'com.journeyapps:zxing-android-embedded:4.1.0' 如果报错在这个文件的android下加上如下配置,让其支持Java1.8,不然只有1.7.1.6 (可在'app'右键---->open module settings------>Module看到) compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 tar

  • Java利用Zxing生成二维码的简单实例

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下. 1.2 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. import com.google.zxing.common.BitMatrix; i

  • Android二维码的生成与扫码-zxing示例代码

    由于GitHub上面的zxing功能太多,有的用不到,我就抽取了重要的出来使用,这个可以生成二维码,扫描二维码和相册中的二维码 Demo效果: 1.在project的build.gradle添加如下代码: allprojects { repositories { maven { url 'https://jitpack.io' } } } 2.在build.gradle添加依赖: dependencies { compile 'com.github.goodboy321:Scan-Zxing:1

随机推荐