Xamarin.Forms QR Code Scan 二维码扫描的Android(安卓)App
16lz
2021-01-26
环境配置
- 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");});}
更多相关文章
- 关于overridePendingTransition效果在1.6版本中会出现VerifyErro
- Android:Activity(九):Fragment管理与Fragment事务
- Android——SharedPreferences数据存储
- Android中间层c语言log打印方法
- Android设置程序最小运行的堆内存
- Flutter混编问题汇总实践
- android device 注册、添加、管理
- Android(安卓)4.1 Netd详细分析(三)代码分析1
- 【Android(安卓)Studio探索之路系列】之六:Android(安卓)Studio添