Getting Started (MAUI)

Applies to CapCognition SDK 2.2.x with .NET MAUI 9 or 10, on Android and iOS only. For Windows, Linux, or Raspberry Pi, use the .NET LTS SDK. See platform requirements and licensing.

This page shows a minimal end-to-end barcode recognition setup for the CapCognition .NET MAUI SDK:

  • initialize the library in MauiProgram
  • add a RecognitionView to a page
  • configure barcode recognition for QR only
  • open the camera and start continuous recognition

1. Create a MAUI app

dotnet new maui -n CapCognitionMauiSample
cd CapCognitionMauiSample

2. Install NuGet packages

dotnet add package CapCognition.Maui
dotnet add package CapCognition.Maui.BarcodeScanning

3. Initialize CapCognition in MauiProgram

In MauiProgram.cs, register the CapCognition handlers and select the modules you want to use. For this camera-based QR sample, register Capture.Use, Recognition.Use, and BarcodeDetection.Use. Leave license arguments empty for trial mode or pass the corresponding production licenses.

using CapCognition.Maui.BarcodeScanning;
using CapCognition.Maui.Helpers;
using CapCognition.Maui.Common;
using SkiaSharp.Views.Maui.Controls.Hosting;

public static class MauiProgram
{

    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();

        builder
            .UseMauiApp<App>()
            .UseSkiaSharp()
            .InitializeCapCognition(
            [
                Capture.Use(/*Add your license here*/),
                Recognition.Use(/*Add your license here*/),
                BarcodeDetection.Use(/*Add your license here*/),
            ],
            enableProcessingLogs: true);

        return builder.Build();
    }
}

4. Add RecognitionView to your XAML page

Declare camera access in the Android manifest and provide NSCameraUsageDescription in the iOS Info.plist. The runtime permission request below complements these platform declarations.

Example MainPage.xaml:

<?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"
    xmlns:views="clr-namespace:CapCognition.Maui.Views;assembly=CapCognition.Maui"
    x:Class="CapCognitionMauiSample.MainPage">

    <Grid>
        <views:RecognitionView
            x:Name="RecognitionView"
            RequestedPreviewResolutionWidth="1920"
            RequestedCaptureResolutionWidth="1024"
            UseFrontCamera="False"
            FillPreviewToView="True" />
    </Grid>
</ContentPage>

5. Configure QR-only options and start recognition

Example MainPage.xaml.cs:

using CapCognition.Maui.BarcodeScanning;
using CapCognition.Maui.Core.Shared.Common;
using SkiaSharp;

namespace CapCognitionMauiSample;

public partial class MainPage : ContentPage
{

    public MainPage()
    {
        InitializeComponent();

        var options = new RecognitionOptionBuilder()
            .AddBarcodeRecognitionOption()
                .TryInverted()
                .SetBinarizer(BarcodeRecognitionOptions.BinarizerType.HybridBinarizer)
                .SetBarcodeFormats(new[] { BarcodeRecognitionOptions.BarcodeFormat.QRCode })
                .Done()
                .AddBarcodeRecognitionOverlayDrawingOption()
                    .EnableBarcodeOverlays()
                    .SetSurroundingRectColor(Color.FromRgb(255, 0, 0))
                    .SetSurroundingStrokeWidth(2)
                    .SetOneDimensionalRectWidth(5)
                    .Done()
                .Done()            
            .Build();

        foreach (var option in options)
        {
            RecognitionView.AddOption(option);
        }

        Loaded += OnLoaded;
        Unloaded += (_, _) => options.Dispose();
    }

    private async void OnLoaded(object? sender, EventArgs e)
    {
        Loaded -= OnLoaded;

        var ok = await RecognitionView.RequestAllPermissionAsync();
        if (!ok)
        {
            return;
        }

        RecognitionView.CameraOpenedEvt += OnCameraOpened;
        RecognitionView.OpenCamera();
    }

    private void OnCameraOpened(bool success)
    {
        RecognitionView.CameraOpenedEvt -= OnCameraOpened;
        if (!success)
        {
            return;
        }

        RecognitionView.RecognitionResultEvt -= OnRecognitionResult;
        RecognitionView.RecognitionResultEvt += OnRecognitionResult;
        RecognitionView.StartContinuousRecognition(true);
    }

    private void OnRecognitionResult(RecognitionResult result, SKBitmap bitmap)
    {
        // Handle recognition results here
        Console.WriteLine(result.ToString());
    }

    protected override void OnDisappearing()
    {
        RecognitionView.Terminate();
        base.OnDisappearing();
    }
}

Next reading