溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C# 中怎么利用ZXing.Net.Mobile實現(xiàn)掃碼

發(fā)布時間:2021-06-16 14:52:32 來源:億速云 閱讀:554 作者:Leah 欄目:編程語言

本篇文章為大家展示了C# 中怎么利用ZXing.Net.Mobile實現(xiàn)掃碼,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

引用ZXing.Net.Mobile

在Xamarin中進行掃碼,需要先引用開源代碼ZXing.Net.Mobile。

下面我們先打開Nuget,搜索ZXing.Net.Mobile,如下圖:

C# 中怎么利用ZXing.Net.Mobile實現(xiàn)掃碼

然后我們點擊右側(cè)安裝。

接著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對應(yīng)不上。

解決辦法很簡單,選擇下右側(cè)ZXing.Net.Mobile的其他版本安裝。

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

但在VisualStudio2017中有個非??拥牡胤?,就是nuget的引用會將相關(guān)dll都組織成一個包,然后一起引用,如下圖:

C# 中怎么利用ZXing.Net.Mobile實現(xiàn)掃碼

看上去引用更簡潔,按理說應(yīng)該是好事,但這里有個問題就是,你引用的dll并沒有被下載到本地。

也就是說,如果你網(wǎng)不好,或者斷網(wǎng),就別想調(diào)試了。

所以最終我還是選擇把相關(guān)dll都下載下來,然后直接引用,相關(guān)dll如下圖:

C# 中怎么利用ZXing.Net.Mobile實現(xiàn)掃碼

使用MobileBarcodeScanner掃碼

本項目里,我們使用ZXing.Net.Mobile下的MobileBarcodeScanner類進行掃碼。

下面簡單介紹下MobileBarcodeScanner的使用方法。

首先,MobileBarcodeScanner類的實例需要調(diào)用Scan方法才會進行掃碼。

而Scan方法被調(diào)用后,會自己打開了一個Activity。

而這個被打開的Activity的UI,就是,他對應(yīng)的axml也是可以被自定義的。

自定義的方法就是Scan方法被調(diào)用前,為MobileBarcodeScanner類的CustomOverlay屬性賦值。

有興趣的同學(xué)可以查看下MobileBarcodeScanner的【源代碼】,更深入的了解一些。

MobileBarcodeScanner的Scan方法有兩個參數(shù)。

第一個參數(shù)是當(dāng)前調(diào)用掃碼的Activity,也可以傳Null,傳Null的話,MobileBarcodeScanner類里自己找Context為他賦值。

第二個參數(shù)是當(dāng)前掃描的配置屬性;為MobileBarcodeScanningOptions類型。

下面我們看調(diào)用代碼。

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; // 動畫持續(xù)時間

  verticalAnimation.RepeatCount = Animation.Infinite; // 無限循環(huán)

 

  // 播放動畫

  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("掃描無數(shù)據(jù)"); });

    }

  }

  else

  {

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

  }

  scanner.Cancel(); 

}

上述內(nèi)容就是C# 中怎么利用ZXing.Net.Mobile實現(xiàn)掃碼,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI