.NET MAUI QR Code Scanner

This article was translated from English: Does it need improvement?
Translated
View the article in English

Wprowadzenie

.NET MAUI (.NET Multi-platform App UI) to multiplatformowy framework do tworzenia natywnych aplikacji mobilnych i desktopowych z jednego kodu źródłowego w C#. Jeden projekt może celować w Androida, iOS, macOS i Windows, udostępniając układy interfejsu użytkownika i logikę biznesową na wszystkich platformach. Integracja MAUI z ekosystemem .NET oznacza, że programiści mogą dotrzeć do użytkowników mobilnych bez rezygnacji z znanych narzędzi lub języków.

W tym artykule wyjaśnimy, jak zbudować natywny skaner kodów QR w aplikacji .NET MAUI, używając IronQR do dekodowania kodów QR wybranych z biblioteki zdjęć urządzenia.

IronQR: biblioteka kodów QR w języku C

Aby odczytywać kody QR w aplikacji, użyjemy biblioteki IronQR dla .NET. Zapewnia ona prosty API do wykrywania i dekodowania kodów QR z dowolnego źródła obrazów, w tym plików wybranych na urządzeniu mobilnym. IronQR działa na wszystkich platformach docelowych MAUI i nie wymaga wiedzy domenowej o kodach kreskowych do integracji.

IronQR może dekodować standardowe kody QR, Micro QR i kody rMQR, przyjmując wejście obrazów jako pliki, strumienie lub bitmapy. Można ją zainstalować w kilka sekund za pomocą Menedżera pakietów NuGet.

Kroki budowy skanera kodów QR w .NET MAUI

Postępuj według tych kroków, aby dodać skanowanie kodu QR do aplikacji .NET MAUI.

Wymagania wstępne

  1. Visual Studio 2022 z zainstalowanym środowiskiem pracy .NET MAUI
  2. Projekt .NET MAUI celujący w Androida lub iOS

Zainstaluj IronQR

Zainstaluj bibliotekę IronQR za pomocą NuGet Package Manager Console w Visual Studio. Przejdź do Tools > NuGet Package Manager > Package Manager Console i uruchom:

Install-Package IronQR

Alternatywnie, wyszukaj IronQR na NuGet i zainstaluj najnowszą wersję.

Projektowanie front-endu

Interfejs użytkownika skanera składa się z przycisku do wyzwalania wyboru obrazu, widoku obrazu do podglądu wybranego kodu QR oraz etykiety do wyświetlania zdekodowanego wyniku.

Zastąp zawartość MainPage.xaml następującym:

<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiQrScanner.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

            <Button
                x:Name="scanButton"
                Text="Select QR Code Image"
                SemanticProperties.Hint="Select Image"
                Clicked="OnScanButtonClicked"
                HorizontalOptions="Center" />

            <Image
                x:Name="qrImage"
                SemanticProperties.Description="Selected QR Code"
                HeightRequest="200"
                HorizontalOptions="Center" />

            <Label
                x:Name="resultLabel"
                Text="Scanned Text: "
                HorizontalOptions="Center"
                VerticalOptions="Center" />

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiQrScanner.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

            <Button
                x:Name="scanButton"
                Text="Select QR Code Image"
                SemanticProperties.Hint="Select Image"
                Clicked="OnScanButtonClicked"
                HorizontalOptions="Center" />

            <Image
                x:Name="qrImage"
                SemanticProperties.Description="Selected QR Code"
                HeightRequest="200"
                HorizontalOptions="Center" />

            <Label
                x:Name="resultLabel"
                Text="Scanned Text: "
                HorizontalOptions="Center"
                VerticalOptions="Center" />

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>
XML

Przykładowe dane wejściowe

Użyj poniższego kodu QR jako obrazu testowego. Zapisz to na swoim urządzeniu, a następnie wybierz przez selektor plików aplikacji. Zdekodowana wartość powinna być wyświetlana jako https://ironsoftware.com.

Sample QR code encoding https://ironsoftware.com for testing the .NET MAUI QR scanner

Przykładowy kod QR — koduje https://ironsoftware.com

Skanowanie kodów QR za pomocą IronQR

Po dotknięciu przycisku skanowania FilePicker otwiera bibliotekę obrazów urządzenia. Po wybraniu zdjęcia przez użytkownika pełna ścieżka jest ładowana do AnyBitmap, który jest przekazywany do QrReader.Read(). Zdekodowana wartość z pierwszego wykrytego kodu QR jest wyświetlana w etykiecie wyników.

Dodaj następującą metodę do MainPage.xaml.cs:

using IronQr;
using IronSoftware.Drawing;

private async void OnScanButtonClicked(object sender, EventArgs e)
{
    // Start scanning QR codes
    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);

    // Display the first result
    resultLabel.Text = "Scanned Text: " + results.First().Value;
}
using IronQr;
using IronSoftware.Drawing;

private async void OnScanButtonClicked(object sender, EventArgs e)
{
    // Start scanning QR codes
    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);

    // Display the first result
    resultLabel.Text = "Scanned Text: " + results.First().Value;
}
Imports IronQr
Imports IronSoftware.Drawing

Private Async Sub OnScanButtonClicked(sender As Object, e As EventArgs)
    ' Start scanning QR codes
    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)

    ' Display the first result
    resultLabel.Text = "Scanned Text: " & results.First().Value
End Sub
$vbLabelText   $csharpLabel

FilePicker.Default.PickAsync jest dostarczana przez warstwę abstrakcji platformy MAUI i działa na Androidzie, iOS i Windows bez żadnego specyficznego dla platformy kodu. AnyBitmap.FromFile obsługuje dekodowanie obrazów, a QrReader.Read zwraca IEnumerable<QrResult> z jednym wpisem na każdy kod QR znaleziony w obrazie.

Wynik

Wybranie obrazu kodu QR wyzwala skanowanie. Zdekodowana wartość pojawia się w etykiecie wyników poniżej podglądu obrazu.

.NET MAUI QR Code Scanner using IronQR — app selecting a QR code image and displaying the decoded value

Kod QR wybrany, a zdekodowana wartość wyświetlona w etykiecie wyniku

Pobierz projekt

Kliknij tutaj, aby pobrać kompletny projekt MauiQrScanner.

Wnioski

W tym artykule pokazaliśmy, jak zbudować natywny skaner kodów QR w aplikacji .NET MAUI, używając IronQR. FilePicker API zapewnia natywne dla platformy wybieranie obrazów na Androidzie, iOS i Windows, podczas gdy QrReader.Read IronQR obsługuje dekodowanie za pomocą jednego wywołania. To samo podejście skalowalne jest do wielu kodów QR na obraz przez iterację nad pełną kolekcją wyników zamiast wywoływania .First().

IronQR wymaga licencji do użytku w środowisku deweloperskim i komercyjnym. Szczegóły licencji dostępne tutaj.

Aby szczegółowo przyjrzeć się odczytywaniu właściwości kodu QR poza wartością, zobacz przewodniki Read QR Code Value i Read QR Code Type.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 63,676 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronQR
uruchom próbkę obserwuj, jak Twój URL staje się kodem QR.