You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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字段传递

二、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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:07:46