iOS CoreBluetooth: connection activa al mismo periférico de destino en la aplicación y el widget al mismo time?

Quiero mantener la connection BLE persistente con mi dispositivo periférico en modo central en mi aplicación y es widget. Entonces, ¿es posible técnicamente?

La razón es la siguiente: cuando se estableció la connection en la aplicación, la enviamos a segundo plano, luego abrí el widget de hoy: el widget debería seguir funcionando con el dispositivo periférico conectado. Y sabiamente versa: si escondemos el widget de hoy, inicie la aplicación, la aplicación debería seguir utilizando la connection existente.

Sí, puede continuar procesando events BLE en segundo plano si habilita la capacidad Bluetooth en segundo plano. Simplemente select su file de proyecto principal, luego select el destino y, en la pestaña Capacidades, active los modos de background y active "Utiliza los accesorios Bluetooth LE".

En su aplicación principal, tendrá la oportunidad de procesar cualquier evento BLE, incluso mientras la aplicación esté en segundo plano.

Una cosa a tener en count es que los events BLE inician la acción, así que asegúrese de poner el código que desea ejecutar en segundo plano dentro de un método de delegado como didUpdateValueForCharacteristic .

Su código se ejecutará en la queue que haya especificado al inicializar el CBCentralManager .

El widget y la aplicación no pueden compartir una connection BLE. Puede comunicarse entre la aplicación y el widget con los methods que Apple sugiere (NSUserDefaults o la observación del valor key), o puede crear otra connection BLE desde el widget y comunicarse a través de él.

Sí, esto es posible. Eche un vistazo a retrieveConnectedPeripheralsWithServices: en el CBCentralManager.

Básicamente, lo que hace este método es que reúne todos los periféricos conectados a través de todo el dispositivo iOS. Utiliza esto cuando lances tu segunda aplicación en el dispositivo iOS.

Cuando una aplicación está en segundo plano, sus conexiones BLE se mantienen con vida, por lo que puede ocultar la aplicación 1, iniciar la aplicación 2, usar este método para identificar el periférico que le interese y utilizarlo independientemente de la primera aplicación.