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

问题描述 投票:4回答:3

考虑以下情况,我已从运行iOS 5.1的iPhone 4S与对等设备建立了绑定连接。

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

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

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

我有什么遗漏吗?

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

ios bluetooth core-bluetooth bluetooth-lowenergy
3个回答
6
投票

要使用retrievePeripheral API,您需要将CBPeripheral UUID保存在某个地方(我使用CoreData)。 resolvePeripheral调用将UUID的NSArray作为参数。似乎您没有将已保存的UUID提供给您的retrievePeripheral调用。调用didRetrievePeripherals回调时,将获得CBPeripheral对象数组。然后,您可以重新连接到这些外围设备。您不需要扫描它们,也不需要与外围设备配对。


2
投票

我有相同的问题,我认为一种解决方案:当连接断开时,master必须以与扫描和连接相同的方式扫描外围设备,slave必须进入advertisin状态,并且都必须再次识别服务的uuid和服务的特征。

这是我尝试重新连接的方法。

当然,我们必须通过自己的方式来刷新更多功能


1
投票

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

如果要连接到设备,请使用CBCentralManager retrievePeripheralsWithIdentifiers:的以下方法,并将UUID作为参数传递。这将返回一个CBPeripherals数组,找到您的CBPeripherals并连接到它。

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

如果您的设备已经连接到电话,则可以使用CBCentralManager中的方法retrieveConnectedPeripheralsWithServices来检索CBPeripheral对象。您需要将外围设备使用的服务作为参数传递。

© www.soinside.com 2019 - 2024. All rights reserved.