告别跨平台扫码难题:MAUI+ZXing.Net实现全终端条形码解决方案
痛点与解决方案
你是否还在为跨平台应用中的条形码功能头疼?iOS需要Swift代码,Android要写Java,Windows还得单独适配?本文将带你用C#和.NET MAUI (Multi-platform App UI,跨平台应用程序用户界面)结合ZXing.Net库,实现一套代码在iOS、Android和Windows上运行的条形码扫描与生成功能。
开发准备
环境配置
- 安装.NET MAUI开发环境,确保包含src/Workload/workloads.csproj中定义的所有工作负载
- 通过NuGet安装ZXing.Net库:
Install-Package ZXing.Net.MAUI
图标资源
MAUI模板中已内置条形码相关图标,可直接在XAML中使用:
<Image Source="{FontImageSource FontFamily=FluentUI, Glyph={x:Static fonts:FluentUI.barcode_scanner_24_regular}, Size=24}" />
图标定义位置:src/Templates/src/templates/maui-mobile/Resources/Fonts/FluentUI.cs
条形码扫描实现
相机权限配置
在Platforms目录下各平台的配置文件中添加相机权限:
Android (Platforms/Android/AndroidManifest.xml):
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
iOS (Platforms/iOS/Info.plist):
<key>NSCameraUsageDescription</key>
<string>需要相机权限以扫描条形码</string>
扫描页面XAML设计
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:zxing="clr-namespace:ZXing.Net.MAUI.Controls;assembly=ZXing.Net.MAUI"
x:Class="BarcodeSample.ScannerPage">
<Grid>
<zxing:CameraBarcodeReaderView
x:Name="BarcodeReader"
BarcodesDetected="BarcodeReader_BarcodesDetected" />
<BoxView
BackgroundColor="Transparent"
BorderColor="Red"
BorderWidth="2"
WidthRequest="250"
HeightRequest="250"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Grid>
</ContentPage>
C#后台逻辑
private void BarcodeReader_BarcodesDetected(object sender, BarcodeDetectionEventArgs e)
{
if (e.Results.Any())
{
var result = e.Results.First();
Dispatcher.DispatchAsync(async () =>
{
await DisplayAlert("扫描结果", result.Value, "确定");
await Navigation.PopAsync();
});
}
}
条形码生成功能
生成代码实现
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
public ImageSource GenerateBarcode(string content)
{
var writer = new BarcodeWriterPixelData
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = 300,
Width = 300,
Margin = 1
}
};
var pixelData = writer.Write(content);
using (var stream = new MemoryStream(pixelData.Pixels))
{
return ImageSource.FromStream(() => stream);
}
}
XAML中使用
<Image x:Name="BarcodeImage"
WidthRequest="300"
HeightRequest="300"
HorizontalOptions="Center" />
// 在ViewModel或代码-behind中调用
BarcodeImage.Source = GenerateBarcode("https://example.com");
完整界面示例
总结与扩展
本文介绍了如何在MAUI项目中集成ZXing.Net库实现条形码扫描与生成功能。通过src/Templates/src/templates/maui-mobile模板项目结构,你可以快速搭建包含条形码功能的跨平台应用。
后续可以扩展的功能:
- 支持多种条形码格式(Code 128、EAN-13等)
- 添加闪光灯控制
- 实现相册图片识别
- 条形码结果的本地存储与分享
更多MAUI开发技巧,请参考docs/DevelopmentTips.md。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




