The successor to ZXing.Net.Mobile: barcode scanning and generation for .NET MAUI applications
-
Install ZXing.Net.Maui.Controls NuGet package on your .NET MAUI application
-
Make sure to initialize the plugin first in your
MauiProgram.cs
, see below// Add the using to the top using ZXing.Net.Maui; // ... other code public static MauiApp Create() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .UseBarcodeReader(); // Make sure to add this line return builder.Build(); }
Now we just need to add the right permissions to our app metadata. Find below how to do that for each platform.
For Android go to your AndroidManifest.xml
file (under the Platforms\Android folder) and add the following permissions inside of the manifest
node:
<uses-permission android:name="android.permission.CAMERA" />
For iOS go to your info.plist
file (under the Platforms\iOS folder) and add the following permissions inside of the dict
node:
<key>NSCameraUsageDescription</key>
<string>This app uses barcode scanning to...</string>
Make sure that you enter a clear and valid reason for your app to access the camera. This description will be shown to the user.
Windows is not supported at this time for barcode scanning. You can however use the barcode generation. No extra permissions are required for that.
For more information on permissions, see the Microsoft Docs.
If you're using the controls from XAML, make sure to add the right XML namespace in the root of your file, e.g: xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls"
<zxing:CameraBarcodeReaderView
x:Name="cameraBarcodeReaderView"
BarcodesDetected="BarcodesDetected" />
Configure Reader options
cameraBarcodeReaderView.Options = new BarcodeReaderOptions
{
Formats = BarcodeFormats.OneDimensional,
AutoRotate = true,
Multiple = true
};
Toggle Torch
cameraBarcodeReaderView.IsTorchOn = !cameraBarcodeReaderView.IsTorchOn;
Flip between Rear/Front cameras
cameraBarcodeReaderView.CameraLocation
= cameraBarcodeReaderView.CameraLocation == CameraLocation.Rear ? CameraLocation.Front : CameraLocation.Rear;
Handle detected barcode(s)
protected void BarcodesDetected(object sender, BarcodeDetectionEventArgs e)
{
foreach (var barcode in e.Results)
Console.WriteLine($"Barcodes: {barcode.Format} -> {barcode.Value}");
}
<zxing:BarcodeGeneratorView
HeightRequest="100"
WidthRequest="100"
ForegroundColor="DarkBlue"
Value="https://dotnet.microsoft.com"
Format="QrCode"
Margin="3" />