IOS BLE app中的重新连接程序

时间:2012-07-03 05:27:01

标签: ios bluetooth core-bluetooth bluetooth-lowenergy

考虑一种情况,我在运行IOS 5.1的iphone 4S上与对等设备建立了绑定连接。 然后由于某种原因(用户启动或其他原因)断开连接。 在这种情况下,如果应用程序必须自动重新连接到普遍配对的设备,据我所知,Apple公开API retrieve_peripheral,它应该给回调did_retrieve_peripheral,其中填充了先前连接或配对的外围结构。 使用这个外围设备实例,我可以比较我的先前配对的uuid,如果匹配可以尝试连接(重新连接)。但我无法获取外围设备,因为计数在检索外围设备回调时为0。 我错过了什么。 还有任何人尝试在应用程序中复制或删除sntire外围结构,其中包括(在外设中发现的服务,特性等)。并在重新连接中使用它。

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

我有同样的问题,我认为有一个解决方案: 当连接丢失时,master会以与我们扫描和连接相同的方式扫描外围,并且slave必须传递到advertisin状态,并且两者都必须再次识别caractheristics服务uuid​​和服务的特性。

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

当然,我需要用自己的方式刷新一些更多的功能

答案 2 :(得分:1)

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

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

请勿尝试将CBPeripheral对象保存在任何位置。这是一个非常糟糕的主意。只需使用它的UUID。

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