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也能接收数据,更灵活
- 把Intent输出模式改成
第二步:给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
相关产品推荐
相关产品推荐

