servicios - programacion android pdf 2018
Creación de servicios en segundo plano para Bluetooth de baja energía en Android (1)
Antecedentes :
Idealmente, me gustaría que mi dispositivo Android esté escaneando dispositivos Bluetooth Low Energy todo el tiempo y la capacidad de iniciar una aplicación cada vez que aparezca un nuevo dispositivo con propiedades específicas.
Por lo tanto, el paquete de difusión en BLE enumerará, por ejemplo, un conjunto de servicios proporcionados por el dispositivo de radiodifusión. Una aplicación podría registrar un interés por ciertos servicios y comenzar automáticamente cuando un dispositivo con estos servicios entra en el rango.
Por lo que entiendo, ¿no es así como funciona la API de Android BLE? Entonces, ¿cómo puedo obtener algo similar?
El mejor ejemplo posible :
Tengo un sensor BLE que registra la temperatura ambiente a lo largo del tiempo. Cada vez que mi teléfono Android está lo suficientemente cerca, quiero conectarme y descargar todos los datos, enviándolos a alguna solución de almacenamiento en la nube. Esta aplicación no necesitaría ninguna GUI (al menos no después de la configuración). Pero, ¿cómo debería ejecutarse en segundo plano sin agotar la batería, pero aún así me da una posibilidad bastante buena de conectar el dispositivo rápidamente una vez que esté dentro del alcance?
Pregunta :
¿Debo configurar un temporizador y reactivar la aplicación de vez en cuando y luego comenzar a escanear manualmente? ¿Qué tipo de intervalos debo elegir? ¿Cuánto tiempo puedo dejar el escáner en funcionamiento sin afectar negativamente a la batería?
Posible solución :
Esto es lo que he propuesto hasta ahora.
- Una actividad de configuración para configurar los intervalos y dispositivos para escanear
- La actividad de configuración configurará un WakefulBroadcastReceiver similar al ejemplo de Scheduler
- Cuando el receptor recibe el evento onReceive, comienzo un servicio de escaneo BLE (que he escrito) como un servicio despierto.
- El servicio de escaneo comienza a escanear (con una devolución de llamada registrada).
- El servicio puede recibir informes adv que puede actuar sobre
- Después de un tiempo de espera, el servicio detendrá el escáner y finalizará el servicio de vigilia.
Esto funciona, pero no estoy seguro de que sea la mejor manera. Tampoco sé qué pequeños intervalos puedo tener y aún así evitar destruir la duración de la batería. Lo que me gustaría es comenzar a escanear cada dos minutos, escaneando de 10 a 20 segundos. Pero me temo que sería bastante frecuente despertar el dispositivo?
Esta funcionalidad se ha movido a la Biblioteca de Android Beacon de código abierto que:
Despertar / iniciar su aplicación cuando se detectan iBeacons que coinciden con un patrón deseado
realice escaneo de baliza en segundo plano, incluso si el usuario aún no ha lanzado su aplicación
reduzca la velocidad de escaneo automáticamente en el fondo a 30 segundos cada cinco minutos para ahorrar batería. (Tiempo configurable)
Los ejemplos de código se muestran here
Si su dispositivo BLE no es una baliza, puede utilizar esta biblioteca para lograr esto haciendo que su sensor también transmita como una baliza y luego de que se detecte, conéctese al servicio principal.