Creación de servicios en segundo plano para Bluetooth low energy en Android


Antecedentes :

Idealmente me gustaría que mi dispositivo Android esté escaneando dispositivos Bluetooth de baja energía todo el tiempo y la capacidad de iniciar una aplicación cada vez que aparezca un nuevo dispositivo con propiedades específicas.

Así que el paquete de difusión en BLE enumerará, por ejemplo, un conjunto de servicios proporcionados por el dispositivo de difusión. Una aplicación sería capaz de registrar un interés para ciertos servicios y se iniciará automáticamente cuando un dispositivo con estos servicios entra en rango.

Por lo que entiendo, esto no es cómo funciona la API de Android BLE? Entonces, ¿cómo puedo conseguir algo similar?

El ejemplo más simple posible :

Tengo un sensor BLE que registra la temperatura ambiente a lo largo del tiempo. Siempre 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 interfaz gráfica de usuario (al menos no después de la configuración se hace). Pero, ¿cómo debería funcionar en segundo plano sin agotar la batería, pero todavía me dan una buena oportunidad de conectar el dispositivo rápidamente una vez que está en el rango?

Pregunta:

¿Necesito establecer un temporizador y activar la aplicación de vez en cuando y luego iniciar manualmente el escaneo? Qué tipo de intervalos debería elegir. ¿Cuánto tiempo puedo dejar el escáner funcionando sin afectar negativamente a la batería?

Posible solución:

Esto es lo que se me ha ocurrido lejos.

  • Una actividad de configuración para establecer los intervalos y dispositivos para buscar
  • La actividad de configuración configurará un WakefulBroadcastReceiver similar al Scheduler example
  • Cuando el receptor recibe el evento onReceive, inicio un servicio de escaneo BLE (que he escrito) como un servicio wakeful.
  • 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 wakeful.

Esto funciona, pero no estoy seguro de que sea la mejor manera. Tampoco sé cuán pequeños intervalos puedo tener y aún así evitar destruir la duración de la batería. Lo que me gustaría es empezar a escanear cada dos minutos, escaneando durante 10-20 segundos. Pero me temo que sería bastante frecuente para despertar el dispositivo?

Author: Vegar Westerlund, 2013-11-11

1 answers

Esta funcionalidad se ha movido a la biblioteca de baliza de Android de código abierto que:

  • Despierta/inicia tu aplicación cuando se detecten iBeacons que coincidan con un patrón deseado

  • Realice el escaneo de balizas en segundo plano incluso si el usuario aún no ha iniciado su aplicación

  • Reduzca la velocidad de escaneo automáticamente en segundo plano a 30 segundos cada cinco minutos para ahorrar batería. (Tiempo configurable.)

Código los ejemplos se muestran aquí

Si su dispositivo BLE no es una baliza, aún podría usar esta biblioteca para lograr esto haciendo que su sensor también transmita como una baliza y luego, después de que se detecte, se conecte al servicio principal.

 19
Author: davidgyoung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-20 05:21:34