una son segundo samsung qué que plano p20 las desactivar dejar consumen como cerrar bateria apps aplicaciones aplicacion abrir ios core-bluetooth

ios - son - como desactivar apps en segundo plano



¿Qué pueden hacer exactamente las aplicaciones CoreBluetooth mientras están en segundo plano? (4)

Acabo de aprender el modo de fondo para dispositivos BLE en iOS8.3 y 8.4 y he encontrado algunas diferencias desde arriba:

  1. si empiezo

    [centralManager scanForPeripheralsWithServices: @ [[CBUUID UUIDWithString: kServiceUUID]] options: @ {CBCentralManagerScanOptionAllowDuplicatesKey: @YES}];

de

- (void)applicationDidEnterBackground:(UIApplication *)application

Encontré que la enumeración devuelve el mismo dispositivo cada llamada con RSSI diferente, por lo que CBCentralManagerScanOptionAllowDuplicatesKey no se ignora.

  1. Si la aplicación está en primer plano, descubrió el dispositivo BLE 50 veces en segundos. Si la aplicación está en segundo plano pero la pantalla del teléfono está activa, la aplicación descubrió dispositivos BLE 6 veces en segundos. Si la pantalla del teléfono está bloqueada, la aplicación descubrió los dispositivos BLE 1 vez en segundos.

El sujeto lo dice todo, realmente. La documentación, en la medida en que existe, sugiere que las aplicaciones escritas contra el marco CoreBluetooth que se ejecuta en dispositivos iOS pueden agregar "bluetooth-central" a su lista de privilegios de fondo y así procesar algún tipo de evento Bluetooth mientras está inactivo, pero qué eventos exactos hacen y no te entregan?

Por ejemplo:

  1. ¿Puedo continuar las comunicaciones con un dispositivo con el que ya establecí un emparejamiento?
  2. ¿Puedo emitir solicitudes de descubrimiento periódicas para encontrar dispositivos que están fuera de rango / que nunca había visto antes? (Por ejemplo, si quería poder enviar una notificación cuando se encuentra un nuevo dispositivo interesante)
  3. ¿Qué pasa si un dispositivo sale de rango y luego vuelve? ¿Recibiré eventos desconectados y conectados sin la intervención del usuario o tendré que dar un rodeo para que el usuario solicite de forma explícita la reconexión?

Además de la respuesta de Chris:

  • Si su aplicación tiene el modo de fondo "bluetooth-central" y está conectada a un periférico, puede recibir notificaciones ( peripheral:didUpdateValueForCharacteristic:error: del periférico en segundo plano, incluso después de 10 minutos.

Entonces, cuando quiera ejecutar continuamente en segundo plano, tiene 2 opciones:

  • Ejecute el ciclo "conectar, desconectar, escanear nuevamente"
  • Hacer las notificaciones de envío periférico

Más tarde debería ser el "Fondo del evento" de WWDC 2012 Core Bluetooth videos https://developer.apple.com/videos/wwdc/2012/ Pero el primero parece un truco, no quiero confiar en él.

Probé esto en iPhone5, iOS6.1.4

Apple finalmente lanzó la Guía básica de programación Bluetooth y aquí está la nota oficial sobre

Core Background Procesamiento de fondo para aplicaciones de iOS


Nadie parecía saberlo, así que compré una cuenta de desarrollador de iOS y realicé algunos experimentos. Esto es lo que encontré:

Cuando se ejecuta en primer plano, puede iniciar un escaneo utilizando CBCentralManager :: scanForPeripheralsWithServices. Su escaneo puede restringirse a dispositivos que publicitan un servicio en particular, o sin restricciones (pase nulo para el parámetro de esa llamada). También puede permitir o rechazar duplicados ; en el primer caso, recibirá una devolución de llamada didDiscoverPeripheral cada vez que el iPhone reciba un paquete publicitario; en este último solo recibirá una devolución de llamada por dispositivo encontrado.

Cuando ingresas el fondo, las reglas parecen ser las siguientes:

  • Si estaba ejecutando un escaneo no restringido , se cancelará silenciosamente. No recibirá ninguna devolución de llamada de didDiscover.
  • Si su escaneo fue restringido (es decir, usted especificó uno o más UUID de servicio que estaba buscando), su escaneo continuará ejecutándose, pero se ignorará el indicador de permitir duplicados . Esto significa que ahora solo obtendrá callbacks de DidDiscoverPeripheral para nuevos dispositivos. Si todos los dispositivos fueron vistos en primer plano, no obtendrás devoluciones de llamadas.
  • Iniciar y detener el escaneo no restablece qué dispositivos se consideran nuevos. Si hay un dispositivo presente, solo obtendrá una devolución de llamada única, incluso en varios escaneos, a menos que ...
  • Si se conecta a un dispositivo, luego se desconecta y luego vuelve a escanear , el dispositivo se volverá a enumerar (es decir, recibirá una llamada más a didDiscoverPeripheral). Supongo que iOS considera que ha "mostrado interés" en el dispositivo.

No sé si los intentos de conexión a dispositivos no conectables (por ejemplo, los anunciantes BLE, como los que implementan el perfil de proximidad) son lo suficientemente buenos como mis dispositivos de ejemplo son conectables. Sin embargo, al menos para los dispositivos conectables, este procedimiento de escaneo / conexión / desconexión / escaneo es suficiente para sondear la presencia de un dispositivo en el fondo.

Los resultados anteriores se obtuvieron utilizando un iPhone 4S con iOS 5.0.1


También es bueno tener en cuenta el comportamiento de fondo y CoreBluetooth relacionado con iBeacons, aunque a Apple le gusta pensar en esto como una funcionalidad de CoreLocation:

  1. Cuando las notificaciones para una región iBeacon están activadas, notificarán al usuario la entrada o salida de la región. Se puede hacer que estas notificaciones dependan de si la pantalla está encendida o apagada. Estas notificaciones funcionarán incluso cuando la aplicación que solicita notificaciones esté en segundo plano. (Esto está claro en la documentación).

  2. No tan obvio: si usa la API de rango de iBeacon, entonces su aplicación debe estar en primer plano. No dice esto explícitamente en la documentación; de hecho, uno puede ser engañado al pensar que el rango debería funcionar en segundo plano a partir de la documentación. Sin embargo, un ingeniero de Apple aclara esto en una publicación enterrada en algún lugar de un largo hilo en el foro de desarrolladores de Apple, y también he visto esto fallar. El alineamiento solo funcionará en primer plano.

  3. Uno puede descubrir otros servicios anunciados por una publicidad periférica iBeacons. Pero esto solo funcionará en primer plano. Por lo tanto, si desea que se notifique a la central acerca de la proximidad utilizando iBeacons y luego realice otras transacciones utilizando otros servicios basados ​​en BLE, esto funcionará, pero solo en primer plano. No funcionará en segundo plano. Para las transacciones con servicios basados ​​en BLE en segundo plano, el anuncio debe ser un anuncio BLE normal, no un iBeacon. No puede usar un anuncio iBeacon para ayudar al proceso de descubrimiento en segundo plano, y luego cambiar a usar servicios BLE en segundo plano. (Me hubiera gustado mucho que esto funcione, pero no hay dados).