iOS CoreBluetooth:同时在应用程序和小部件中主动连接到同一目标外围设备?

iOS CoreBluetooth: active connection to the same target peripheral in app and widget simultaneously?

我想在我的应用程序及其小部件中以中央模式与我的外围设备保持持久的 BLE 连接。那么技术上可行吗?

原因如下:在应用程序中建立连接后,我们将其发送到后台,然后打开 today-widget - 小部件应继续与连接的外围设备一起运行。反之亦然:如果我们隐藏今天的小部件,启动应用程序 - 该应用程序应继续使用现有连接。

是的,如果您在后台启用蓝牙功能,您可以继续在后台处理 BLE 事件。只需 select 您的主项目文件,然后 select 目标文件,然后在 Capabilities 选项卡上,打开背景模式并启用 "Uses Bluetooth LE accessories".

在您的主应用程序中,您将有机会处理任何 BLE 事件,即使该应用程序处于后台。

需要注意的一点是 BLE 事件启动操作,因此请务必将要在后台执行的代码放在委托方法中,例如 didUpdateValueForCharacteristic.

您的代码将在您初始化 CBCentralManager 时指定的任何队列上执行。

小部件和应用程序无法共享 BLE 连接。您可以使用 Apple 建议的方法(NSUserDefaults 或键值观察)在应用程序和小部件之间进行通信,或者,您可以从小部件创建另一个 BLE 连接并通过它进行通信。

是的,这是可能的。在 CBCentralManager 上查看 retrieveConnectedPeripheralsWithServices:

基本上,此方法的作用是收集整个 iOS 设备上连接的所有外围设备。在 iOS 设备上启动第二个应用程序时使用它。

当应用程序在后台时,其 BLE 连接保持活动状态,因此您可以隐藏应用程序 1,启动应用程序 2,使用此方法识别您感兴趣的外围设备,并独立于第一个使用它应用