我正在尝试使用Windows套接字来发现范围内的BT设备。我正在使用这篇 MSDN 文章。
代码有效,我通过调用WSALookupServiceNext(...)获取设备信息。
设备信息由 WSAQUERYSETW 结构提供。
如何根据 WSAQUERYSETW 结构中的数据知道设备是否在范围内?
我可以检查WSAQUERYSETW::d wOutputFlags是否具有以下标志之一:
BTHNS_RESULT_DEVICE_CONNECTED
BTHNS_RESULT_DEVICE_AUTHENTICATED
BTHNS_RESULT_DEVICE_REMEMBERED
如果设备已连接,那么它肯定在范围内,但是其他状态呢?
记忆状态到底是什么?
这些标志并不相互排斥 - 设备可以是所有三个或没有。
-
记住意味着它列在控制面板的"蓝牙设备"下。它可能在范围内,也可能不在范围内。我们对Remembered设备的唯一保证是它们在过去处于范围内的某个点。
-
经过身份验证意味着它已与设备配对 - 即如果需要引脚,则已经提供。设备可以被记住,但不能经过身份验证;但是,任何经过身份验证的设备(即Windows已与之配对)都将被记住
如果设备之前已配对,然后手动删除,则会取消身份验证,并且既不会记住也不会对其进行身份验证。