CoreBluetooth:检索多个断开连接的外围设备的正确方法是啥?

Posted

技术标签:

【中文标题】CoreBluetooth:检索多个断开连接的外围设备的正确方法是啥?【英文标题】:CoreBluetooth : What's the correct way of retrieving multiple disconnected peripherals?CoreBluetooth:检索多个断开连接的外围设备的正确方法是什么? 【发布时间】:2014-04-07 09:41:04 【问题描述】:

在我目前正在进行的项目中,我正在使用单例类来处理所有与蓝牙相关的任务。它是CBCentralManager 对象处理与多个外围设备的连接。当CBPeripherals 被发现时,我让用户选择外围设备并连接到它。建立连接后,他/她可以选择另一个可用的设备,因此连接是按顺序完成的。

但是在检索连接时,我得到了一组检索到的外围设备。检索多个外围设备的最佳做法是什么?一次创建到外围设备的多个连接请求是否可以,还是应该按顺序完成?

现在我正在遍历检索到的外围设备并尝试与它们连接而无需等待。它可以工作,但需要一些时间,尽管我正在连接的 ble 硬件可能有问题。

更重要的是,当我触发 retrievePeripheralsWithIdentifiers: 方法时,它没有给我任何委托回调,所以我在 centralManager:didDisconnectPeripheral:error: 方法中进行检索,我正在这样做

NSArray *retrieved = [self.centralMgr retrievePeripheralsWithIdentifiers:identifiers];

然后遍历检索到的对象。

它有效,但它是正确的方法吗?

【问题讨论】:

【参考方案1】:

ios 7 中更新了核心蓝牙 API。 retrievePeripheralsWithIdentifiers:直接返回你请求的外设,没有回调了。

经验法则是,如果您有一个 CBPeripheral 对象,那么您可以重复使用它。无需再次检索。关于您当前使用 API 的方式,您的问题有点令人困惑,但每当您有疑问时,您可以参考Core Bluetooth Programming Guide。

只有一个例外:如果 Core Bluetooth 框架重新启动或重新上电,则 CBPeripheral 对象无效。重复使用会导致错误。在这种情况下,必须获取新的实例。

【讨论】:

以上是关于CoreBluetooth:检索多个断开连接的外围设备的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

corebluetooth : didDisconnectPeripheral 减少超时

使用一个 CBManager 连接和写入多个外围设备

CoreBluetooth [警告] 未知错误:311 在 iOS 中使用 CoreBluetooth 框架重复连接和断开连接时发生

未使用 CoreBluetooth (iPhone 6) 接收外围设备发现回调

重启蓝牙后重新连接时应用程序未发现服务

您可以在 CoreBluetooth 后台委托调用中做啥?