Retos técnicos en la captura de datos móviles

Mientras seguimos trabajando en el análisis de toda la información de la que hablamos en posts anteriores, creemos que es conveniente poner de manifiesto la dificultad que representa la recolección de algunos de estos datos. Concretamente, nos referimos a esos datos provenientes de los sensores del teléfono inteligente y que tenemos que recopilar de forma continua: actividad física, red, luz, ruido, estado de la pantalla, etc.
De todos es sabido que existe una gran variedad de compañías que fabrican teléfonos inteligentes (Samsung, Huawei, Xiaomi, etc.) y que cada una de ellas ofrece al usuario diferentes modelos. Samsung, por ejemplo, fabrica decenas de modelos diferentes. También muchos sabrán que existen varios sistemas operativos que gestionan los recursos de estos teléfonos inteligentes, siendo los más utilizados en la actualidad Android (con aproximadamente un 71% del mercado español) e iOS (un 28%).
Si a alguien le parece poca esta diversidad, quizás cambie de opinión si considera que para cada sistema operativo concreto existen diferentes versiones que co-existen en un mismo periodo de tiempo, cada una con sus propias funcionalidades (la versión 13 de Android ha sido publicada hace tan solo unos días). Finalmente, para poner la guinda a este "pastel de teléfonos inteligentes diferentes", cada fabricante le suele añadir una capa adicional propia al sistema operativo utilizado, de tal forma que aunque dos teléfonos móviles utilicen, por ejemplo, la misma versión de Android, ambos pueden tener una interfaz de usuario y una gestión de recursos diferente (especialmente aquellos relacionados con el ahorro de energía).
En este contexto se plantea el desarrollo de la app móvil de POSTCOVID-AI, una aplicación que debe ser capaz de medir los datos de los sensores de todos estos teléfonos inteligentes de una forma continua. Algunas de las decisiones más importantes que hemos tomado para su desarrollo son:
- Utilizar como lenguaje de programación Flutter (desarrollado por Google). Los programas escritos en Flutter tienen la ventaja de poder ser usados en múltiples plataformas que usan diferentes sistemas operativos, entre las que se encuentran precisamente Android e iOS.
- Usar bibliotecas de Flutter que sean compatibles con el mayor número posible de sistemas operativos actualmente utilizados por los teléfonos móviles.
A pesar de que estas decisiones parece que resuelven todos nuestros problemas, la experiencia nos ha demostrado que no es oro todo lo que reluce. Recordemos que necesitamos una aplicación que esté recopilando de forma continua la información de una gran cantidad de sensores del teléfono móvil. Obviamente, estas medidas deben realizarse de forma transparente al usuario, por lo que esta parte de la aplicación debe ejecutarse de forma silenciosa en segundo plano de las aplicaciones que esté usando el usuario, sin molestarlo. Y esto supone un problema por varios motivos:
- Estos procesos se ejecutan sin "interfaz gráfica", es decir, que no tiene una vía fácil para poder comunicarse con el usuario. En nuestro caso, la aplicación desarrollada tiene una parte con interfaz gráfica que solo aparece al comienzo del estudio. Solo es en ese momento en el que debemos aprovechar para solicitar el permiso del usuario para poder acceder a la información de los sensores del teléfono inteligente.
- A los sistemas operativos no les gusta que haya procesos de este tipo porque podrían tratarse de procesos maliciosos que estén espiando al usuario y, además, pueden suponer un alto consumo energético. A iOS, de hecho, no le gusta nada, por lo que no permite que aplicaciones desconocidas (como la nuestra) puedan utilizar este tipo de procesos durante mucho tiempo. La única alternativa en este caso sería tener un temporizador que arranque la aplicación silenciosa cada cierto tiempo pero, de nuevo, las optimizaciones de energía que añade iOS hacen que la frecuencia con la que se pueda hacer esto sea demasiado baja y, encima, muy poco fiable. Esto nos ha obligado a descartar, de momento, los iPhone de nuestro estudio.
En el caso de Android, sí ha sido posible adoptar esta solución, aunque tampoco lo ha puesto fácil: la aplicación no puede descargarse de Google Play Store debido a sus “complejas” características y los permisos para poder permitir que la aplicación silenciosa pueda funcionar sin restricciones y que pueda ejecutarse cada vez que arranque el teléfono móvil, en muchos casos, deben activarse manualmente por el usuario. Para compensar esta circunstancia hemos redactado un sencillo manual de instrucciones para la instalación de la aplicación. Y teniendo en cuenta la enorme diversidad de fabricantes, modelos y versiones de Android que hemos comentado al principio... solamente diremos al respecto que, como decía Michael Ende en “La historia interminable”: Esa es otra historia y debe ser contada en otra ocasión.