显而易见的一个原因是用户没有使设备可被发现。我正在寻找其他人。
我观察过(我猜每个人都有),在扫描蓝牙设备时,我们并没有“每次都”获得“所有”可发现设备的列表。根据我通常阅读的开发人员文档,它是随机的,但我想要这种随机性背后的原因 - 我觉得“扫描仪”设备和“扫描”设备都存在原因。
例如,在我的Android手机上,如果我在一次扫描结束后立即按下“扫描”按钮,我在第一次扫描时得到的设备几乎没有30%。这让我想知道出了什么问题! (请注意,我在谈论第二次扫描中刚刚“发现”的设备 - 大多数设备显示的列表显示了之前扫描中发现的旧“缓存”设备)
(相关)问题是,如果我以某种方式将扫描时间(在我的Android设备上)从12秒增加到30秒,我是否更有机会发现丢失的设备?
PS:虽然我没有用Android标记这个问题,但我很乐意在蓝牙术语方面获得Android特定答案,以及任何低级答案)
答案 0 :(得分:2)
蓝牙发现通过在可用无线电频谱上广播查询分组来工作。处于可发现模式的任何蓝牙设备将为其接收的数据包发送答案。由于蓝牙无线电层的细节,不能保证范围内的所有设备都会收到查询数据包,但实际上,如果扫描运行的典型时间为10秒,则概率接近100%。
出现差异的更多可能原因是由于蓝牙的短距离,通常是10到20米。因此,完全有可能在第一次扫描期间在范围内的设备已经移动,使得它们不再在范围内。如果你在一个有很多人四处走动的地方进行扫描,这可能是原因。
与短距离相关的另一个原因是一些设备可能处于蓝牙范围的边缘,因此查询分组或查询响应分组在传输中丢失的可能性很大。虽然蓝牙芯片组将为可用于粗略估计范围的查询响应提供RSSI值(在BT 2.1 - >,IIRC中),但此查询功能通常不显示此信息(例如,Android查询未显示此信息)。