3

我正在尝试使用仅发送广告的蓝牙 LE 设备(类似于 iBeacon)。在我的 Linux 机器上,“hcitool lescan”检测到正在宣传的设备并显示“缩写名称”,因此无线接口似乎工作正常。

不幸的是,在我的 Nexus 4 手机上使用最新的库存 ROM (Android 4.3),我尝试了 4 种不同的蓝牙 LE 扫描仪应用程序,但没有一个显示设备的广告。但是,当设备处于活动状态时,“adb logcat”会显示正在处理的大量 btu_ble_process_adv_pkt [1] 事件,一旦设备断电,这些事件就会停止。所以很明显,BTLE 堆栈似乎正在接收我的广告,但它们并没有到达应用程序。

谁能建议广告必须包含哪些字段才能由Android正确处理?

[1] https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/jb-mr1.1-dev/stack/btu/btu_hcif.c#2198

4

1 回答 1

2

我自己设法弄清楚:如果您有一个 BTLE 设备,它只发送广告并且不接受任何连接,那么您必须确保作为消息的第一个字节发送的 PDU 类型是 0x02 (ADV_NONCONN_IND) . 否则,Android 显然会尝试打开连接以查询 GATT 属性,这当然会失败。AFAICT,iOS在这里更宽容。

于 2013-10-15T09:02:09.970 回答