如何使用.NET MAUI开发Android扫码应用

.NET MAUI作为Xamarin.Forms的升级版,提供了跨平台应用开发能力。本文作者分享了从Xamarin.Forms迁移至.NET MAUI的实践经验,包括创建.NET MAUI工程、安装依赖库(如SkiaSharp和Dynamsoft Barcode Reader)、处理iOS兼容性问题以及遇到的.NET MAUI疑似Bug。文章详细阐述了Android和iOS平台上扫码功能的实现,并提供了源码链接。
摘要由CSDN通过智能技术生成

.NET MAUI是Xamarin的进化版,如果你已经用了Xamarin,那么可以尝试把工程移植到.NET MAUI。这篇文章分享下我的移植心得。

从Xamarin.Forms迁移到.NET MAUI

我之前用Xamarin.Forms写了一个适用于Android和iOS的一维码,二维码扫描程序:https://github.com/yushulx/xamarin-forms-barcode-qrcode-scanner

微软官方在GitHub上发布了一个移植教程,但我觉得还是创建一个新的.NET MAUI比较好,这样可以避免一下子出现大量的编译错误。

创建.NET MAUI工程

要创建.NET MAUI工程,你需要安装Visual Studio 2022 Preview版本,稳定版不包含工程模板。

.NET MAUI工程创建之后,包含了Windows, macOS, Tizen, Android和iOS的代码和支持框架。为了简洁干净,删除不必要的平台,只保留Android和iOS。

<Project Sdk="Microsoft.NET.Sdk">

	<PropertyGroup>
		<TargetFrameworks>net6.0-android;net6.0-ios</TargetFrameworks>
		<OutputType>Exe</OutputType>
		<RootNamespace>BarcodeQrScanner</RootNamespace>
		<UseMaui>true</UseMaui>
		<SingleProject>true</SingleProject>
</Project>

通过NuGet安装依赖库

我们需要用到两个重要的库,一个是SkiaSharp,另一个是Dynamsoft Barcode Reader

SkiaSharp用于Xamarin.Forms和.NET MAUI的包名是不同的。使用Xamarin.Forms安装SkiaSharp.Views.Forms,使用.NET MAUI安装SkiaSharp.Views.Maui.Controls

Dynamsoft Barcode Reader没有针对框架定制。

请添加图片描述
安装之后发现,Android可以用,而iOS会出现兼容性错误。

请添加图片描述
因此移植之后,Android上可以正常扫码,而iOS上只能打开摄像头。iOS上相关的扫码代码全部注释掉了,这部分可以用别的库替代,或者等待SDK发布更新。

代码

根据在线文档,要调用平台相关的代码需要用到partical classpartial method

我们在公共代码里定义:

public partial class BarcodeQRCodeService
{
   
    public partial void InitSDK(string license);
    public partial BarcodeQrData[] DecodeFile(string filePath);
}

然后在Android和iOS的平台代码里去实现接口。

public class DBRLicenseVerificationListener : Java.Lang.Object, IDBRLicenseVerificationListener
    {
   
        public void DBRLicenseVerificationCallback(bool isSuccess, Java.Lang.Exception error)
        {
   
            if (!isSuccess)
            {
   
                System.Console.WriteLine(error.Message);
            }
        }
    }
    
public partial class BarcodeQRCodeService
{
   
    public partial void InitSDK(string license)
    {
   
        BarcodeReader.InitLicense(license, new DBRLicenseVerificationListener());
        reader = new BarcodeReader();
    }

    public partial BarcodeQrData[] DecodeFile(string filePath)
    {
   
        BarcodeQrData[] output = null;
            try
            {
   
                PublicRuntimeSettings settings = reader.RuntimeSettings;
                settings.ExpectedBarcodesCount = 512;
                reader.UpdateRuntimeSettings(settings);
                TextResult[] results = reader.DecodeFile(filePath);
                if (results != null && results
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值