Noticia Creación de una aplicación de salud y bienestar: Integración de la API de Google Health Connect en Kotlin

Creación de una aplicación de salud y bienestar Integración de la API de Google Health Connect en Kotlin


Si te mola el desarrollo de apps y quieres meterte en el mundo del bienestar, seguramente te habrás dado cuenta de que gestionar datos de salud suele ser un auténtico quebradero de cabeza. Entre que cada fabricante tiene su propia forma de hacer las cosas y que la privacidad es un tema sagrado, crear una solución coherente no es tarea fácil para cualquier programador de Android.

Aquí es donde entra en juego Health Connect, una propuesta de Google y Samsung que busca poner orden al caos. Básicamente, actúa como un punto de encuentro centralizado donde diversas aplicaciones pueden leer y escribir datos de actividad física y salud, asegurando que el usuario mantenga siempre las riendas de su información privada sin complicaciones.

¿Qué es exactamente Health Connect y cómo se organiza?​


Para que nos entendamos, Health Connect es una plataforma diseñada específicamente para que los desarrolladores no tengamos que reinventar la rueda cada vez que queremos acceder a los pasos o las pulsaciones de un usuario. Ofrece una interfaz consolidada y estándar que garantiza que la app se comporte igual en cualquier dispositivo Android compatible.

El sistema es bastante robusto y soporta más de 50 categorías de datos. No se queda solo en los pasos; hablamos de sueño, nutrición, medidas corporales y constantes vitales como la presión arterial o el ritmo cardíaco. Todo esto se guarda de forma encriptada en el propio dispositivo, lo que da una capa de seguridad extra muy potente.

En cuanto a su estructura interna, el ecosistema se divide en varios componentes clave:

  • App cliente: Es tu aplicación, la cual se vincula al SDK para poder hablar con la plataforma.
  • SDK de Health Connect: El puente técnico que permite la comunicación entre tu código y el sistema.
  • APK de Health Connect: El núcleo que gestiona los datos y los permisos directamente en el móvil.
  • Gestión de permisos y datos: Una interfaz donde el usuario puede ver qué apps tienen acceso y, si quiere, borrar registros o revocar permisos en un abrir y cerrar de ojos.

Preparando el terreno para el desarrollo en Kotlin​


Antes de tirar una sola línea de código, hay que tener claro que la disponibilidad de Health Connect varía según la versión de Android. A partir de Android 14 (API 34), la plataforma ya viene integrada en el framework del sistema, por lo que no tienes que instalar nada aparte. Sin embargo, si trabajas con Android 14 o versiones anteriores, el usuario deberá instalar la app de Health Connect desde la Play Store.

Para empezar la integración técnica, lo primero es añadir la dependencia necesaria en el archivo build.gradle. Generalmente, se utiliza la librería de Jetpack, como la implementación de connect-client. Una vez hecho esto, es fundamental declarar la visibilidad de Health Connect en el AndroidManifest.xml usando el elemento queries para que tu app reconozca el paquete de datos de salud.

Un detalle que se nos suele olvidar es que, por motivos de seguridad, el sistema requiere que el dispositivo tenga un bloqueo de pantalla activo (PIN, patrón o contraseña). Si el teléfono está abierto, no podrás acceder a los datos de Health Connect.

Dominando la gestión de permisos​


En el mundo de la salud, pedir permisos a lo loco es la mejor forma de que el usuario desinstale tu app. Google recomienda ser muy selectivo y solicitar solo los datos estrictamente necesarios. Si el usuario rechaza un permiso más de dos veces, el sistema bloqueará las solicitudes futuras, dejándote fuera del juego.

Para configurar esto, debes añadir cada permiso de lectura y escritura en el manifiesto. Por ejemplo, si necesitas el peso, usarás READ_WEIGHT y WRITE_WEIGHT. Además, es obligatorio implementar un filtro de intents para mostrar la política de privacidad cuando el usuario haga clic en el diálogo de permisos, ya sea para versiones antiguas de Android o para las más recientes.

Para solicitar los permisos dinámicamente, se utiliza el HealthConnectClient. El flujo ideal consiste en verificar si ya tienes los permisos mediante el método getGrantedPermissions() y, si no es así, lanzar la solicitud a través de un ActivityResultContract creado por el PermissionController.

Escritura y lectura de datos de salud​


Creación de una aplicación de salud y bienestar: Integración de la API de Google Health Connect en Kotlin


Cuando llega el momento de guardar información, como el peso de un usuario, debes crear un objeto específico (por ejemplo, WeightRecord). Es crucial manejar correctamente las unidades, utilizando clases como Mass.kilograms(), y definir siempre el desfase de la zona horaria para que los datos tengan sentido cronológico al leerlos.

Si lo que quieres es registrar una sesión de ejercicio, la cosa se pone más interesante. Una sesión es un intervalo de tiempo que puede englobar múltiples tipos de registros: la sesión de carrera en sí, los pasos acumulados, las calorías quemadas y una serie de muestras de frecuencia cardíaca. Todo esto se inserta masivamente usando insertRecords.

Para recuperar la información, se emplea el ReadRecordsRequest. Aquí puedes definir el rango de tiempo y filtrar por la aplicación de origen si solo quieres los datos que tu propia app escribió. Si necesitas datos estadísticos, como el promedio semanal de peso, puedes usar la API de agregaciones con AggregateRequest, que devuelve valores calculados sin tener que procesar cada registro individualmente.

Funciones avanzadas: Segundo plano, historial y cambios​


Hay casos donde necesitas que la app trabaje mientras el usuario no la está mirando. Para ello, existe el permiso READ_HEALTH_DATA_IN_BACKGROUND. Lo ideal es usar WorkManager para programar tareas que recuperen datos (como los pasos de las últimas 24 horas) de forma eficiente y sin drenar la batería.

Si tu app necesita analizar tendencias a largo plazo, deberás solicitar el permiso de lectura de datos históricos, que permite acceder a información de más de 30 días de antigüedad. Siempre es recomendable comprobar primero si la función está disponible en el dispositivo mediante getFeatureStatus() para evitar cierres inesperados.

Para mantener tu base de datos local sincronizada con Health Connect, la API de Differential Changes es la herramienta definitiva. Mediante un token de cambios, puedes preguntar al sistema: «¿qué ha cambiado desde la última vez que miré?». El sistema te devolverá una lista de inserciones o eliminaciones, permitiéndote actualizar tu interfaz sin tener que leer todo el historial nuevamente.

La integración de este ecosistema permite que aplicaciones de gigantes como Samsung Health, Google Fit y Fitbit convivan armoniosamente. Al final del día, el programador logra una sincronización fluida de datos mientras el usuario disfruta de una experiencia unificada donde su información de salud se mueve con él, independientemente del dispositivo o la marca que utilice.

Continúar leyendo...