IRONQRの使用

QRコードスキャナーのための.NET MAUI の使い方

ジョルディ・バルディア
ジョルディ・バルディア
2025年4月9日
共有:

イントロダクション

QRコードを利用したモバイルアプリケーションが急速に普及し、効率的で統合しやすいQRコードスキャナーおよびバーコードをスキャンするための.NET MAUIバーコードスキャナーの需要が増加しています。.NET MAUI (マルチプラットフォームアプリUI)は、マイクロソフトのクロスプラットフォームフレームワークであり、iOS、Android、macOS、およびWindowsでのアプリケーション開発のための統一された環境を提供します。 .NET MAUIアプリケーションでQRコードをスキャンする際、開発者はプロセスを管理するための直感的で強力なライブラリが必要です。

IronQRは、開発者がQRコードを迅速かつ正確で信頼性高く生成およびデコードできる人気のライブラリです。 この記事では、.NET MAUIと連携してIronQRを統合し、複数のプラットフォームでシームレスに動作するQR/バーコードスキャナーを構築する方法を説明します。

IronQRを使用してQRバースコードスキャンを実装する方法

  1. .NET MAUIプロジェクトを作成します。

  2. IronQR NuGetパッケージをインストールします。

  3. カメラとファイルストレージの権限を設定します。

  4. QRコードスキャナの実装。

.NET MAUIモバイルアプリ向けIronQRの紹介

IronQRは、QRおよびバーコードスキャン機能を備えた.NET MAUIモバイルアプリケーションを含む.NETアプリケーションで、QRコードの生成とデコードを簡素化する強力で使いやすいライブラリです。 それは、iOS、Android、macOS、Windowsといったプラットフォーム全体でQRコードおよびバーコードのスキャン機能を統合するための迅速で信頼性の高いソリューションを提供し、クロスプラットフォームのモバイルアプリを構築する際に不可欠です。

.NET MAUIモバイルアプリのIronQRの機能

a) クロスプラットフォームサポート: MAUIアプリ内でiOS、Android、macOS、Windowsプラットフォーム全体でシームレスに動作します。

b) QRコードスキャン: URL、テキスト、連絡先情報など、さまざまな種類のQRコードを効率的にデコードします。 また、効率的なバーコード検出アルゴリズムを用いた複数のバーコードの読み取りもサポートしています。

c) QRコード生成: URLやテキストなどのデータから簡単にQRコードを生成することができます。

d) カメラの権限管理: スキャンプロセスを簡素化するため、カメラの権限要求を自動的に処理します。

e) 高性能: 最小限のリソース使用で、迅速かつ信頼性の高いQRコードのスキャンと生成。

f) カスタマイズ可能な設定: スキャンパラメータとQRコードの外観をカスタマイズするオプションを提供します。

g) 簡単な統合: .NET MAUIアプリにQRコードのスキャンと生成を追加するために、シンプルなAPIと最小限のセットアップが必要です。

h) エラーハンドリング: 詳細なエラーメッセージとトラブルシューティングを提供し、さまざまなシナリオでのスムーズな機能を確保します。

i) 外部依存関係なし: IronQRは独立して動作し、ZXing Barcodeスキャナーとは異なり、サードパーティのライブラリや複雑な設定の必要性を減らします。

j) マルチフォーマット対応: 現実世界で使用される幅広いQRコードと互換性を確保するため、複数のQRコード形式をサポートします。

前提条件

実装を進める前に、以下の前提条件を確認してください。

  1. Visual Studio 2022 以降がインストールされています。

  2. .NET 6.0 SDK 以降(.NET MAUI は .NET 6 以降のバージョンに基づいて構築されています)。

  3. IronQR NuGet パッケージは、QRコードのスキャンとバーコードの検出に使用されます。

  4. .NET MAUI アプリ (すでにお持ちでない場合は、Visual Studio で新しい MAUI アプリを作成できます)。

ステップ 1: .NET MAUI プロジェクトを作成する

まず、シンプルな.NET MAUIプロジェクトを作成しましょう。

  1. Visual Studio を開き、新しいプロジェクトの作成をクリックします。

  2. .NET MAUI アプリ テンプレートを選択します。

    新しいプロジェクト

  3. プロジェクトに名前を付けます(例: MauiQRCodeScanner)、場所を選択し、次へをクリックします。

    プロジェクト設定

    \

    必要な.NETバージョンを選択し、作成 をクリックします。

    ターゲット フレームワーク

ステップ 2: IronQR NuGet パッケージをインストールする

IronQRは、QRコードの生成およびスキャン機能を提供するサードパーティライブラリです。 IronQRをインストールするには、NuGetを通じて追加する必要があります。

  1. Visual Studioで、ソリューションエクスプローラーのDependenciesを右クリックします。

  2. NuGet パッケージの管理 をクリックします。

  3. ブラウズタブでIronQRを検索し、該当するパッケージ(通常はIronQRまたはMAUI専用のIronQR.Maui)のインストールをクリックします。

  4. ライセンスをすべて承認し、ライブラリがインストールされることを確認してください。

    IronQR

ステップ3: カメラとファイルストレージの権限を設定する

QRコードをスキャンするアプリケーションには、モバイルプラットフォーム(iOSとAndroid)でカメラの権限をリクエストする必要があります。 以下にどのようにして次の権限を追加するか説明します。


Android デバイス: AndroidManifest.xml ファイルにカメラの許可を追加します。
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

iOS: Info.plistファイルにカメラの使用説明を追加します。
<key>NSCameraUsageDescription</key>
<string>QRコードをスキャンするためにカメラへのアクセスが必要です。</string>

ステップ 4: QRコードスキャナーの実装

では、MAUI Barcode ScannerアプリでQRスキャナー用のシンプルなUIを作成しましょう。スキャンプロセスを起動するためにボタンを使用し、スキャンされたQRコードのテキストを表示するためにラベルを使用します。

XML名前空間内でMainPage.xamlファイルを編集します。


<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"

             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="MauiQRCodeScanner.MainPage">
<StackLayout Padding="20" VerticalOptions="Center">
        <Button x:Name="scanButton" Text="Scan QR Code" Clicked="OnScanButtonClicked" />
        <Label x:Name="resultLabel" Text="Scan Result will appear here" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
    </StackLayout>
</ContentPage>

次に、MainPage.xaml.csでカメラの権限とQRコードのスキャンロジックを処理します。 実装方法は次の通りです。

using IronQrCode;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Essentials;

namespace MauiQRCodeScanner;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
    License.LicenseKey = "Your key";
        InitializeComponent();
    }

// OnScanButtonClicked method with object sender as input
    private async void OnScanButtonClicked(object sender, EventArgs e)
    {
        // Check for camera permission for var barcode with clear and valid reason
        var status = await Permissions.RequestAsync<Permissions.Camera>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("Permission Denied", "Cannot scan QR codes without camera permission", "OK");
            return;
        }

        // Start scanning QR codes
        try
{
        var images = await FilePicker.Default.PickAsync(new PickOptions
        {
           PickerTitle = "Pick image",
          FileTypes = FilePickerFileType.Images
        });
        var imageSource = images.FullPath.ToString();
        // barcodeImage.Source = imageSource;

        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);

        if (results.Any())
        {
            resultLabel.Text = "Scanned Text: " + results.First().Value; 
            // Display the result
        }
        else
        {
            resultLabel.Text = "No QR code detected";
        }
    }
    catch (Exception ex)
    {
           resultLabel.Text = "Error: " + ex.Message;
    }
    }
}
using IronQrCode;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Essentials;

namespace MauiQRCodeScanner;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
    License.LicenseKey = "Your key";
        InitializeComponent();
    }

// OnScanButtonClicked method with object sender as input
    private async void OnScanButtonClicked(object sender, EventArgs e)
    {
        // Check for camera permission for var barcode with clear and valid reason
        var status = await Permissions.RequestAsync<Permissions.Camera>();
        if (status != PermissionStatus.Granted)
        {
            await DisplayAlert("Permission Denied", "Cannot scan QR codes without camera permission", "OK");
            return;
        }

        // Start scanning QR codes
        try
{
        var images = await FilePicker.Default.PickAsync(new PickOptions
        {
           PickerTitle = "Pick image",
          FileTypes = FilePickerFileType.Images
        });
        var imageSource = images.FullPath.ToString();
        // barcodeImage.Source = imageSource;

        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);

        if (results.Any())
        {
            resultLabel.Text = "Scanned Text: " + results.First().Value; 
            // Display the result
        }
        else
        {
            resultLabel.Text = "No QR code detected";
        }
    }
    catch (Exception ex)
    {
           resultLabel.Text = "Error: " + ex.Message;
    }
    }
}
Imports IronQrCode
Imports Microsoft.Maui.Controls
Imports Microsoft.Maui.Essentials

Namespace MauiQRCodeScanner

	Partial Public Class MainPage
		Inherits ContentPage

		Public Sub New()
		License.LicenseKey = "Your key"
			InitializeComponent()
		End Sub

	' OnScanButtonClicked method with object sender as input
		Private Async Sub OnScanButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
			' Check for camera permission for var barcode with clear and valid reason
			Dim status = Await Permissions.RequestAsync(Of Permissions.Camera)()
			If status <> PermissionStatus.Granted Then
				Await DisplayAlert("Permission Denied", "Cannot scan QR codes without camera permission", "OK")
				Return
			End If

			' Start scanning QR codes
			Try
			Dim images = Await FilePicker.Default.PickAsync(New PickOptions With {
				.PickerTitle = "Pick image",
				.FileTypes = FilePickerFileType.Images
			})
			Dim imageSource = images.FullPath.ToString()
			' barcodeImage.Source = imageSource;

			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)

			If results.Any() Then
				resultLabel.Text = "Scanned Text: " & results.First().Value
				' Display the result
			Else
				resultLabel.Text = "No QR code detected"
			End If
		Catch ex As Exception
			   resultLabel.Text = "Error: " & ex.Message
		End Try
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

QRコードを入力

QRコード入力

出力

QRコード出力

必要なQRコードを選択するか、カメラフィードからキャプチャします。

QRコードを選択

結果は以下のようにUIに表示されます。

QRコードUI出力

コードの説明

権限: Permissions.RequestAsync()を使用してカメラ権限を要求します。 権限が拒否された場合、ユーザーに警告が表示されます。

IronQRスキャナー: IronQrCode.Scanner()クラスはQRコードをスキャンするために使用されます。 ScanAsync() メソッドはスキャンをトリガーし、結果は scanResult に保存されます。 スキャンされたQRコードのテキストは、resultLabelに表示されます。

QRコードスキャナーのテスト: これで、QRコードスキャナーをテストする準備が整いました。 アプリケーションが実行されると、「Scan QR Code」ボタンをクリックすることでスキャンプロセスが開始されます。 有効なQRコードがカメラの前にある場合、それがデコードされて画面に表示されます。

IronQRライセンス(トライアル利用可能)

IronQRは、モバイルアプリのコード内にあるライセンスキーで動作します。 開発者はライセンスページから簡単に試用ライセンスを取得できます。 IronQRライブラリを使用する前に、以下のようにコード内のどこかにライセンスを配置してください。

License.LicenseKey = "Your License";
License.LicenseKey = "Your License";
License.LicenseKey = "Your License"
$vbLabelText   $csharpLabel

結論

この記事では、.NET MAUIアプリケーションでIronQRを使用してQRコードスキャナーを構築するプロセスについて説明しました。 .NET MAUIアプリを設定し、IronQRパッケージをインストールし、UIとスキャンロジックを実装することから始めました。 IronQRは、.NET MAUIアプリでのQRコードの読み取りを非常に簡単かつ効果的にします。

IronQRライブラリはクロスプラットフォーム向けに設計されており、.NET MAUIで構築されたアプリが、スマートフォン、タブレット、デスクトップシステムなど、すべてのターゲットデバイスで一貫してQRコード機能にアクセスできるようにしています。 IronQRは、自動カメラ許可処理などの機能にも対応しており、手動での許可管理の手間をかけずにQRコードのスキャンを統合することが容易です。

要するに、IronQR for .NET MAUIは、開発者がモバイルアプリにQRコードのスキャンおよび生成機能を迅速に実装できるようにし、すべてのプラットフォームでの開発を効率化し、ユーザーエクスペリエンスを向上させます。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
スマートウォッチ QRコードスキャナー (.NET 開発者チュートリアル)
次へ >
ASP .NET CoreでQRコードを生成する方法