不确定 API 可以让您做什么,但底层的蓝牙主机控制器接口 (HCI) 命令是“查询命令”
这将允许您在固定时间和/或固定数量的响应内查询设备。
我是蓝牙新手,不是专家,但是......
要从处于低功耗模式的蓝牙设备获得至少 1 个响应需要 1.28 秒,因此查询时间是该周期的倍数,最大为 61.44 秒(48 个周期),因此时间范围为 1 (1.28秒)到 48(61.44 秒)。
不过,可能有多个设备可以在 1.28 秒的时间内做出响应。
您还可以指定您将接受的响应数量 (1..255) 或 0 表示无限制,例如直到时间用完。
如果您找到了您正在寻找的特定设备,您也可以取消查询。
在我的办公桌上使用带有蓝牙 2.1 +EDR 固件的 CSR 蓝牙芯片进行不科学的测试,在芯片上运行查询,并通过芯片 UART 进行调试输出。每个查询运行 10 次并取结果的平均值:
- 1周期查询时间(1.28秒)
平均产生 10 个独特的
蓝牙地址。
- 5期查询
时间(6.4 秒)得出平均值
23 个唯一的蓝牙地址。
- 10
周期查询时间(12.8秒)
平均产生 29 个独特的
蓝牙地址。
我说“唯一”,实际上结果一遍又一遍地重复许多相同的地址,但这可能取决于实现,并且 Apple API 可能只返回唯一的地址。
然而,这并不代表“现实世界”,因为这里(我的办公室)的大多数蓝牙设备都不处于低功耗模式。我想,我可以按设备类别过滤掉 PC、笔记本电脑和测试套件。这将获得可被发现的手机、耳机等......
查询也可以结合 RSSI 来获取信号最强的设备,但不一定是最接近的。
对于您的场景,您可能希望根据时间和设备数量进行查询,例如 4 * 1.28 秒或 10 台设备。
总结一下:
最短的查询时间是 1.28 秒,可能会得到 10+/-?该区域中的设备(如果它们处于唤醒状态且位于附近)。
如果您的蓝牙环境已饱和或(微波炉位于同一房间内),则可能需要更长的时间才能找到范围内的所有设备。