在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在普及的移動計算時代,QR碼正成為順暢且快速信息共享的必要工具。 QR碼廣泛應用於從數位支付到產品包裝的一切事務。 作為開發人員,為您的移動應用程式添加 QR 碼掃描功能可以提升使用者體驗並帶來大量機會。 這篇文章將引導您使用 IronQR 建立一個 .NET MAUI 條碼掃描器和 QR 碼閱讀器。
安裝 .NET MAUI 和 IronQR NuGet 套件
建立主頁佈局
初始化相機
捕捉影像
讀取 QR Code
顯示結果
一個名為 .NET 多平台應用 UI 的框架(.NET MAUI)允許使用 C# 和 XAML 創建原生的跨平台應用程式。 只需一個代碼庫,開發人員現在即可為 Windows、macOS、iOS 和 Android 製作應用程式。 .NET MAUI 提供了一個統一的 API 來存取原生設備功能,讓開發跨平台應用程式的過程變得更為容易。 以下是 .NET MAUI 的一些關鍵元素,使其成為開發人員的有效工具:
使用 .NET MAUI,特定平台的專案被合併為一個統一的專案結構。 由於這種統一,開發人員可以在單個專案中處理所有平台特定的資源和程式碼,從而簡化開發流程。
您可以設計單一使用者介面(用户界面)在多個平台上與.NET MAUI一起工作的。 該框架提供了一系列與 Windows、macOS、iOS 和 Android 兼容的佈局和控件。
借助 .NET MAUI,開發人員可以利用本機 API 和平台特定功能,使他們能夠使用感測器、相機、GPS 和其他設備功能。 通過這樣做,應用程式可以跨平台共享大部分代碼庫,並仍然提供原生用戶體驗。
.NET MAUI 支援 XAML 和 C# 的即時重新載入。 藉由這個功能,開發人員可以立即查看UI變更,而不需要重新啟動程式。 熱重載促進快速迭代和即時反饋,加速開發過程。
由於 Blazor 與 .NET MAUI 的整合,開發人員可以使用 Blazor 組件來創建混合應用程序。通過這種整合,將 Blazor 的網頁開發功能與 MAUI 在原生移動開發方面的專業知識結合在一起,使現代應用程序的創建更具靈活性。
.NET MAUI 使跨多個平台的資源管理(包括圖片、字體和樣式)變得更加容易。 開發人員只需定義一次資源,即可在所有目標平台上使用,從而減少冗餘並保證一致的外觀和感覺。
.NET MAUI 內建支持依賴注入,這有助於開發人員構建更可測試和可維護的代碼。 構建需要明確職責分工和模塊化架構的複雜應用程式需要此功能。
一個名為 IronQR 的強大且可適應的 .NET 程式庫,用於創建和讀取 QR 碼。 通過為製作和讀取 QR 碼提供可靠且易於使用的功能,它簡化了在 .NET 應用程式中使用 QR 碼的過程。 Iron Software 包含 IronQR 是一套旨在改善 .NET 程式設計的函式庫集合。
IronQR 因其豐富的功能集,是從事 QR 碼相關工作的開發人員的有用工具。 以下是其幾個顯著的特點:
IronQR 讓創建 QR 碼變得簡單。 開發人員可以快速且有效地從文本、網址及其他類型的數據生成QR碼。
IronQR 提供強大的功能,可以從圖片和串流中讀取 QR 碼。
IronQR 提供的多種自訂選項使開發人員能夠创建和解讀專門針對其需求的 QR 碼。
IronQR 支援批次處理,可同時建立和讀取多個 QR 碼。 需要高效處理大量 QR 碼的應用程序可能會發現此功能特別有用。
由於該庫的高效能設計,生成和讀取 QR 碼可以快速完成。 對於需要即時處理 QR 碼的應用程式,這一點至關重要。
IronQR 因其與 .NET 環境的順利整合,易於用於 ASP.NET、Windows Forms、WPF 和 Xamarin 應用程式,以及其他 .NET 應用程式類型。
安裝 Visual Studio 2022 和 .NET 6 框架是建立 C#.NET MAUI 應用程式所需的。 接著,要構建 .NET MAUI 應用程式,請按照以下步驟進行。
在開啟 Visual Studio 後,點擊「建立新專案」按鈕。 接下來,使用搜尋欄查找“.NET MAUI 專案”。
從 Visual Studio 的搜尋結果中選擇 .NET MAUI 應用程式範本。 選擇後,為它取個合適的名稱並決定專案將在哪裡舉行。 設定完成後,按下「下一步」按鈕。
選擇所需的框架; 然而,建議使用最新版本的 .NET Framework。 在 Visual Studio 中選擇框架版本後,點擊「建立」。
導航至 工具 -> NuGet 套件管理員
下的套件管理員主控台。 在顯示的命令列面板中,輸入以下指令並按下 ENTER:
Install-Package IronQR
上述命令將安裝我們的庫到正在運行的項目並下載它。
建立用戶界面是開發 QR 碼掃描器的初始階段。 我們的基本用戶介面將包括一個用於啟動 QR 碼掃描過程的按鈕和用於顯示掃描到的 QR 碼的圖像。(用户界面)將使用XAML來構建。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiQrScanner.MainPage">
<StackLayout Padding="20" VerticalOptions="Center">
<Button Text="Scan QR Code" Clicked="OnScanButtonClicked"/>
<Image x:Name="QrCodeImage" WidthRequest="200" HeightRequest="200" VerticalOptions="CenterAndExpand"/>
<Label x:Name="QrCodeResult" Text="Scan Result" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
</StackLayout>
</ContentPage>
然後必須實現使用IronQR讀取QR碼的功能。 我們將撰寫一個函數來處理按鈕點擊事件,並使用設備的相機拍攝 QR code。
在打開 MainPage.xaml.cs
後,添加以下代碼:
using IronQr;
using IronSoftware.Drawing;
using Microsoft.Maui.Controls;
using System;
using System.IO;
using System.Threading.Tasks;
namespace MauiAppQR
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnScanButtonClicked(object sender, EventArgs e)
{
var result = await CaptureAndScanQrCode();
QrCodeResult.Text = result ?? "No QR code found.";
}
private async Task<string> CaptureAndScanQrCode()
{
try
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null)
return null;
using var stream = await photo.OpenReadAsync();
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
var imageData = memoryStream.ToArray();
QrReader reader = new QrReader();
var inputBmp = AnyBitmap.FromBytes(imageData);
QrImageInput imageInput = new QrImageInput(inputBmp);
var barcodeResult = reader.Read(imageInput);
if (barcodeResult?.Count > 0)
{
QrCodeImage.Source = ImageSource.FromStream(() => new MemoryStream(imageData));
return barcodeResult.First().Value;
}
}
catch (Exception ex)
{
Console.WriteLine($"Error scanning QR code: {ex.Message}");
}
return null;
}
}
}
using IronQr;
using IronSoftware.Drawing;
using Microsoft.Maui.Controls;
using System;
using System.IO;
using System.Threading.Tasks;
namespace MauiAppQR
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnScanButtonClicked(object sender, EventArgs e)
{
var result = await CaptureAndScanQrCode();
QrCodeResult.Text = result ?? "No QR code found.";
}
private async Task<string> CaptureAndScanQrCode()
{
try
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null)
return null;
using var stream = await photo.OpenReadAsync();
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
var imageData = memoryStream.ToArray();
QrReader reader = new QrReader();
var inputBmp = AnyBitmap.FromBytes(imageData);
QrImageInput imageInput = new QrImageInput(inputBmp);
var barcodeResult = reader.Read(imageInput);
if (barcodeResult?.Count > 0)
{
QrCodeImage.Source = ImageSource.FromStream(() => new MemoryStream(imageData));
return barcodeResult.First().Value;
}
}
catch (Exception ex)
{
Console.WriteLine($"Error scanning QR code: {ex.Message}");
}
return null;
}
}
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Microsoft.Maui.Controls
Imports System
Imports System.IO
Imports System.Threading.Tasks
Namespace MauiAppQR
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnScanButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
Dim result = Await CaptureAndScanQrCode()
QrCodeResult.Text = If(result, "No QR code found.")
End Sub
Private Async Function CaptureAndScanQrCode() As Task(Of String)
Try
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then
Return Nothing
End If
Dim stream = Await photo.OpenReadAsync()
Dim memoryStream As New MemoryStream()
Await stream.CopyToAsync(memoryStream)
Dim imageData = memoryStream.ToArray()
Dim reader As New QrReader()
Dim inputBmp = AnyBitmap.FromBytes(imageData)
Dim imageInput As New QrImageInput(inputBmp)
Dim barcodeResult = reader.Read(imageInput)
If barcodeResult?.Count > 0 Then
QrCodeImage.Source = ImageSource.FromStream(Function() New MemoryStream(imageData))
Return barcodeResult.First().Value
End If
Catch ex As Exception
Console.WriteLine($"Error scanning QR code: {ex.Message}")
End Try
Return Nothing
End Function
End Class
End Namespace
OnScanButtonClicked
:當使用者點選「掃描 QR 碼」按鈕時,將調用此方法。 要使用裝置的相機拍照並搜尋 QR 碼,可調用 CaptureAndScanQrCode
函數。CaptureAndScanQrCode
:此方法使用設備的相機拍照,然後使用IronQR從照片中讀取QR碼。
MediaPicker.CapturePhotoAsync
:此 API 使用裝置上的相機拍攝照片。
MemoryStream
:為了讓 IronQR 更容易讀取,捕獲的圖像被加載到 MemoryStream
中。
QrReader.Read
:IronQR 方法從圖片資訊中讀取 QR 碼。
ImageSource
:如果找到 QR 碼,則 QR 碼文字會顯示在 QrCodeResult
標籤中,並且圖像會顯示在 QrCodeImage
元素中。需要正確的授權才能訪問設備相機。 透過更新 iOS 和 Android 的專案檔案來提出所需的權限請求。
Android
訪問 AndroidManifest.xml
並包括以下授權:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在 MainActivity.cs
中請求權限:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Platform.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.RequestPermissions(this, new string[]
{
Android.Manifest.Permission.Camera,
Android.Manifest.Permission.WriteExternalStorage,
Android.Manifest.Permission.ReadExternalStorage
});
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Platform.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.RequestPermissions(this, new string[]
{
Android.Manifest.Permission.Camera,
Android.Manifest.Permission.WriteExternalStorage,
Android.Manifest.Permission.ReadExternalStorage
});
}
Protected Overrides Sub OnCreate(ByVal savedInstanceState As Bundle)
MyBase.OnCreate(savedInstanceState)
Platform.Init(Me, savedInstanceState)
Xamarin.Essentials.Platform.RequestPermissions(Me, New String() { Android.Manifest.Permission.Camera, Android.Manifest.Permission.WriteExternalStorage, Android.Manifest.Permission.ReadExternalStorage })
End Sub
以下是從 Windows 機器環境生成的輸出。
掃描後,完成的結果將顯示在標籤上。
使用 .NET MAUI 和 IronQR 創建 .NET MAUI 二維碼掃描器是一個簡單的過程,可以大大提高您的移動應用程式的功能。IronQR 的強大功能使其能有效處理二維碼,加上 .NET MAUI 的跨平台能力,讓您能為 Windows、iOS、macOS 和 Android 構建高效且可靠的二維碼掃描器。
IronQR 和 .NET MAUI 結合在一起,提供順暢的開發過程,讓您專注於創建尖端功能並製作一流的應用程式。 本教程提供了一個堅實的基礎,無論您是要創建一個簡單的QR碼掃描器,還是具有先進QR碼功能的複雜應用程式,都可以幫助您入門。
如果您希望進一步簡化開發流程,請考慮使用 IronQR 滿足您的 QR 碼需求。 即使在困難的情況下,IronQR 也能生成清晰且具有良好讀取能力的可擴展 QR 碼。 IronQR 提供的解決方案符合您的獨特需求,擁有可定制的授權選擇,適合個人開發者、小型團隊和大公司。 訪問購買授權並查看詳細的價格資訊,加入眾多依賴 Iron Software 作為其基本開發工具的開發者行列,並使用 IronQR 提升您的應用程式。
在 Iron Software 套裝中的其他類似產品中,IronBarcode 充當掃描條碼的對應工具。 使用 IronBarcode,您可以將高效能條碼掃描功能無縫整合到您的應用程式中,使其成為滿足條碼掃描需求的絕佳選擇。