ios CBL2CAP通道在应用程序后台运行时无响应

jaql4c8m  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(162)

我面临一个问题,即L2 CAP(或NSStream)在应用程序进入后台后(2-10秒后)停止向应用程序通知事件。应用程序可能被暂停(如预期)。
我的期望是,当有BLE活动时,应用程序应该被系统唤醒。该应用程序支持后台模式-使用LE附件。也支持状态恢复)
以下是一些常见的用例(应用程序是 * 非'中心'
1.应用程序触发了“连接”。应用程序被暂停..外围设备进入范围->应用程序唤醒
(工作)**

  1. app已连接应用程序被暂停..外围设备更新通知特征->应用唤醒**(工作)**
  2. app已连接应用程序被暂停..外设写入L2 CAP->应用程序唤醒**(不工作)**
    1和2是非常可靠的(即使重新启动后)。
    3、根本不工作。可悲的是,我找不到任何相关的文件,所以我认为它应该是相同的(与特点)
    来自Apple(关于“蓝牙中心”):
    当您的应用对此进行声明时,系统会将其从挂起状态唤醒,以允许其处理蓝牙相关事件
    主要的区别似乎是L2 CAP构建在NSStream之上-但我不知道这在系统级别上有什么区别。NSStream在RunLoop.main(默认)上运行。
    此外,如果应用程序被挂起,并且外围设备执行L2 CAP写入.(什么也没发生),但如果外设通知特性,它会唤醒应用程序并接收L2 CAP消息+它可以继续接收L2 CAP数据一段时间(2- 10秒),然后再次停止。这可能是一些变通办法(总是通过特征通知),但我希望这是记录.
    L2 CAP是否不被视为“BLE”活动,并且不会按设计唤醒应用程序?
    从文档中进一步,
    此外,当调用任何CBCentralManagerDelegate或CBPeripheralDelegate委托方法时,系统都会唤醒您的应用,从而允许您的应用处理重要的中心角色事件,例如,当连接建立或断开时、当外围设备发送更新的特征值时以及当中心管理器的状态更改时。
    这显然不包括'NSStream'回调.
kknvjkwl

kknvjkwl1#

iOS 17似乎在后台修复了BLE L2CAP CoC通信。

相关问题