做 PDA 广播扫码时,最让人头疼的问题经常不是代码,而是:
我根本不知道这台 PDA 的 Action 和 DataKey 是什么。
厂家文档找不到,设备又不是主流型号。
怎么办?
其实可以直接调试。
一、Action 是什么?****
可以把 Action 理解为广播的“频道名称”。
例如:
com.scanner.broadcast
或者:
android.intent.action.SCAN_RESULT
你的 App 只有监听正确 Action,才能收到 PDA 发过来的扫码数据。
二、DataKey 是什么?****
广播收到以后,条码通常放在 Intent Extra 里面。
例如:
barcode
或者:
data
scanData
SCAN_BARCODE1
decode_data
这个 Key 就可以理解成 DataKey。
三、最靠谱的办法:不要猜****
如果设备厂家文档完整,直接看官方文档当然最好。
但是现实项目里经常遇到:
二手 PDA
定制 PDA
OEM PDA
老设备
没有开发文档
这种情况。
这时候我一般会做一个:
PDA 扫码调试页。
页面实时显示:
Action
Extras Key
Extras Value
时间
原始数据
扫码一次,就把收到的信息全部显示出来。
例如:
Action:
com.android.server.scannerservice.broadcast
Extras:
barcode_string = 6923450657713
barcode_type = EAN13
那么基本立刻就能确定:
Action = com.android.server.scannerservice.broadcast
DataKey = barcode_string
四、为什么建议项目里保留一个硬件测试中心?****
如果系统以后可能适配不同 PDA,我甚至建议正式项目里保留:
硬件测试
入口。
里面可以测试:
扫码
设备型号
Android 版本
Action
DataKey
扫码原始结果
连续扫码
现场换设备以后,不需要重新写一个测试 APK。
直接打开测试页面就知道:
这台 PDA 到底发了什么。
五、企业 PDA 项目不要把参数写死在页面****
更好的设计是:
PDA Profile
例如:
设备:
UROVO
模式:
Broadcast
Action:
xxx.xxx.SCAN
DataKey:
barcode
换设备后只需要换 Profile。
业务层仍然只接收统一的:
scan(code)
这样维护成本会低很多。 插件地址:ext.dcloud.net.cn/plugin?id=2…