繁体   English   中英

iOS BLE的断开时间

[英]Disconnect time for iOS BLE

我注意到,当您在应用程序中为蓝牙设备断开连接时,iOS设备将继续保持该连接大约10秒钟。 我试图通过写一个特性来解决这个问题,该特性会导致蓝牙模块改为取消与iOS设备的连接,但是那不起作用(主要是因为我更改了模块,而iOS看不到更改,因为我认为设备缓存在某处)。 有没有办法使它在代码中立即断开连接? 我目前正在使用swift命令manager.cancelPeripheralConnection(peripheral)

不幸的是,没有。 告诉系统断开外围设备连接的cancelPeripheralConnection方法是通过您已经使用的cancelPeripheralConnection方法。 但是,如果调用此方法,则不一定意味着外围设备将断开连接。

背景

在iOS上,整个BLE连接管理由操作系统维护。 这意味着没有单个应用程序“拥有”连接。 所有BLE功能都经过复用,以允许多个应用程序访问中央和外围设备。

例如,如果您安装了一个健身应用程序,该应用程序在后台跟踪来自您的心率传感器的数据,那么您也可以“连接”到该应用程序中的心率传感器,但是只要您的设备无法触发真正的断开连接,健身应用程序保持连接。

您注意到的断开连接延迟基本上是对操作系统的优化。 如果没有应用程序再保持与外围设备的连接,它将等待一段时间(以避免不必要的连接/断开循环),然后触发蓝牙芯片上的断开连接。

希望能有所帮助。

在iOS中,当您调用CBCentralManager方法cancelPeripheralConnection(CBPeripheral)时,它并不总是立即终止连接。 如Apple的文档所述:

由于其他应用可能仍与外围设备保持连接,因此取消本地连接并不能保证基础物理链接立即断开。 但是,从应用程序的角度来看,外围设备被视为已断开连接,中央管理器对象调用了其委托对象的centralManager:didDisconnectPeripheral:error:方法。

如果您需要立即以编程方式终止连接,比如说要释放要与另一台中央设备连接的外围设备或重置自己的安全层,那么您需要遵循以下StackOverflow线程中所述的过程:

iOS 6-蓝牙LE断开连接

这是为了让应用程序将自己的专有命令发送到外围设备,该命令告诉外围设备通过常规方式断开连接(例如,“ H.H.H._H.C。”),例如“ GAPRole_TerminateConnection”或“ GAP_TerminateLinkReq”或“ LL_Disconnect”或“ HCI_Disconnect [_ *]”。 这始终有效,并且不会因连接监管超时而延迟,因为它是通知中央设备(即iOS)的正式断开连接。 监督超时(在iOS中最长为6秒;在Android上默认为20秒)仅在计划外断开连接(如超出范围)或外围设备断开连接而不通知远程设备(如“ LL_EXT_DisconnectImmed”)时起作用”(仅在某些BLE外围设备实现中可用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM