环境配置

  • VS2017
  • Xamarin.Forms   .Net Standard 2.0

具体实现使用的是一个老项目了「ZXing.Net.Mobile」:https://github.com/Redth/ZXing.Net.Mobile

 

1. 新建项目 | QrCode3 & QrCode3.Android

     新建项目如下图。(iOS应用不进行开发,具体操作详情请参考上文连接)

2. 添加 NuGet 包 | QrCode3 & QrCode3.Android

3. 添加 Android 权限 | QrCode3.Android

       可另行添加闪光灯权限: FLASHLIGHT

4. MainActivity 初始化 | QrCode3.Android

   MainActivity 中的 OnCreate 函数中添加代码:

MobileBarcodeScanner.Initialize(this.Application);

5. 添加接口 interface IQrCodeScanningService | QrCode3

namespace QrCode3.Service{    public interface IQrCodeScanningService    {Task ScanAsync();}}

6. 实现接口 QrCodeScanningService | QrCode3.Android

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Android.App;using Android.Content;using Android.OS;using Android.Runtime;using Xamarin.Forms;using QrCode3.Service;using ZXing.Mobile;using System.Threading.Tasks;[assembly: Dependency(typeof(QrCode3.Droid.Services.QrCodeScanningService))]namespace QrCode3.Droid.Services{public class QrCodeScanningService : IQrCodeScanningService{public async Task ScanAsync(){var optionsDefault = new MobileBarcodeScanningOptions();var optionsCustom = new MobileBarcodeScanningOptions(){//UseFrontCameraIfAvailable = true,//Check diferents formats in http://barcode.tec-it.com/en// PossibleFormats = new List {  ZXing.BarcodeFormat.CODE_128 }};var scanner = new MobileBarcodeScanner(){TopText = "对准二维码 / 条形码",BottomText = "触摸屏幕来聚焦"};var scanResults = await scanner.Scan(optionsCustom);//Fix by Ale 2017-07-06return (scanResults != null) ? scanResults.Text : string.Empty;}}}

7. 修改主页面并添加调用的按钮 | QrCode3

<?xml version="1.0" encoding="utf-8" ?>    
private async void BtnScan_Clicked(object sender, EventArgs e){var scanner = DependencyService.Get();var result = await scanner.ScanAsync();if(result != null)barcode.Text = result;}

8. 添加自定义扫描页面并调用 | QrCode3

     自定义页面参考 https://gist.github.com/jfversluis/8e9acedafc3ef3fd6e279d9ccf08ff53

<?xml version="1.0" encoding="utf-8" ?>    
public void Handle_OnScanResult(Result result){Device.BeginInvokeOnMainThread(async () =>{await DisplayAlert("Scanned result", result.Text, "OK");});}

 

更多相关文章

  1. 关于overridePendingTransition效果在1.6版本中会出现VerifyErro
  2. Android:Activity(九):Fragment管理与Fragment事务
  3. Android——SharedPreferences数据存储
  4. Android中间层c语言log打印方法
  5. Android设置程序最小运行的堆内存
  6. Flutter混编问题汇总实践
  7. android device 注册、添加、管理
  8. Android(安卓)4.1 Netd详细分析(三)代码分析1
  9. 【Android(安卓)Studio探索之路系列】之六:Android(安卓)Studio添

随机推荐

  1. 跟我学Android应用开发 之 如何添加可选
  2. 《Android(安卓)全埋点解决方案》前言篇
  3. Android(安卓)TV开发总结(四)通过RecycleVi
  4. Android将ButtonBar放在屏幕底部
  5. Android(安卓)dalvik虚拟机内部机制详解(2
  6. 【2016.11.29】iOS和Android设计理念的演
  7. Android(安卓)minSDK 和 targetSDK 版本
  8. Android(安卓)实现按钮 跳转到某网页
  9. Android:dkplayer非全屏时候显示返回按钮
  10. [Android(安卓)Studio]掌握Android(安卓)