问候!
这个想法很简单。假设我有一项服务,人们可以走到一个信息亭并与该信息亭上的蓝牙设备“配对”他们的手机。我们将忽略人们为什么会这样做,但假设他们有这样做的动机。
假设我已经说服了成千上万(如果不是数百万人)的人做这件事……他们带着打开蓝牙的手机四处走动。(不可发现。)如果可能存在数百万个已知设备池,我该如何解决扫描“已知设备”的问题?
同样,一旦我真正完成了初始配对,我就不想与他们联系。我只是想知道它们很接近。
想法?
嗯,第一件事是,即使你的信息亭里面有一个 1 类蓝牙无线电,它实际上可以比宣传的 100 米更远,仍然极不可能有数百万部蓝牙手机之前与你配对过信息亭收音机范围内的信息亭。这样可以缩小您正在处理的蓝牙设备的潜在数量。
其次,如果设备不可被发现,那么您之前是否与它配对都没有关系。你不会使用一般的“你好,有人在外面吗?”来找到它。查询扫描。如果您已与设备配对,您将知道它的蓝牙设备地址,因此可以显式 ping 它并获得答案。如果您认为可能有数百万部手机与您的信息亭配对,这似乎不是一件合理的事情。(您有没有想过,如果您有多个信息亭,您的用户必须分别与每个信息亭配对?您真的需要与手机配对才能完成您需要做的事情吗?)
说了这么多,一般查询扫描将在您的信息亭无线电附近生成可发现的蓝牙设备列表。您可以使用该列表来搜索您自己的与信息亭配对的设备列表。我不记得您是在第一个响应中返回友好名称,还是同时获得 BD_ADDR。如果您只是获得友好名称,可能会有多个设备具有相同的友好名称,因为我怀疑许多用户会更改他们手机的友好名称。
自从我真正深入研究蓝牙规范以来已经有一段时间了,所以事情可能已经改变了。
配对可能是矫枉过正:这是关于建立安全通信。更糟糕的是,ISTR 的一些手机 UI 没有将配对(具有安全通道)和信任(允许移除设备在不询问用户是否应该这样做的情况下进行操作)分开,尽管我希望现代手机能做到这一点。
如果您只想要其他设备的蓝牙地址,您可以让人们向信息亭发送名片或其他东西。或者告诉他们变得容易被发现并让您的信息亭最初找到他们。或者他们可以配对,但正如 Kirsten 所说,他们将与一个信息亭配对:不过,你可能不在乎你想要的只是他们的地址,而不是安全通道。
现在你有一个蓝牙地址列表。如果它们之间有某种网络,则可以在多个信息亭之间共享这些地址。在理想的世界中,检测接近度将是执行 BT 查询的问题(您甚至不需要完整的设备发现,只需知道那里有哪些地址就足够了)并将您从中获得的地址与您的列表进行匹配。但这仅在可发现远程设备时才有效(这意味着它们正在侦听查询数据包,执行规范称为查询扫描的操作)。如果他们不是,您必须尝试依次连接到每个人(一旦您知道另一个人在那里,您可以断开连接)。您可以将其与多个 BT 无线电并行,但您正在查看每个无线电的每个地址几秒钟。你在做旧的“http://www.newswireless.net/index.cfm/article/924
当然,如果人们不让他们的设备可被发现,这意味着他们不想被发现,所以这不起作用也就不足为奇了。