如果设备关闭,尝试在IOS应用程序中检索以前配对的蓝牙设备将无法响应失败

时间:2013-08-14 23:44:54

标签: ios objective-c core-bluetooth bluetooth-lowenergy

很抱歉这个长标题,但我们在使用corebluetooth for ios时遇到了一个非常有趣的问题。我们正在CBCentralManager中发出检索外围设备的调用,并且能够找到之前配对的设备。

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

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

1 个答案:

答案 0 :(得分:8)

您需要了解有关retrievePeripherals:connectPeripheral:

的两点

1。)retrievePeripherals:尝试检索与您提供的uuid相关联的CBPeripheral对象。即使关闭设备(或在国家/地区的另一端),retrievePeripherals:仍会返回CBPeripheral的实例,您可以拨打connectPeripheral:。这是故意这样做的,这样你就可以对一个甚至不在的外围设备发出呼叫,并在它回到范围时仍然自动连接到它。它基本上在系统蓝牙中创建一个标记,这样当实际看到设备时,它就会知道它应该连接到它。

2。)connectPeripheral:除非通信渠道被实际设备破坏,否则不会超时。如果iOS设备没有看到设备,它将不会失败并且不应该超时(除非系统蓝牙内部发生一些错误)。

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