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

Delphi 10.4 Android Intent BroadcastReceiver与Zebra扫描器配置求助

Hey,我刚好有过用Delphi FMX对接Zebra扫描器的经验,这就给你一步步捋清楚怎么配置DataWedge Intent来接收条码数据~

配置Zebra DataWedge Intent接收条码(FMX Delphi Android版)

第一步:在Zebra设备上配置DataWedge

先从设备端的DataWedge入手,这是核心配置:

  • 打开设备上的DataWedge应用,点击右上角的「+」新建一个专属配置,比如命名为DelphiBarcodeReceiver
  • 找到「Associated Apps」选项,选择你的FMX应用(要对应上Delphi项目里的包名,包名可以在Delphi项目选项的「Application → Package Name」里查看)
  • 进入「Intent Output」设置:
    • 把Intent输出模式改成Send via Intent
    • 自定义一个Intent动作,比如com.yourcompany.yourapp.BARCODE_SCAN(这个动作要和后面Delphi代码里的完全匹配,大小写都不能错)
    • Intent类别选DEFAULT就够用了
    • 推荐把Intent发送方式设为Broadcast,这样不需要启动app也能接收数据,更灵活

第二步:给Delphi项目配置Android清单

接下来要让你的app能识别到这个Intent,得修改AndroidManifest.template.xml:

  • 先添加广播接收的基础权限(如果用Broadcast模式):
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
  • 然后在<application>标签里添加Intent过滤器,对应你刚才设置的动作:
    <receiver android:name="com.embarcadero.firemonkey.FMXBroadcastReceiver" 
              android:enabled="true" 
              android:exported="true">
        <intent-filter>
            <action android:name="com.yourcompany.yourapp.BARCODE_SCAN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
    
    注意:这里的android:name用Firemonkey自带的广播接收器就行,不用自己写Java类,省事儿!

第三步:在Delphi代码里接收条码数据

现在写代码来捕获这个广播并提取条码:

  • 在你的主窗体上拖一个TBroadcastReceiver组件(在Firemonkey的「Components → System」里能找到)
  • 选中这个组件,在属性面板的Actions里添加你刚才定义的动作com.yourcompany.yourapp.BARCODE_SCAN
  • 双击组件的OnReceive事件,写处理逻辑:
    procedure TMainForm.BroadcastReceiver1Receive(Sender: TObject; const Intent: JIntent);
    var
      BarcodeStr: string;
      DataKey: JString;
    begin
      DataKey := StringToJString('com.symbol.datawedge.data_string');
      if Intent.hasExtra(DataKey) then
      begin
        BarcodeStr := JStringToString(Intent.getStringExtra(DataKey));
        // 这里把条码数据展示出来或者做后续处理
        lblBarcode.Text := '扫描结果:' + BarcodeStr;
      end;
    end;
    
  • 如果你更习惯用「Start Activity」模式(扫描时直接唤起app),那就在窗体的OnCreate事件里获取启动Intent:
    procedure TMainForm.FormCreate(Sender: TObject);
    var
      Intent: JIntent;
      BarcodeStr: string;
    begin
      Intent := SharedActivity.getIntent;
      if Assigned(Intent) then
      begin
        if Intent.hasExtra(StringToJString('com.symbol.datawedge.data_string')) then
        begin
          BarcodeStr := JStringToString(Intent.getStringExtra(StringToJString('com.symbol.datawedge.data_string')));
          lblBarcode.Text := '启动时扫描的条码:' + BarcodeStr;
        end;
      end;
    end;
    

第四步:测试排坑

部署app到Zebra设备后,记得先激活DataWedge里你创建的配置,然后扫描条码试试。如果没收到数据,先排查这几个点:

  • DataWedge的配置是否真的关联了你的app包名?别选错了其他应用
  • Intent动作是不是完全一致?大小写、拼写都要对
  • AndroidManifest里的过滤器有没有写错?可以用adb命令查看app的Intent过滤器确认
  • 设备的DataWedge版本是不是太老?尽量更到最新版,兼容性更好

内容的提问来源于stack exchange,提问作者Babu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:04