很抱歉标题很长,但我们在使用 iOS 版 corebluetooth 时遇到了一个非常有趣的问题。我们正在 CBCentralManager 中发出对retrievePeripherals 的调用,并且能够找到之前配对的设备。
不管设备是打开还是关闭,这种情况都会发生。我在苹果的文档中找不到任何关于为什么它能够在关闭时找到设备的信息,并且它没有显示在“设置”->“蓝牙”->“设备”中。我怀疑苹果正在缓存这些信息,但找不到任何文档来证实这一点。此外,当设备关闭并且我们发出 connect 调用时,程序会继续正常执行,但 didFailToConnect 的委托永远不会被调用。当设备打开时,它将立即连接。
有没有办法在尝试连接到设备时传递超时参数?如果没有,最好的解决方案是处理重新连接到应用程序以前使用的设备(我们将最后连接的设备存储在应用程序中)。
你需要了解的两点retrievePeripherals:
and connectPeripheral:
1.) retrievePeripherals:
尝试检索CBPeripheral
与您提供的 uuid 关联的对象。即使 ble 设备已关闭(或在国家的另一边)retrievePeripherals:
仍然会返回一个实例CBPeripheral
你可以打电话connectPeripheral:
在。这是有意完成的,以便您可以向不在附近的外围设备发出呼叫,并且当它回到范围内时仍然自动连接到它。它基本上在系统蓝牙内创建一个标记,以便当实际看到设备时,它会知道应该连接到它。
2.)connectPeripheral:
除非与实际设备的通信通道中断,否则不会超时。如果 iOS 设备没有看到该设备,则不会失败,也不会超时(除非系统蓝牙内部发生某些错误)。
至于超时参数,内部没有记录的方法CoreBluetooth
框架。您可以为其创建自己的实现,但是我相信您最好保留您实际调用的外围设备 uuid 的列表connectPeripheral:
打开,然后在连接时将它们从列表中弹出。如果您不想再连接到列表中的外围设备,请调用cancelPeripheral:
在该 UUID 上,调用connectPeripheral:
另一方面,并交换条目。很好,可以走了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)