最近在做 Android PDA 扫码项目时,一个很容易踩的坑就是:
老设备扫码正常,换 Android 13 / Android 14 PDA 后,广播突然收不到了。
这时候很多人第一反应是:
PDA 坏了?
uni-app 有 Bug?
扫码服务没启动?
但实际很可能是:
BroadcastReceiver 注册方式的问题。
一、先确认是不是 Android 版本导致****
可以先测试:
Android 10 PDA
→ 正常
Android 11 PDA
→ 正常
Android 13 PDA
→ 不正常
如果出现这种非常明显的版本分界,优先检查 Android 广播机制兼容。
二、不要只看 uni-app 页面****
建议直接从原生层开始确认。
第一步:
确认 Receiver 是否注册成功。
第二步:
确认系统有没有收到 Intent。
第三步:
打印:
intent.getAction()
第四步:
打印 Intent Extras。
因为有时候并不是:
没有广播
而是:
广播收到了
但是 DataKey 不对
结果你的程序读取到的是 null。
三、PDA 设置也要检查****
很多 PDA 都允许修改输出模式:
Keyboard
Broadcast
Clipboard
Intent
有些设备恢复出厂设置以后,会自动恢复成 Keyboard。
这时候你的 Android Receiver 写得再正确也没用。
因此建议进入:
扫码设置
→ 输出模式
→ Broadcast / Intent
确认当前模式。
四、检查 Action****
这是最常见的问题之一。
比如程序监听:
com.xxx.SCAN
但是 PDA 实际发送:
android.intent.action.SCAN_RESULT
那当然永远收不到。
如果不知道 Action,最好的办法不是乱猜。
而是:
直接抓系统广播进行调试。
五、Android 13+ 项目不要完全照搬旧教程****
网上大量 BroadcastReceiver 示例是:
2018
2019
2020
写的。
但是 Android 的广播安全机制这些年已经发生很多变化。
所以出现:
旧项目正常
新项目异常
不一定是业务代码的问题。
尤其:
targetSdkVersion
Android API
Receiver exported
动态注册方式
都值得重点检查。
六、最终排查顺序****
推荐按照:
PDA 是否开启广播模式
↓
Action 是否正确
↓
Receiver 是否注册
↓
Android 版本是否兼容
↓
是否收到 Intent
↓
Extra 有哪些 Key
↓
DataKey 是否正确
↓
uni-app Bridge 是否收到
↓
业务页面是否正确处理
不要一上来就在 Vue 页面里反复改代码。
PDA 扫码问题只要把链路拆开,通常并没有想象中那么难定位。 插件地址:ext.dcloud.net.cn/plugin?id=2…