Zum Fußzeileninhalt springen
IRONBARCODE VERWENDEN

MAUI Barcode-Scanner mit IronBarcode: Schritt-für-Schritt-Anleitung

Mobile Anwendungen setzen zunehmend auf Barcode-Scanning für Bestandsverwaltung, Kassensysteme und Produktverfolgung. Der Aufbau eines MAUI-Barcodescanners ermöglicht es Ihnen, die Barcode-Erkennung direkt in Ihre .NET MAUI-Anwendung zu integrieren, indem ein Kamerafeed mit der Bilddateiverarbeitung kombiniert wird, um QR-Codes, Data Matrix und andere Barcode-Formate zu erkennen. Während sich viele Bibliotheken auf die Kameravorschau konzentrieren, zeichnet sich IronBarcode durch die präzise Erfassung von Barcodes auch unter schwierigen Bedingungen aus – schräge Winkel, schlechte Beleuchtung und beschädigte Etiketten werden ohne zusätzliche Konfiguration bewältigt.

Dieser Leitfaden führt Sie durch jeden einzelnen Schritt der Implementierung des Barcode-Scannens in einem .NET MAUI Projekt mit IronBarcode. Am Ende dieses Kurses werden Sie in der Lage sein, mehrere Barcodes aus einer einzigen Bilddatei zu scannen, Barcodes mit der Kamera eines Geräts zu erfassen und die Bibliothek sicher in Ihre eigenen plattformübergreifenden Projekte zu integrieren.

Welche Voraussetzungen müssen für den Bau eines MAUI-Barcodescanners erfüllt sein?

Bevor Sie beginnen, stellen Sie sicher, dass Ihre Entwicklungsumgebung in Ordnung ist:

  • Visual Studio 2022 (Version 17.8 oder höher) mit installierter .NET MAUI Workload.
  • .NET 10 SDK -- Download von der offiziellen .NET Website
  • Grundlegende C#-Kenntnisse – Vertrautheit mit async/await-Mustern ist von Vorteil
  • Physisches Gerät oder Emulator, konfiguriert für Kameratests
  • IronBarcode -Lizenz – eine kostenlose Testversion steht zur Verfügung.

Wenn Sie sicherstellen, dass Visual Studio die MAUI-Workload installiert hat, bevor Sie Ihr Projekt erstellen, sparen Sie später viel Zeit bei der Fehlersuche. Sie können dies im Visual Studio Installer unter "Einzelne Komponenten" überprüfen, indem Sie nach ".NET Multiplattform-App-UI-Entwicklung" suchen.

Wie IronBarcode in MAUI integriert wird

.NET MAUI bietet Ihnen eine einzige Codebasis, die auf Android, iOS, macOS und Windows abzielt. Die Herausforderung beim Barcode-Scannen in dieser Umgebung besteht darin, dass jede Plattform den Kamerazugriff unterschiedlich handhabt. IronBarcode löst dieses Problem, indem es auf der Bildverarbeitungsebene arbeitet – Sie erfassen das Bild über MAUIs MediaPicker und übergeben dann die Bytes zur Analyse an IronBarcode .

Diese Trennung der Zuständigkeiten sorgt für sauberen Code und vermeidet plattformspezifische Barcode-SDKs. Das Offline-Verarbeitungsmodell von IronBarcode bedeutet auch, dass die Barcode-Daten das Gerät nie verlassen, was für Anwendungen in regulierten Branchen von Bedeutung ist.

Unterstützte Barcode-Formate

IronBarcode liest eine Vielzahl von Formaten , darunter:

Von IronBarcode unterstützte Barcode-Formate
Formatkategorie Formate Häufige Anwendungsfälle
1D Linear Code 128, Code 39, EAN-13, UPC-A, ITF Einzelhandel, Logistik, Gesundheitswesen
2D-Matrix QR-Code, Data Matrix, Aztec, PDF417 Mobile Zahlungen, Ticketing, Fertigung
Post USPS, Royal Mail, Deutsche Post Versand- und Postdienste
Spezialität MaxiCode, GS1, MicroPDF417 Lieferkette, Transport, Pakete

Wie richtet man ein MAUI-Barcode-Scanning-Projekt ein?

Erstellen Sie zunächst ein neues .NET MAUI App-Projekt in Visual Studio 2022. Benennen Sie es BarcodeScannerApp und wählen Sie .NET 10 als Zielframework aus. Visual Studio generiert die standardmäßige MAUI-Projektstruktur mit plattformspezifischen Ordnern für Android, iOS, macOS und Windows.

IronBarcode über NuGet installieren

Öffnen Sie die NuGet Paket-Manager-Konsole und führen Sie folgenden Befehl aus:

Install-Package BarCode

Alternativ können Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt klicken, " NuGet Pakete verwalten" auswählen, nach IronBarCode suchen und die neueste stabile Version installieren. Speziell for .NET MAUI Projekte enthält das NuGet Paket von IronBarcode alle notwendigen nativen Abhängigkeiten.

Aktivierung Ihrer Lizenz

Aktivieren Sie IronBarcode nach der Installation frühzeitig im Lebenszyklus der Anwendung mit Ihrem Lizenzschlüssel. Der beste Platz dafür ist in MauiProgram.cs, bevor der App- Builder ausgeführt wird:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Fordern Sie einen kostenlosen Testlizenzschlüssel auf der IronSoftware-Website an. Mit Testlizenzen können Sie während der Entwicklung alle Funktionen ohne zeitliche Einschränkungen testen. Beachten Sie jedoch, dass die Ausgabe bis zum Erwerb einer Volllizenz ein Testwasserzeichen enthalten kann.

Wie konfiguriert man Kameraberechtigungen für Android und iOS?

Plattformspezifische Kameraberechtigungen sind für die Funktionalität des Scannens von Barcodes unerlässlich. Jede Plattform benötigt eine spezifische Konfiguration in ihren Manifestdateien, bevor MediaPicker.CapturePhotoAsync() erfolgreich ausgeführt werden kann.

Android-Berechtigungen

Bearbeiten Sie Platforms/Android/AndroidManifest.xml, um den Kamerazugriff zu deklarieren:

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

Der Eintrag android.permission.CAMERA fordert vom Benutzer eine Laufzeitberechtigung an. Die uses-feature-Deklarationen teilen dem Google Play Store mit, dass Ihre App Kamerahardware und Autofokusfunktion benötigt. Ohne diese Einstellungen können Android-Geräte zwar die Berechtigungsanfrage gewähren, den Kamerazugriff intern aber weiterhin blockieren.

Für Android 13 und höher (API-Level 33+) müssen Sie möglicherweise auch die granularen Medienberechtigungen in Ihrem MainActivity.cs mit ActivityCompat.RequestPermissions verwalten. Die MAUI MediaPicker Abstraktion erledigt den größten Teil davon automatisch, aber Tests auf physischen Geräten werden vor der Veröffentlichung empfohlen.

iOS-Berechtigungen

Ändern Sie Platforms/iOS/Info.plist, um die Beschreibung der Kameranutzung einzufügen:

<key>NSCameraUsageDescription</key>
<string>This app requires camera access to scan barcodes</string>
<key>NSCameraUsageDescription</key>
<string>This app requires camera access to scan barcodes</string>
XML

iOS verlangt für jede datenschutzrelevante Berechtigung eine für Menschen verständliche Erklärung. Der Überprüfungsprozess des Apple App Stores führt zur Ablehnung Ihrer App, wenn diese Beschreibung fehlt oder unklar ist. Der Text erscheint im Dialogfeld für Systemberechtigungen, das dem Benutzer angezeigt wird, wenn die App zum ersten Mal auf die Kamera zugreift.

Für iPadOS sollten Sie außerdem NSPhotoLibraryUsageDescription hinzufügen, wenn Sie planen, Benutzern zusätzlich zur Live-Kamera das Scannen von Barcodes aus gespeicherten Fotos zu ermöglichen.

Windows und macOS

Bei Windows-Desktop- und macOS-Systemen werden die Kamerazugriffsberechtigungen über die Anwendungsmanifest- bzw. Berechtigungsdateien verwaltet. Das MAUI-Framework erledigt den größten Teil davon auf Template-Ebene, aber überprüfen Sie, ob Package.appxmanifest unter Windows die Webcam-Gerätefunktionalität beinhaltet.

Wie erstellt man die Benutzeroberfläche für den Barcode-Scanner?

Entwerfen Sie eine Benutzeroberfläche in MainPage.xaml, die den Benutzern während des Scanvorgangs klares Feedback gibt. Ein minimalistisches, aber funktionales Layout umfasst eine Bildvorschau, einen Ergebnisanzeigebereich und eine Scan-Auslösetaste:

<?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="BarcodeScannerApp.MainPage"
             Title="Barcode Scanner">
    <VerticalStackLayout Padding="20" Spacing="20">
        <Label Text="Point the camera at a barcode"
               FontSize="16"
               HorizontalOptions="Center"
               TextColor="#555555" />
        <Image x:Name="CapturedImage"
               HeightRequest="300"
               Aspect="AspectFit"
               BackgroundColor="#F0F0F0" />
        <Label x:Name="ResultLabel"
               Text="Tap Scan to begin"
               FontSize="18"
               HorizontalOptions="Center"
               FontAttributes="Bold" />
        <Label x:Name="FormatLabel"
               Text=""
               FontSize="13"
               HorizontalOptions="Center"
               TextColor="#888888" />
        <Button Text="Scan Barcode"
                Clicked="OnScanClicked"
                BackgroundColor="#007ACC"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
        <Button Text="Load from Gallery"
                Clicked="OnPickFromGalleryClicked"
                BackgroundColor="#5C5C5C"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
    </VerticalStackLayout>
</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="BarcodeScannerApp.MainPage"
             Title="Barcode Scanner">
    <VerticalStackLayout Padding="20" Spacing="20">
        <Label Text="Point the camera at a barcode"
               FontSize="16"
               HorizontalOptions="Center"
               TextColor="#555555" />
        <Image x:Name="CapturedImage"
               HeightRequest="300"
               Aspect="AspectFit"
               BackgroundColor="#F0F0F0" />
        <Label x:Name="ResultLabel"
               Text="Tap Scan to begin"
               FontSize="18"
               HorizontalOptions="Center"
               FontAttributes="Bold" />
        <Label x:Name="FormatLabel"
               Text=""
               FontSize="13"
               HorizontalOptions="Center"
               TextColor="#888888" />
        <Button Text="Scan Barcode"
                Clicked="OnScanClicked"
                BackgroundColor="#007ACC"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
        <Button Text="Load from Gallery"
                Clicked="OnPickFromGalleryClicked"
                BackgroundColor="#5C5C5C"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
    </VerticalStackLayout>
</ContentPage>
XML

Das Layout bietet zwei Scanpfade: Aufnehmen eines neuen Fotos mit der Kamera und Auswählen eines vorhandenen Bildes aus der Galerie. Dies ist relevant für Arbeitsabläufe, bei denen Benutzer Barcodes im Voraus fotografieren oder Bilder per E-Mail erhalten. Der Code FormatLabel zeigt das erkannte Barcode-Format zusammen mit dem dekodierten Wert an, was beim Debuggen und der Benutzerüberprüfung hilfreich ist.

Hinzufügen von Scan-Status-Feedback

Für ein optimales Benutzererlebnis sollten Sie die Scan-Buttons in ein ActivityIndicator einbetten, das während der Verarbeitung angezeigt wird. Die asynchrone API von IronBarcode macht dies unkompliziert – Sie können IsRunning = true setzen, bevor Sie BarcodeReader.ReadAsync aufrufen, und es im Block finally zurücksetzen.

Wie implementiert man die Barcode-Lesefunktionalität?

Implementieren Sie die Kern-Scanlogik in MainPage.xaml.cs. Der unten stehende Code übernimmt sowohl die Kameraaufnahme als auch die Galerieauswahl und verwendet dabei geeignete asynchrone Muster und eine Fehlerbehandlung:

using IronBarCode;
using IronSoftware.Drawing;

namespace BarcodeScannerApp;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnScanClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.CapturePhotoAsync());
    }

    private async void OnPickFromGalleryClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.PickPhotoAsync());
    }

    private async Task ScanFromSource(Func<Task<FileResult?>> sourceFunc)
    {
        try
        {
            var photo = await sourceFunc();
            if (photo is null) return;

            using var stream = await photo.OpenReadAsync();
            using var memoryStream = new MemoryStream();
            await stream.CopyToAsync(memoryStream);
            var imageBytes = memoryStream.ToArray();

            // Show the captured image in the UI
            CapturedImage.Source = ImageSource.FromStream(() =>
                new MemoryStream(imageBytes));

            // Process with IronBarcode
            var bitmap = AnyBitmap.FromBytes(imageBytes);
            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false
            };

            var results = await BarcodeReader.ReadAsync(bitmap, options);

            if (results.Any())
            {
                var first = results.First();
                ResultLabel.Text = $"Value: {first.Value}";
                FormatLabel.Text = $"Format: {first.BarcodeType}";
            }
            else
            {
                ResultLabel.Text = "No barcode detected";
                FormatLabel.Text = string.Empty;
            }
        }
        catch (FeatureNotSupportedException)
        {
            await DisplayAlert("Unsupported",
                "Camera is not available on this device.", "OK");
        }
        catch (PermissionException)
        {
            await DisplayAlert("Permission Required",
                "Please grant camera permission in Settings.", "OK");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error",
                $"Scanning failed: {ex.Message}", "OK");
        }
    }
}
using IronBarCode;
using IronSoftware.Drawing;

namespace BarcodeScannerApp;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnScanClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.CapturePhotoAsync());
    }

    private async void OnPickFromGalleryClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.PickPhotoAsync());
    }

    private async Task ScanFromSource(Func<Task<FileResult?>> sourceFunc)
    {
        try
        {
            var photo = await sourceFunc();
            if (photo is null) return;

            using var stream = await photo.OpenReadAsync();
            using var memoryStream = new MemoryStream();
            await stream.CopyToAsync(memoryStream);
            var imageBytes = memoryStream.ToArray();

            // Show the captured image in the UI
            CapturedImage.Source = ImageSource.FromStream(() =>
                new MemoryStream(imageBytes));

            // Process with IronBarcode
            var bitmap = AnyBitmap.FromBytes(imageBytes);
            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false
            };

            var results = await BarcodeReader.ReadAsync(bitmap, options);

            if (results.Any())
            {
                var first = results.First();
                ResultLabel.Text = $"Value: {first.Value}";
                FormatLabel.Text = $"Format: {first.BarcodeType}";
            }
            else
            {
                ResultLabel.Text = "No barcode detected";
                FormatLabel.Text = string.Empty;
            }
        }
        catch (FeatureNotSupportedException)
        {
            await DisplayAlert("Unsupported",
                "Camera is not available on this device.", "OK");
        }
        catch (PermissionException)
        {
            await DisplayAlert("Permission Required",
                "Please grant camera permission in Settings.", "OK");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error",
                $"Scanning failed: {ex.Message}", "OK");
        }
    }
}
$vbLabelText   $csharpLabel

Diese Implementierung verwendet eine gemeinsam genutzte ScanFromSource Hilfsmethode, um die Duplizierung der Bildverarbeitungslogik zwischen Kamera- und Galeriepfad zu vermeiden. Die Methode AnyBitmap.FromBytes verarbeitet JPEG, PNG, WebP und andere gängige Bildformate automatisch – eine manuelle Formaterkennung ist nicht erforderlich.

Das Ergebnisobjekt gibt unter anderem die Eigenschaften first.Value (die dekodierte Zeichenkette), first.BarcodeType (die Format-Enumeration) und first.BarcodeImage (ein Ausschnitt des erkannten Barcode-Bereichs) frei. Die vollständige Liste finden Sie in der Dokumentation der BarcodeResult-Klasse .

Testen Ihrer Scan-Implementierung

Nachdem der Code implementiert ist, können Sie ihn mit einem Standard-Barcode testen:

So erstellen Sie einen MAUI-Barcode-Scanner mit IronBarcode: Abbildung 2 – Eingabe eines Test-Barcodes

Nach dem Scannen wird der dekodierte Wert auf dem Bildschirm angezeigt:

So erstellen Sie einen MAUI-Barcode-Scanner mit IronBarcode: Abbildung 3 – Gescannter Barcode-Wert

Wie konfiguriert man die erweiterten Scanoptionen?

IronBarcode stellt ein BarcodeReaderOptions-Objekt bereit, mit dem Sie das Erkennungsverhalten für Ihren spezifischen Anwendungsfall feinabstimmen können. Das Verständnis dieser Optionen hilft Ihnen, Geschwindigkeit und Genauigkeit je nach den Anforderungen Ihrer Anwendung in Einklang zu bringen.

Gezielte Ausrichtung auf bestimmte Barcode-Typen

Die Angabe der exakten Barcode-Typen, die Sie erwarten, reduziert die Verarbeitungszeit erheblich, da IronBarcode unnötige Formatprüfungen überspringt:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};

var results = await BarcodeReader.ReadAsync(bitmap, options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};

var results = await BarcodeReader.ReadAsync(bitmap, options);
$vbLabelText   $csharpLabel

So erstellen Sie einen MAUI-Barcode-Scanner mit IronBarcode: Abbildung 4 – Mehrere Codes aus demselben Bild gescannt

Die Einstellung ExpectMultipleBarcodes = true weist IronBarcode an, nach dem Auffinden des ersten Ergebnisses mit dem Scannen fortzufahren. Dies ist unerlässlich für Lagerprozesse, bei denen ein einzelner Lieferschein ein Dutzend Barcodes enthalten kann.

Optionen für die Lesegeschwindigkeit

Das Enum ReadingSpeed bietet vier Ebenen: ExtremeDetail, Detailed, Balanced und QuickScan. Verwenden Sie QuickScan für Szenarien mit hohem Durchsatz, in denen Barcodes sauber und gut beleuchtet sind. Wechseln Sie zu Detailed oder ExtremeDetail, wenn Sie von niedrig auflösenden Kameraaufnahmen oder teilweise beschädigten Etiketten scannen.

Weitere Informationen zum Einstellen von BarcodeReaderOptions , einschließlich Bildkorrekturfiltern und Konfidenzschwellenwerten, finden Sie in der Dokumentation mit detaillierten Beispielen.

Bildkorrektur und Vorverarbeitung

IronBarcode beinhaltet eine integrierte Bildkorrektur, die automatisch mit gedrehten, verzerrten oder schlecht beleuchteten Barcodes umgeht. Sie können Vorverarbeitungsfilter auch manuell über BarcodeReaderOptions.ImageFilters anwenden:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Detailed,
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f)
    }
};
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Detailed,
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f)
    }
};
$vbLabelText   $csharpLabel

Vorverarbeitungsfilter sind besonders nützlich, wenn die Anwendung auf ältere Android-Geräte mit Kamerasensoren geringerer Qualität abzielt oder wenn Benutzer Barcodes wahrscheinlich unter suboptimalen Lichtverhältnissen wie in Lagerhallen oder im Freien fotografieren werden.

Wie gehen Sie mit häufig auftretenden Fehlersuchszenarien um?

Selbst bei einem gut konfigurierten MAUI-Barcodescanner können Probleme durch gerätespezifisches Verhalten, Bildqualitätsprobleme oder Plattformbeschränkungen auftreten.

Kamera öffnet nicht

Falls die Kamera nicht startet, überprüfen Sie, ob die Berechtigungen sowohl in AndroidManifest.xml als auch in Info.plist korrekt deklariert sind. Stellen Sie die App anschließend mit einem sauberen Build neu bereit, anstatt einen Hot Reload durchzuführen. Prüfen Sie bei Android auch, ob Ihr Testgerät eine nicht standardmäßige Kamerakonfiguration verwendet – bei einigen Geräten mit mehreren Kameras ist eine explizite Objektivauswahl erforderlich.

Auf dem Simulator wird MediaPicker.CapturePhotoAsync() nicht unterstützt. Testen Sie Kamerafunktionen immer auf einem physischen Gerät. Der Emulator unterstützt PickPhotoAsync für die Galerieauswahl, die Sie für grundlegende UI-Tests mit vorab geladenen Bildern verwenden können.

Mangelhafte Scangenauigkeit

Falls IronBarcode keine Ergebnisse oder falsche Werte liefert, versuchen Sie folgende Anpassungen:

  • Erhöhen Sie den Wert von Speed auf ReadingSpeed.Detailed oder ExtremeDetail
  • Füge SharpenFilter und ContrastFilter zur Bildfilterpipeline hinzu.
  • Stellen Sie sicher, dass die Auflösung des aufgenommenen Bildes mindestens 720p beträgt; niedrigere Auflösungen führen bei dichten Formaten wie Data Matrix zu Fehldetektionen.
  • Prüfen Sie, ob der Barcode-Typ in Ihrer ExpectBarcodeTypes Maske enthalten ist.

Der IronBarcode Leitfaden zur Fehlerbehebung enthält zusätzliche Diagnoseschritte für formatspezifische Probleme.

Debugging-Tipps

Große Kamerabilder beanspruchen beim Laden in MemoryStream erheblichen Speicherplatz. Verwenden Sie immer using Anweisungen für alle Stream-Objekte, um deren Freigabe sicherzustellen. Bei kontinuierlichen Scan-Workflows, bei denen Benutzer mehrere Elemente nacheinander scannen, rufen Sie bitmap.Dispose() nach der Verarbeitung explizit auf, anstatt auf den Garbage Collector zu warten.

Bei Android-Geräten mit begrenztem Heap-Speicherplatz sollten Sie erwägen, das Bild vor der Übergabe an IronBarcode herunterzuskalieren, wenn es sich bei den Scans um saubere, kontrastreiche Barcodes handelt, die für eine genaue Dekodierung keine volle Auflösung benötigen.

Plattformspezifisches iOS-Verhalten

Unter iOS wird beim ersten Mal, wenn Ihre App die Kameraberechtigung anfordert, ein einmaliger Dialog angezeigt. Wenn der Benutzer dies ablehnt, werden nachfolgende Aufrufe von CapturePhotoAsync einen PermissionException auslösen. In diesem Fall leiten Sie den Benutzer zu den Einstellungen weiter, was Sie mit AppInfo.ShowSettingsUI() tun können.

Bitte prüfen Sie, ob NSCameraUsageDescription in Info.plist vorhanden ist, bevor Sie die App im App Store einreichen. Fehlende Datenschutzhinweise führen ohne detaillierte Begründung seitens des Prüfteams zur automatischen Ablehnung. Beachten Sie die Apple Human Interface Guidelines für den Kamerazugriff, um Best Practices für den Zeitpunkt und die Formulierung von Berechtigungsanfragen zu erhalten.

Was sind Ihre nächsten Schritte?

Nachdem Sie nun einen funktionierenden MAUI-Barcodescanner mit IronBarcode besitzen, stehen Ihnen je nach den Anforderungen Ihrer Anwendung verschiedene Wege offen:

  • Barcodes generieren – IronBarcode enthält eine API zur Barcode-Generierung , mit der QR-Codes, Code-128-Etiketten und andere Formate aus Zeichenkettendaten erstellt werden können.
  • Stapelverarbeitung -- mehrere Bilddateien in einer Schleife mit BarcodeReader.ReadAsync und ExpectMultipleBarcodes = true verarbeiten; Siehe die Beispiele für Stapelverarbeitung.
  • PDF-Barcode-Extraktion -- IronBarcode kann in PDF-Dokumenten eingebettete Barcodes mit derselben BarcodeReader Klasse lesen; Erkunden Sie die PDF-Dokumentation zum Barcode-Lesen.
  • Styling und Branding – die visuelle Darstellung der generierten Barcodes mit Farben, Logos und Anmerkungen anpassen; Barcode-Styling-Optionen anzeigen
  • Weitere IronSoftware-Produkte – falls Ihre MAUI-App auch PDF-Generierung, OCR oder Tabellenkalkulationsunterstützung benötigt, erkunden Sie die vollständige Iron Suite für konsistente plattformübergreifende Funktionen.

Beginnen Sie mit einer kostenlosen Testlizenz, um das System während Ihrer Testphase ohne Einschränkungen nutzen zu können. Informationen zu Produktionslizenzoptionen und Mengenrabatten finden Sie auf der IronBarcode Preisseite . Das IronBarcode Dokumentationsportal und das IronBarcode GitHub Repository bieten zusätzliche Codebeispiele und Community-Support.

Häufig gestellte Fragen

Was ist der Vorteil von IronBarcode für einen MAUI-Barcodescanner?

IronBarcode verarbeitet Barcodes auf der Bildebene, arbeitet offline, unterstützt über 30 Formate und bewältigt schwierige Bedingungen wie schräge Winkel und schlechte Lichtverhältnisse ohne zusätzliche Konfiguration.

Kann IronBarcode mehrere Barcodes in einem Bild erkennen?

Ja. Setzen Sie `ExpectMultipleBarcodes = true` in `BarcodeReaderOptions` und rufen Sie `BarcodeReader.ReadAsync` auf. IronBarcode gibt dann alle erkannten Barcodes in der Ergebnisliste zurück.

Wie konfiguriere ich die Kameraberechtigungen für Android und iOS in MAUI?

Fügen Sie für Android die Elemente `uses-permission` und `uses-feature` der Klasse `CAMERA` zur Datei `AndroidManifest.xml` hinzu. Fügen Sie für iOS die Klasse `NSCameraUsageDescription` mit einer verständlichen Beschreibung zur Datei `Info.plist` hinzu.

Unterstützt IronBarcode das Scannen von Barcodes im Offline-Modus?

Ja. IronBarcode verarbeitet Bilder vollständig auf dem Gerät, ohne Daten an externe Server zu senden, was für datenschutzsensible Anwendungen wichtig ist.

Welche Barcode-Formate unterstützt IronBarcode in MAUI?

IronBarcode unterstützt QR-Code, Code 128, Code 39, EAN-13, UPC-A, Data Matrix, PDF417, Aztec, MaxiCode und viele weitere Formate. Über BarcodeEncoding-Flags können Sie gezielt bestimmte Formate ansprechen.

Wie kann ich die Scangenauigkeit bei Bildern mit geringer Qualität verbessern?

Stellen Sie die Lesegeschwindigkeit auf „Detailliert“ oder „Extremdetail“ ein, fügen Sie den Bildfiltern „SchärfenFilter“ und „KontrastFilter“ hinzu und stellen Sie sicher, dass das aufgenommene Bild mindestens eine Auflösung von 720p hat.

Kann IronBarcode Barcodes aus PDF-Dateien in einer MAUI-App lesen?

Ja. Die BarcodeReader-Klasse von IronBarcode kann Barcodes, die in PDF-Dokumenten eingebettet sind, mithilfe derselben ReadAsync-API extrahieren, die auch für Bilddateien verwendet wird.

Wie behandle ich eine PermissionException, wenn der Kamerazugriff verweigert wird?

Fangen Sie eine PermissionException in einem try/catch-Block ab und rufen Sie AppInfo.ShowSettingsUI() auf, um den Benutzer zu den Geräteeinstellungen zu leiten, wo er den Kamerazugriff wieder aktivieren kann.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an