跳至页脚内容
使用 IRONQR

如何使用 .NET MAUI 进行 QR 代码扫描

随着移动应用程序利用二维码进行快速信息检索的兴起,对一个高效且易于集成的二维码扫描仪以及.NET MAUI 条码扫描仪以扫描条码的需求在增长。.NETMAUI (多平台应用UI),微软的跨平台框架,为在iOS、Android、macOS和Windows上构建应用程序提供了一个统一环境。 在.NET MAUI应用程序中扫描二维码时,开发者需要一个直观且功能强大的库来管理这个过程。

IronQR是一个流行的库,它允许开发人员快速、准确和可靠地生成和解码二维码。 本文将引导你如何将IronQR与.NET MAUI集成以构建一个可以无缝跨多个平台工作的二维码/条码扫描仪。

如何使用IronQR实现二维码条码扫描

  1. 创建一个.NET MAUI项目。
  2. 安装IronQR NuGet包。
  3. 设置相机和文件存储的权限。
  4. 实现二维码扫描仪。

面向.NET MAUI移动应用的IronQR简介

IronQR是一个强大且易于使用的库,它简化了在.NET应用程序中生成和解码二维码的过程,包括用于二维码和条码扫描功能的.NET MAUI移动应用。 它为跨平台(如iOS、Android、macOS和Windows)的二维码和条码扫描功能集成提供了快速和可靠的解决方案,这对于构建跨平台移动应用至关重要。

面向.NET MAUI移动应用的IronQR功能

  • 跨平台支持:在MAUI应用程序中无缝地在iOS、Android、macOS和Windows平台上运行。
  • 二维码扫描:高效解码各种类型的二维码(网址、文本、联系信息等)。 它还支持用有效的条码检测算法读取多个条码。
  • 二维码生成:这允许从诸如网址、文本等数据轻松生成二维码。
  • 摄像头权限处理:自动处理摄像头权限请求,简化了扫描过程。
  • 高性能:以最小的资源消耗快速和可靠地进行二维码扫描和生成。
  • 可定制的设置:为扫描参数和二维码外观提供定制选项。
  • 易于集成:简单的API和最少的设置就可以将二维码扫描和生成添加到你的.NET MAUI应用中。
  • 错误处理:提供详细的错误信息和故障排除,确保在各种场景中的平稳功能。
  • 无外部依赖:IronQR独立运行,减少了对第三方库或复杂配置的需求,这与ZXing 条码扫描仪不同。
  • 多格式支持:支持多种二维码格式,确保与现实世界中广泛使用的二维码兼容。

先决条件

在进行实施之前,请确保您具备以下先决条件:

  1. 安装了Visual Studio 2022或更高版本
  2. .NET 6.0 SDK或更高版本(因为.NET MAUI是基于.NET 6及更新版本构建的)。
  3. 用于二维码扫描和条码检测的IronQR NuGet包
  4. .NET MAUI应用程序(如果您还没有一个,可以在Visual Studio中创建一个新的MAUI应用)。

步骤1:创建.NET MAUI项目

首先,让我们创建一个简单的.NET MAUI项目:

  1. 打开Visual Studio,点击创建新项目
  2. 选择.NET MAUI应用程序模板。

新项目

  1. 为项目命名(例如,MauiQRCodeScanner),选择位置,然后点击下一步

项目配置

选择所需的.NET版本并点击创建。

目标框架

步骤2:安装IronQR NuGet包

IronQR是一个第三方库,提供二维码生成和扫描功能。 要安装IronQR,您需要通过NuGet添加它:

  1. 在Visual Studio中,右键点击你的解决方案资源管理器中的依赖项
  2. 点击管理NuGet包
  3. 浏览选项卡中,搜索IronQR,然后在相关的包上点击安装(通常是IronQR或IronQR.Maui,如果专门适用于MAUI)。
  4. 接受任何许可并确保库已安装。

    IronQR

步骤3:为摄像头和文件存储设置权限

为了让您的应用程序扫描二维码,您需要在移动平台(iOS和Android)上请求摄像头权限。 以下是您如何添加以下权限。

Android

AndroidManifest.xml文件中,添加摄像头权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
XML

iOS

Info.plist文件中,添加摄像头使用描述:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera to scan QR codes</string>
<key>NSCameraUsageDescription</key>
<string>We need access to your camera to scan QR codes</string>
XML

步骤4:实现二维码扫描仪

现在,让我们在MAUI条码扫描应用中创建一个简单的用户界面来实现我们的二维码扫描仪。我们将使用按钮来触发扫描过程,并使用标签来显示扫描的二维码文本。

编辑XML命名空间中的MainPage.xaml文件。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="MauiQRCodeScanner.MainPage">

    <StackLayout Padding="20" VerticalOptions="Center">
        <Button x:Name="scanButton" Text="Scan QR Code" Clicked="OnScanButtonClicked" />
        <Label x:Name="resultLabel" Text="Scan Result will appear here" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
    </StackLayout>
</ContentPage>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="MauiQRCodeScanner.MainPage">

    <StackLayout Padding="20" VerticalOptions="Center">
        <Button x:Name="scanButton" Text="Scan QR Code" Clicked="OnScanButtonClicked" />
        <Label x:Name="resultLabel" Text="Scan Result will appear here" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
    </StackLayout>
</ContentPage>
XML

现在,在MainPage.xaml.cs中,您将处理摄像头权限和二维码扫描逻辑。 以下是如何实现它:

using IronQrCode;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Essentials;

namespace MauiQRCodeScanner
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            License.LicenseKey = "Your key";  // Add your IronQR license key here
            InitializeComponent();
        }

        // OnScanButtonClicked method with object sender as input
        private async void OnScanButtonClicked(object sender, EventArgs e)
        {
            // Check for camera permission
            var status = await Permissions.RequestAsync<Permissions.Camera>();
            if (status != PermissionStatus.Granted)
            {
                await DisplayAlert("Permission Denied", "Cannot scan QR codes without camera permission", "OK");
                return;
            }

            // Start scanning QR codes
            try
            {
                var images = await FilePicker.Default.PickAsync(new PickOptions
                {
                    PickerTitle = "Pick image",
                    FileTypes = FilePickerFileType.Images
                });
                var imageSource = images.FullPath.ToString();

                var inputBmp = AnyBitmap.FromFile(imageSource);
                // Load the asset into QrImageInput
                QrImageInput imageInput = new QrImageInput(inputBmp);

                // Create a QR Reader object
                QrReader reader = new QrReader();

                // Read the input and get all embedded QR Codes
                IEnumerable<QrResult> results = reader.Read(imageInput);

                if (results.Any())
                {
                    resultLabel.Text = "Scanned Text: " + results.First().Value; 
        // Display the result
                }
                else
                {
                    resultLabel.Text = "No QR code detected";
                }
        }
        catch (Exception ex)
        {
            resultLabel.Text = "Error: " + ex.Message;
        }
        }
    }
}
using IronQrCode;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Essentials;

namespace MauiQRCodeScanner
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            License.LicenseKey = "Your key";  // Add your IronQR license key here
            InitializeComponent();
        }

        // OnScanButtonClicked method with object sender as input
        private async void OnScanButtonClicked(object sender, EventArgs e)
        {
            // Check for camera permission
            var status = await Permissions.RequestAsync<Permissions.Camera>();
            if (status != PermissionStatus.Granted)
            {
                await DisplayAlert("Permission Denied", "Cannot scan QR codes without camera permission", "OK");
                return;
            }

            // Start scanning QR codes
            try
            {
                var images = await FilePicker.Default.PickAsync(new PickOptions
                {
                    PickerTitle = "Pick image",
                    FileTypes = FilePickerFileType.Images
                });
                var imageSource = images.FullPath.ToString();

                var inputBmp = AnyBitmap.FromFile(imageSource);
                // Load the asset into QrImageInput
                QrImageInput imageInput = new QrImageInput(inputBmp);

                // Create a QR Reader object
                QrReader reader = new QrReader();

                // Read the input and get all embedded QR Codes
                IEnumerable<QrResult> results = reader.Read(imageInput);

                if (results.Any())
                {
                    resultLabel.Text = "Scanned Text: " + results.First().Value; 
        // Display the result
                }
                else
                {
                    resultLabel.Text = "No QR code detected";
                }
        }
        catch (Exception ex)
        {
            resultLabel.Text = "Error: " + ex.Message;
        }
        }
    }
}
Imports IronQrCode
Imports Microsoft.Maui.Controls
Imports Microsoft.Maui.Essentials

Namespace MauiQRCodeScanner
	Partial Public Class MainPage
		Inherits ContentPage

		Public Sub New()
			License.LicenseKey = "Your key" ' Add your IronQR license key here
			InitializeComponent()
		End Sub

		' OnScanButtonClicked method with object sender as input
		Private Async Sub OnScanButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
			' Check for camera permission
			Dim status = Await Permissions.RequestAsync(Of Permissions.Camera)()
			If status <> PermissionStatus.Granted Then
				Await DisplayAlert("Permission Denied", "Cannot scan QR codes without camera permission", "OK")
				Return
			End If

			' Start scanning QR codes
			Try
				Dim images = Await FilePicker.Default.PickAsync(New PickOptions With {
					.PickerTitle = "Pick image",
					.FileTypes = FilePickerFileType.Images
				})
				Dim imageSource = images.FullPath.ToString()

				Dim inputBmp = AnyBitmap.FromFile(imageSource)
				' Load the asset into QrImageInput
				Dim imageInput As New QrImageInput(inputBmp)

				' Create a QR Reader object
				Dim reader As New QrReader()

				' Read the input and get all embedded QR Codes
				Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

				If results.Any() Then
					resultLabel.Text = "Scanned Text: " & results.First().Value
		' Display the result
				Else
					resultLabel.Text = "No QR code detected"
				End If
		Catch ex As Exception
			resultLabel.Text = "Error: " & ex.Message
		End Try
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

代码解释

  • 权限:我们使用Permissions.RequestAsync<Permissions.Camera>()请求摄像头权限。 如果权限被拒绝,用户会看到一个警告。
  • IronQR扫描器:使用IronQR库对象和方法来扫描二维码。 QrReader.Read()方法尝试解码二维码,并将结果显示在标签上。

输入二维码

二维码输入

输出

QR代码输出

选择所需的二维码或从摄像头饲料中捕获。

选择二维码

结果在UI中如下显示。

二维码UI输出

IronQR许可(可试用)

IronQR在移动应用代码中使用许可证密钥。 开发人员可以很容易地从许可证页面获取试用许可证。 在使用IronQR库之前,将许可证放置在代码中的某个位置,如下所示。

License.LicenseKey = "Your License";
License.LicenseKey = "Your License";
License.LicenseKey = "Your License"
$vbLabelText   $csharpLabel

结论

在本文中,我们介绍了在.NET MAUI应用程序中使用IronQR构建二维码扫描仪的过程。 我们首先通过设置.NET MAUI应用程序,安装IronQR包,并实现UI和扫描逻辑开始。 IronQR使得在.NET MAUI应用程序中进行二维码扫描变得非常简单和有效。

IronQR库旨在跨平台,从而确保用.NET MAUI构建的应用程序可以在所有目标设备上一致地访问二维码功能,无论它们是智能手机、平板电脑还是台式系统。 IronQR还支持自动处理摄像头权限等功能,使得集成二维码扫描变得更容易,无需手动管理权限的麻烦。

简而言之,IronQR for .NET MAUI使开发人员能够快速在其移动应用中实现二维码扫描和生成功能,简化了开发并在所有平台上提升了用户体验。

常见问题解答

我如何在.NET MAUI应用中集成QR Code扫描器?

要在.NET MAUI应用中集成QR Code扫描器,请通过NuGet安装IronQR库,并使用QrReader.Read()解码QR Codes。

创建用于QR扫描的.NET MAUI项目的步骤是什么?

首先打开Visual Studio,使用.NET MAUI App模板创建一个新项目,并选择必要的.NET版本。然后,安装IronQR库以实施QR扫描。

在.NET MAUI应用中QR扫描需要哪些必备权限?

QR扫描需要摄像头权限。在Android上,在AndroidManifest.xml中添加必要的权限,在iOS上,更新Info.plist以描述摄像头使用。

我如何在.NET MAUI应用中管理摄像头权限?

使用Permissions.RequestAsync<Permissions.Camera>()请求摄像头权限。如果被拒绝,请显示警报通知用户。

使用IronQR库进行QR扫描有什么好处?

IronQR提供跨平台支持、高性能、可定制设置、自动摄像头权限处理和多格式支持,使其成为.NET MAUI应用的理想选择。

我如何排除.NET MAUI应用中QR Code扫描的问题?

确保IronQR库已正确安装、摄像头权限已授予且设备摄像头正常工作。使用try-catch块检查代码中的任何错误。

开发.NET MAUI和QR扫描需要什么?

您需要Visual Studio 2022或更高版本、.NET 6.0 SDK或更新版本,以及IronQR NuGet包来促进QR Code扫描和条形码检测。

我如何获得QR code库的试用许可证?

访问IronQR许可证页面获取试用许可证密钥。在使用IronQR功能之前将许可证密钥插入代码中。

IronQR库支持哪些格式的QR扫描?

IronQR支持多种QR Code和条形码格式,确保可在不同应用和平台上使用。

我如何在.NET应用中生成QR Codes?

使用IronQR库的方法有效地生成QR Codes,允许您根据应用程序的需要自定义设置。

Jordi Bardia
软件工程师
Jordi 最擅长 Python、C# 和 C++,当他不在 Iron Software 利用这些技能时,他就在游戏编程。分享产品测试、产品开发和研究的责任,Jordi 在持续的产品改进中增加了巨大的价值。多样的经验使他面临挑战并保持投入,他表示这是在 Iron Software 工作的最喜欢的方面之一。Jordi 在佛罗里达州迈阿密长大,并在佛罗里达大学学习计算机科学和统计学。