Ios 核心蓝牙:查看设备是否可用于重新连接

Ios 核心蓝牙:查看设备是否可用于重新连接,ios,swift,core-bluetooth,Ios,Swift,Core Bluetooth,我正在尝试使用检索外围设备标识符:方法尝试连接到以前连接的外围设备。只有当外围设备靠近iOS设备时,连接尝试才会成功 现在,我如何确定已知外围设备是否在附近,因此在不久的将来可以连接 如果您阅读核心蓝牙指南并向下滚动至图5.1,Apple将描述一个可能的重新连接流程。在该图的第一列中,有一个条件“设备可用?”什么方法或成员反映了此可用性?该“设备可用”框指的是已调用的centralManager(uU2;:didConnect:)。如果您查看上面的框,它是“尝试连接”。如果成功,则设备可用 这几

我正在尝试使用
检索外围设备标识符:
方法尝试连接到以前连接的外围设备。只有当外围设备靠近iOS设备时,连接尝试才会成功

现在,我如何确定已知外围设备是否在附近,因此在不久的将来可以连接

如果您阅读核心蓝牙指南并向下滚动至图5.1,Apple将描述一个可能的重新连接流程。在该图的第一列中,有一个条件“设备可用?”什么方法或成员反映了此可用性?

该“设备可用”框指的是已调用的
centralManager(uU2;:didConnect:)
。如果您查看上面的框,它是“尝试连接”。如果成功,则设备可用

这几乎总是正确的方法。不要问“这有可能成功吗?”只要试一下。如果成功了,就成功了

如果您真的想知道附近但未连接的设备,那么您可以使用
scanForPeripherals(带有服务:选项:)
对它们进行扫描,如果它们正在做广告。然后,您可以检查是否有任何发现的外围设备是您正在寻找的

当然,设备可能就在附近,而不是广告。它可能连接到另一个设备,在这种情况下,您无法看到它。它可能已连接到您的设备,在这种情况下,您需要
retrieveConnectedPeripherals
才能查看它。这可能不是广告(许多设备在一段时间后停止广告)。在这种情况下,如果不尝试连接到它,您将无法看到它


但通常正确的答案是,如果你已经知道这个设备,就尝试连接。设置一个超时,如果超时,它可能不在附近。或者不要设置超时,让它尝试连接,直到它工作。

谢谢。这个框的问题是CB实际上没有告诉我设备是否有可能连接。就像你写的,
scanForPeripherals:
是唯一知道的方法。这对我来说越来越有意义了,我只是假设CB提供了另一种方法来提高流程的效率——速度和能量,但事实并非如此。这里需要添加的重要内容是,
connect:
方法不会超时。这意味着,如果设备尚未准备好连接,则不会调用
:didConnect:
\didcfailtoconnect:error:
。正确;这就是为什么你需要设置一个超时,如果你在乎的话。一个可恢复的连接可能需要无限长的时间(天、周、任何事情),而不会被认为是一个问题。顺便说一句,这实际上不是CB的问题。它与BLE的工作方式有关(事实上,所有网络)。在没有发送数据包(从而消耗能量)的情况下,就无法知道它的存在。