从扫描请求/扫描回复数据包中获取 RSSI

Obtaining RSSI from Scan Request / Scan Reply packets

我是 android 开发的新手,我正在编写一个应用程序作为使用 BLE Google API 的研究项目的概念证明。我有两个 android phone,其中一个正在为一些携带扫描响应 Y 的信标 X 做广告,而第二个 phone 正在扫描广告。我想访问与广告后面的 ScanRequest 和 ScanReply 数据包相对应的 RSSI 值

在设备到设备通信期间,当在第二个 phone 上调用覆盖的 onScanCallback 方法时,我只能通过对传递的 ScanResult 调用 result.getRssi() 来获取单个 RSSI 值.此外,正如预期的那样,相应的 ScanRecord 通过调用 record.getServiceUuids 提供了两个 ServiceUuid,其中第一个 UUID 对应于广告本身,第二个 UUID 对应于编程的扫描回复。

直到现在我还没有找到任何public方法来恢复ScanReply的RSSI,还有其他方法可以访问第二个RSSI吗?监听设备自动发送的ScanRequestRSSI也是一样,有没有办法恢复?

非常感谢, 伊万·莫拉莱斯

扫描回调中的RSSI已经对应扫描响应包中的RSSI,而不是广告包中的RSSI。 Android 的蓝牙堆栈丢弃了第一个数据包的 RSSI 值。为什么你仍然需要它?它应该或多或少与第一个数据包相同,因为两个数据包都是在如此短的间隔内发送的。

您无法获取扫描请求的 RSSI。如果您阅读 HCI 标准,此信息不会从控制器发送到主机。即使蓝牙堆栈会监听 "LE Scan Request Received event",该事件也不包括 RSSI。