6

抱歉,标题太长了,但是我们在为 ios 使用 corebluetooth 时遇到了一个非常有趣的问题。我们正在调用 CBCentralManager 中的 retrievePeripherals,并且能够找到之前配对的设备。

不管设备是打开还是关闭,都会发生这种情况。我在苹果的文档中找不到任何关于为什么它在关闭时能够找到设备并且它没有显示在设置 - >蓝牙 - >设备中的任何内容。我怀疑 Apple 正在缓存此信息,但找不到任何文档来确认这一点。此外,当设备关闭并且我们发出连接调用时,程序继续正常执行,但 didFailToConnect 的委托永远不会被调用。当设备打开时,它会立即连接。

尝试连接设备时有没有办法传递超时参数?如果不是,最好的解决方案是处理重新连接到以前使用的应用程序设备(我们将最后连接的设备存储在应用程序中)。

4

1 回答 1

8

你需要知道的两点retrievePeripherals:connectPeripheral:

1.)retrievePeripherals:尝试检索CBPeripheral与您提供的 uuid 关联的对象。即使 ble 设备已关闭(或在该国的另一端)retrievePeripherals:,仍会返回CBPeripheral您可以调用的实例connectPeripheral:。这是有意完成的,以便您可以向甚至不在附近的外围设备发出调用,并且当它回到范围内时仍会自动连接到它。它基本上在系统蓝牙内创建一个标记,以便当实际看到设备时,它会知道它应该连接到它。

2.)connectPeripheral:除非与实际设备的通信通道中断,否则不会超时。如果 iOS 设备没有看到该设备,它不会失败并且不应该超时(除非系统蓝牙内部出现错误)。

至于超时参数,CoreBluetooth框架内部没有记录的方法。您可以为其创建自己的实现,但是我相信您最好保留一个您实际调用的外围设备 uuid 的列表,connectPeripheral:然后在它们连接时将它们从列表中弹出。如果您不想再连接到cancelPeripheral:该 UUID 上列表调用中的外围设备,请调用connectPeripheral:另一个并交换条目。很好走。

于 2013-08-15T02:21:19.400 回答