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 mit MAUIs MediaPicker und geben die Bytes dann zur Analyse an IronBarcode weiter.
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:
| 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?
Beginnen Sie mit der Erstellung eines neuen .NET MAUI App-Projekts in Visual Studio 2022. Nennen Sie es BarcodeScannerApp und wählen Sie .NET 10 als Zielframework. 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" wählen, nach IronBarCode suchen und die neueste stabile Version installieren. Speziell für .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 ist in MauiProgram.cs, bevor der App Builder läuft:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
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 erfordert eine spezifische Konfiguration in ihren Manifestdateien, bevor MediaPicker.CapturePhotoAsync() erfolgreich sein 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" />
Der Eintrag android.permission.CAMERA fordert die Laufzeitgenehmigung des Benutzers an. Die uses-feature-Deklarationen teilen dem Google Play Store mit, dass Ihre App Kamera-Hardware und Autofokus-Fähigkeit erfordert. 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 granulare Medienberechtigungen in Ihrem MainActivity.cs mit ActivityCompat.RequestPermissions behandeln. Die MAUI MediaPicker-Abstraktion erledigt das meiste davon automatisch, aber es wird empfohlen, das Gerät vor der Veröffentlichung zu testen.
iOS-Berechtigungen
Ändern Sie Platforms/iOS/Info.plist, um die Beschreibung der Kameranutzung aufzunehmen:
<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>
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 auch NSPhotoLibraryUsageDescription hinzufügen, wenn Sie vorhaben, die Benutzer zusätzlich zur Live-Kamera Barcodes von gespeicherten Fotos scannen zu lassen.
Windows und macOS
Bei Windows-Desktop- und macOS-Systemen werden die Kamerazugriffsberechtigungen über die Anwendungsmanifest- bzw. Berechtigungsdateien verwaltet. Das MAUI-Framework übernimmt das meiste davon auf der Vorlagenebene, aber stellen Sie sicher, dass Package.appxmanifest unter Windows die Webcam-Fähigkeit beinhaltet.
Wie erstellt man die Benutzeroberfläche für den Barcode-Scanner?
Entwerfen Sie eine Benutzeroberfläche in MainPage.xaml, die dem Benutzer während des Scanvorgangs ein 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>
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 FormatLabel zeigt das erkannte Barcode-Format neben dem dekodierten Wert an, was bei der Fehlersuche und der Überprüfung durch den Benutzer hilfreich ist.
Hinzufügen von Scan-Status-Feedback
Für ein optimales Ergebnis sollten Sie die Scan-Schaltflächen in ein ActivityIndicator einbinden, das während der Verarbeitung angezeigt wird. Die asynchrone API von IronBarcode macht dies ganz einfach: Sie können IsRunning = true vor dem Aufruf von BarcodeReader.ReadAsync setzen und im finally-Block zurücksetzen.
Wie implementiert man die Barcode-Lesefunktionalität?
Implementieren Sie die zentrale Scan-Logik 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");
}
}
}
Imports IronBarCode
Imports IronSoftware.Drawing
Namespace BarcodeScannerApp
Public Partial Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnScanClicked(sender As Object, e As EventArgs)
Await ScanFromSource(Function() MediaPicker.Default.CapturePhotoAsync())
End Sub
Private Async Sub OnPickFromGalleryClicked(sender As Object, e As EventArgs)
Await ScanFromSource(Function() MediaPicker.Default.PickPhotoAsync())
End Sub
Private Async Function ScanFromSource(sourceFunc As Func(Of Task(Of FileResult?))) As Task
Try
Dim photo = Await sourceFunc()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using memoryStream = New MemoryStream()
Await stream.CopyToAsync(memoryStream)
Dim imageBytes = memoryStream.ToArray()
' Show the captured image in the UI
CapturedImage.Source = ImageSource.FromStream(Function() New MemoryStream(imageBytes))
' Process with IronBarcode
Dim bitmap = AnyBitmap.FromBytes(imageBytes)
Dim options = New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = False
}
Dim results = Await BarcodeReader.ReadAsync(bitmap, options)
If results.Any() Then
Dim first = results.First()
ResultLabel.Text = $"Value: {first.Value}"
FormatLabel.Text = $"Format: {first.BarcodeType}"
Else
ResultLabel.Text = "No barcode detected"
FormatLabel.Text = String.Empty
End If
End Using
End Using
Catch ex As FeatureNotSupportedException
Await DisplayAlert("Unsupported", "Camera is not available on this device.", "OK")
Catch ex As PermissionException
Await DisplayAlert("Permission Required", "Please grant camera permission in Settings.", "OK")
Catch ex As Exception
Await DisplayAlert("Error", $"Scanning failed: {ex.Message}", "OK")
End Try
End Function
End Class
End Namespace
Diese Implementierung verwendet eine gemeinsame ScanFromSource Helper-Methode, um eine Duplizierung der Bildverarbeitungslogik zwischen den Kamera- und Galeriepfaden zu vermeiden. Die AnyBitmap.FromBytes-Methode verarbeitet JPEG, PNG, WebP und andere gängige Bildformate automatisch - eine manuelle Formaterkennung ist nicht erforderlich.
Das Ergebnisobjekt stellt neben anderen Eigenschaften first.Value (die dekodierte Zeichenkette), first.BarcodeType (das Format-Enum) und first.BarcodeImage (ein beschnittenes Bild des erkannten Barcodebereichs) zur Verfügung. 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:

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

Wie konfiguriert man die erweiterten Scanoptionen?
IronBarcode stellt ein BarcodeReaderOptions-Objekt zur Verfügung, mit dem Sie das Erkennungsverhalten für Ihren speziellen 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);
Imports System.Threading.Tasks
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}
Dim results = Await BarcodeReader.ReadAsync(bitmap, options)

Die Einstellung ExpectMultipleBarcodes = true weist IronBarcode an, nach dem ersten Ergebnis weiter zu scannen, was für Lagerarbeitsabläufe wichtig ist, bei denen ein einziger Packzettel ein Dutzend Barcodes enthalten kann.
Optionen für die Lesegeschwindigkeit
Die Aufzählung ReadingSpeed bietet vier Stufen: ExtremeDetail, Detailed, Balanced, und QuickScan. Verwenden Sie QuickScan für hochvolumige Szenarien, in denen Barcodes sauber und gut beleuchtet sind. Wechseln Sie zu Detailed oder ExtremeDetail, wenn Sie von niedrig aufgelösten 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 auch manuell Vorverarbeitungsfilter ü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)
}
};
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Detailed,
.ImageFilters = New ImageFilterCollection From {
New SharpenFilter(),
New ContrastFilter(1.2F)
}
}
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
Wenn 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 die Kamerafunktionen immer auf einem physischen Gerät. Der Emulator unterstützt PickPhotoAsync für die Galerieauswahl, die Sie für grundlegende UI-Tests mit vorgeladenen Bildern verwenden können.
Mangelhafte Scangenauigkeit
Falls IronBarcode keine Ergebnisse oder falsche Werte liefert, versuchen Sie folgende Anpassungen:
- Erhöhen Sie den
SpeedaufReadingSpeed.DetailedoderExtremeDetail - Hinzufügen von
SharpenFilterundContrastFilterin die Bildfilter-Pipeline - 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
ExpectBarcodeTypesMaske enthalten ist
Der IronBarcode Leitfaden zur Fehlerbehebung enthält zusätzliche Diagnoseschritte für formatspezifische Probleme.
Debugging-Tipps
Große Kamerabilder verbrauchen viel Speicher, wenn sie in MemoryStream geladen werden. Verwenden Sie immer using-Anweisungen für alle Stream-Objekte, um die Entsorgung sicherzustellen. Für kontinuierliche Scan-Workflows, bei denen Benutzer mehrere Elemente nacheinander scannen, rufen Sie bitmap.Dispose() auch explizit nach der Verarbeitung 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 verweigert, wird bei nachfolgenden Aufrufen von CapturePhotoAsync ein PermissionException ausgegeben. In diesem Fall sollten Sie den Benutzer zu den Einstellungen leiten, was Sie mit AppInfo.ShowSettingsUI() tun können.
Bestätigen Sie, dass NSCameraUsageDescription in Info.plist vorhanden ist, bevor Sie den Text 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.
- Batch-Scanning - Verarbeiten Sie mehrere Bilddateien in einer Schleife mit
BarcodeReader.ReadAsyncmitExpectMultipleBarcodes = true; Siehe die Beispiele für Stapelverarbeitung. - PDF-Barcode-Extraktion -- IronBarcode kann Barcodes lesen, die in PDF-Dokumente eingebettet sind und dieselbe
BarcodeReaderKlasse verwenden; 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.




