Android 13 BroadcastReceiver 收不到 PDA 扫码广播?排查这几个地方

1 阅读2分钟

最近在做 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…