.NET Maui C#中如何用Zebra DataWedge自动扫描条码并获取参考值
.NET Maui 结合DataWedge实现无按钮自动条码扫描
一、DataWedge配置(Zebra设备专属)
DataWedge是Zebra设备的条码扫描管理工具,需先完成以下配置:
- 打开DataWedge应用,新建配置文件(命名如
MauiScanConfig) - 关联你的.NET Maui应用包名(可在
Platform/Android/AndroidManifest.xml中查看package属性值) - 启用内置扫描器作为输入源
- 配置Broadcast Intent输出:
- 设置Intent动作(例如
com.yourcompany.yourapp.SCAN_RESULT,需和代码中保持一致) - 确保条码数据通过
com.symbol.datawedge.data_string字段传递
- 设置Intent动作(例如
二、Maui项目代码修改
1. 添加Android权限
在Platform/Android/AndroidManifest.xml中添加扫描所需权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
2. 页面后台代码实现
修改FenZEScanfs.xaml.cs,注册广播接收器接收扫描结果,页面显示时自动启动扫描:
using Android.Content; using ZoneEnCours.Models; namespace ZoneEnCours.Views; public partial class FenZEScanfs : ContentPage { private BroadcastReceiver _scanReceiver; // 与DataWedge配置的Intent动作一致 private const string ScanAction = "com.yourcompany.yourapp.SCAN_RESULT"; public FenZEScanfs() { InitializeComponent(); BindingContext = new ModelFenZEScanfs(); } protected override void OnAppearing() { base.OnAppearing(); RegisterScanReceiver(); AutoStartScanning(); } protected override void OnDisappearing() { base.OnDisappearing(); UnregisterScanReceiver(); } private void RegisterScanReceiver() { _scanReceiver = new BroadcastReceiver(); _scanReceiver.Receive += (_, e) => { if (e.Intent.HasExtra("com.symbol.datawedge.data_string")) { var barcodeValue = e.Intent.GetStringExtra("com.symbol.datawedge.data_string"); // 主线程更新UI MainThread.BeginInvokeOnMainThread(() => { Reference.Text = $"参考值: {barcodeValue}"; }); } }; var filter = new IntentFilter(ScanAction); Android.App.Application.Context.RegisterReceiver(_scanReceiver, filter); } private void UnregisterScanReceiver() { if (_scanReceiver != null) { Android.App.Application.Context.UnregisterReceiver(_scanReceiver); _scanReceiver = null; } } private void AutoStartScanning() { // 发送Intent触发DataWedge开始扫描 var scanIntent = new Intent("com.symbol.datawedge.api.ACTION"); scanIntent.PutExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING"); Android.App.Application.Context.SendBroadcast(scanIntent); } }
三、关键注意事项
- 确保DataWedge配置的包名、Intent动作与代码完全匹配,否则无法接收扫描结果
- 此方案仅适用于支持DataWedge的Zebra设备,若需跨设备兼容,可结合ZXing.Net.Maui实现摄像头自动扫描
- 若不需要自动触发扫描,可移除
AutoStartScanning方法,用户按下设备硬件扫描键仍能触发扫描,结果同样会通过广播返回
内容的提问来源于stack exchange,提问作者Sarah Allaire
相关产品推荐
相关产品推荐

