Ada*_*ter 6 objective-c ios core-bluetooth bluetooth-lowenergy
很抱歉这个长标题,但我们在使用corebluetooth for ios时遇到了一个非常有趣的问题.我们正在CBCentralManager中发出检索外围设备的调用,并且能够找到之前配对的设备.
无论设备是打开还是关闭,都会发生这种情况.我在苹果的文档中找不到任何关于为什么它能够在关闭时找到它并且它没有出现在设置 - >蓝牙 - >设备中的设备.我怀疑Apple正在缓存此信息,但无法找到任何文档来确认这一点.此外,当设备关闭并且我们发出连接调用时,程序继续正常执行,但didFailToConnect的委托永远不会被调用.打开设备后,它会立即连接.
尝试连接设备时有没有办法传递超时参数?如果没有,那么处理重新连接到以前使用的应用程序设备的最佳解决方案是什么(我们将最后连接的设备存储在应用程序中).
您需要了解的两点retrievePeripherals:和connectPeripheral:
1.)retrievePeripherals:尝试检索CBPeripheral与您提供的uuid相关联的对象.即使关闭设备(或在国家的另一边)retrievePeripherals:仍将返回CBPeripheral您可以呼叫的实例connectPeripheral:.这是故意这样做的,这样你就可以对一个甚至不在的外围设备发出呼叫,并在它回到范围时仍然自动连接到它.它基本上在系统蓝牙内部创建一个标记,以便在实际看到设备时,它会知道它应该连接到它.
2.)connectPeripheral:除非通信信道被实际设备断开,否则不会超时.如果iOS设备没有看到设备,它将不会失败并且不应该超时(除非系统蓝牙内部发生一些错误).
至于timeout参数,CoreBluetooth框架内没有记录的方法.您可以为它创建自己的实现,但是我相信您最好保留一个列表,列出您实际调用的外围设备connectPeripheral:,然后在连接时从列表中弹出它们.如果您不想再连接到cancelPeripheral:该UUID上的列表调用中的外围设备,请调用connectPeripheral:另一个,并交换条目.很高兴去.