我知道答案名义上是“否”,但我的意思是真的-如果应用程序进入后台(启用了BTLE后台处理)会怎样? 24小时?跨应用更新?
在“重新连接到外围设备”标题下,此Apple documentation描述了重新连接工作流程,该工作流程首先尝试重新连接到通过retrievePeripheralsWithIdentifiers:
找到的先前配对的外围设备,然后在连接失败时再次开始扫描。如果没有正式的超时,您如何知道何时放弃connect
-ing到以前找到的外围设备?如果您想重新连接到先前找到的BTLE设备,而又无需用户与您的应用进行交互,那么您如何知道何时开始/继续扫描呢?
此外,该页面下方的注释还指出,某些BTLE设备在每次开机时都可能会为其自己发明一个随机标识符,因此,即使您从retrievePeripheralsWithIdentifiers:
找到一些先前配对的外围设备,您也可能无法连接到它们名称已更改。在实践中,是否有任何BTLE设备能够做到这一点?疯了!
最佳答案
这是一个棘手的问题。 CoreBluetooth框架本身没有针对连接请求的正式超时。实际上,它将尝试尽可能长时间地连接外围设备。但是那要多久?
好吧,不幸的是,这并不是一个很好的定义。您可以非常有信心,当应用程序处于前台时,连接不会超时,但是一旦您在后台涉及到连接,事情就不再那么有趣了。显然,就像您提到的那样,挂起的连接不会在电话重启后保留,等等。这很好,因为没有用户希望该应用在重启后仍然可以运行。关于长期运行的未决连接,您会在Apple的文档中找到它们告诉您选择加入状态保留和恢复,以确保在应用程序暂停并最终终止时正确保留未决的连接。如果按广告说的那样做,那会很好,但不幸的是,它却并非如此。经过多年的研究,我发现几乎不可能在iOS上获得可靠的后台挂起连接。我已经报告了有关此主题的许多错误,但到目前为止,尚未解决。
我认为您应该特别注意一些问题:
如果您的应用程序处于终止状态时发生了蓝牙状态更改事件,则
这些是从我的头上来的,但也有其他问题。关于随机地址,最常见的是这些外围设备使用所谓的“随机可解析”地址。这意味着它们看起来是随机的,但实际上它们可以使用IRK(身份解析 key )来解析,该身份通常在初始蓝牙绑定(bind)期间共享。据我所知,使用完全随机地址的设备不是很常见。
关于ios - CBCentralManager是否会超时连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40783691/