iOS BLE应用程序中的重新连接过程



考虑这样一种情况:我与运行iOS 5.1的iPhone 4S的对等设备建立了绑定连接。

然后由于某种原因(用户发起或其他原因)断开连接。

在这种情况下,如果应用程序必须自动重新连接到之前配对的设备,据我所知,Apple 公开了 API retrieve_peripheral,该 API 应该在填充先前连接或配对的外围结构的情况下did_retrieve_peripheral回调。

使用此外围实例,我可以比较我之前配对的uuid,以及匹配是否可以尝试连接(重新连接)。但是我无法获取外围设备,因为计数为 0 确实检索了外围设备回调。

我错过了什么吗?

也有人尝试在应用程序中复制或存储整个外围结构,其中包括(在外围设备中发现的服务,特征等)并将其用于重新连接。

要使用 retrievePeripheral API,您需要将 CBPeripheral UUID 保存在某个地方(我使用 CoreData)。检索外围设备调用将 UUID 的 NSArray 作为参数。 看起来您没有将保存的 UUID 提供给检索外围设备调用。 当你的didRetrieve外围设备回调被调用时,你将得到一个CBPeripheral对象的数组。 然后,您可以重新连接到这些外围设备。您无需扫描这些设备,也无需与外围设备配对。

我有同样的问题,我认为一个解决方案:当连接丢失时,Master必须以与我们扫描和连接相同的方式扫描外围设备,而Slave必须传递到Advertisin State,并且两者都必须再次识别Caractheristics Services UUID和Caracteristics的服务。

这就是我将尝试重新连接的方式。

当然,我认为我们必须以自己的方式刷新更多功能

成功连接到设备后,应保存外围设备UUID(peripheral.identifier.UUIDString)。我正在使用NSUserDefaults来保存UUID。

当您要连接到设备时,请使用CBCentralManager中的以下方法检索外围设备与标识符:并将UUID作为参数传递。这将返回一个 CBPeripherals 数组,找到你的并连接到它。

不要尝试将 CBPeripheral 对象保存在任何地方。这是一个非常糟糕的主意。只需使用其 UUID。

如果您的设备已连接到手机,则可以使用方法检索 CBPeripheral 对象 从 CBCentralManager 检索连接外围设备与服务。您需要将外围设备正在使用的服务作为参数传递。

最新更新