🤖 Integración Android
📲 Introducción y Visión General
SIIB Móvil es una aplicación nativa para Android 🤖, desarrollada como un cliente dedicado del Sistema Integral de Información Beta (SIIB).
Su objetivo principal es facilitar la captura de datos en campo 🌾 mediante la integración con un lector de aretes RFID Bluetooth 🧠📶 (bastón electrónico), mostrando la información correspondiente en una interfaz web embebida 🌐.
Además, la aplicación está preparada para la administración de procesos futuros ⚙️, ampliando sus capacidades según las necesidades operativas del sistema.
🔒 Entorno Controlado y Seguridad
La aplicación está diseñada para funcionar en un entorno seguro y gestionado 🧩, implementando medidas que garantizan la integridad del uso en campo:
- 🔐 Modo Kiosko: restringe el dispositivo para uso exclusivo de la aplicación.
- ✅ Autorización de dispositivos: permite el acceso solo a equipos aprobados.
- 🛰️ Gestión remota: posibilita la supervisión y control centralizado de los dispositivos.
Estas características aseguran que SIIB Móvil se utilice únicamente para su propósito designado, manteniendo altos estándares de seguridad 🔒, confiabilidad ⚙️ y eficiencia operativa 🚀.
⚙️ Tecnologías Clave
SIIB Móvil integra un conjunto de tecnologías modernas del ecosistema Android 🤖 que garantizan rendimiento, estabilidad y conectividad eficiente.
- 💬 Lenguaje: Kotlin — lenguaje oficial de Android, orientado a la seguridad y productividad del código.
- 🧩 Arquitectura: Basada en Actividades y Servicios nativos de Android, asegurando una estructura modular y mantenible.
- 🖥️ Interfaz de Usuario: Implementada mediante WebView para la vista principal 🌐, complementada con componentes nativos para la barra de estado y el menú de navegación.
- 🔗 Conectividad:
- Bluetooth (SPP) para la comunicación con el bastón lector RFID 📶.
- Retrofit y OkHttp para el intercambio de datos con el API REST del servidor.
- ⚙️ Tareas en Segundo Plano:
- WorkManager para el envío programado de logs 🕒.
- Foreground Services para mantener la conexión persistente con el bastón y los “latidos” al servidor ❤️🔥.
Estas tecnologías permiten que SIIB Móvil mantenga un rendimiento óptimo, incluso en entornos de campo con conectividad limitada o intermitente 🌾📡.
🧩 Aplicación Móvil - Arquitectura y Componentes
La aplicación SIIB Móvil se estructura en torno a una actividad principal que actúa como orquestador 🧠 y varios servicios en segundo plano ⚙️ que manejan tareas persistentes y comunicación continua con el servidor.
🏗️ Componentes Principales
1️⃣ MainActivity.kt
Rol: Es el corazón y punto de entrada de la aplicación ❤️.
Responsabilidades:
- 🔁 Ciclo de Vida: Gestiona el inicio de la app, solicitando permisos y validando el dispositivo.
- 🖥️ UI Principal: Contiene el WebView donde se carga el sistema SIIB, junto con la barra superior y el menú lateral (DrawerLayout).
- 🎛️ Orquestador: Inicia los servicios (
BastonService,LatidoService), registra losBroadcastReceiverspara recibir datos del bastón y actualiza la interfaz en consecuencia. - 🔒 Gestión de Seguridad: Controla la pantalla de bloqueo si el dispositivo no está autorizado y activa/desactiva el modo Kiosko.
- 📋 Menú Dinámico: Solicita al servidor la configuración del menú lateral según el tipo de dispositivo y lo construye dinámicamente usando un
ExpandableListView.
2️⃣ BastonService.kt
Rol: Servicio en primer plano (Foreground Service) para la comunicación persistente con el bastón lector 🔄.
Responsabilidades:
- 📡 Conexión Bluetooth: Busca y se conecta automáticamente a dispositivos Bluetooth pareados cuyo nombre comience con
"AWR300". - 🧠 Lectura de Datos: Mantiene un hilo activo que escucha los códigos de arete recibidos por el socket Bluetooth.
- 🔔 Notificación Persistente: Muestra una notificación para evitar que Android detenga el servicio.
- 📤 Transmisión de Datos: Envía un
Broadcastcon la información recibida (código, timestamp, nombre del bastón) para queMainActivityla capture.
3️⃣ LatidoService.kt
Rol: Servicio en segundo plano que asegura la comunicación periódica con el servidor ⏱️.
Responsabilidades:
- ❤️🔥 Heartbeat (Latido): Cada 6 minutos envía una señal al endpoint
/ACCESS/LatidoYControl, informando al servidor que el dispositivo está activo. - 🧭 Recepción de Comandos: Procesa las respuestas del servidor, que pueden incluir acciones inmediatas como bloquear la tablet o forzar un reinicio.
4️⃣ UpdateHelper.kt
Rol: Objeto singleton encargado de la gestión de actualizaciones de la aplicación 🔄.
Responsabilidades:
- 🔍 Verificación: Compara la versión actual con la versión mínima definida en el servidor (
/ACCESS/CheckUpdate). - ⬇️ Descarga: Si hay una nueva versión, descarga el APK actualizado.
- 🧩 Instalación:
- 💤 Silenciosa (Modo Kiosko): Si la app tiene privilegios de Device Owner, instala automáticamente.
- 🙋 Manual: Si no, solicita permisos al usuario para instalar desde fuentes desconocidas.
5️⃣ Sistema de Logs (LogLocalManager.kt y EnviarLogsWorker.kt)
Rol: Sistema robusto para registrar y enviar eventos de la aplicación, incluso sin conexión 🌐.
Funcionamiento:
- 📝 Registro Local:
LogLocalManagerguarda eventos como cambios de red, errores de API o lecturas de bastón en un archivo JSON local. - 🧭 Envío Programado:
EnviarLogsWorker(basado enWorkManager) se ejecuta periódicamente 🕒. - 🚀 Sincronización: Lee los logs del archivo, los envía al endpoint
/ACCESS/RegistrarLogsLotey, si el envío es exitoso, limpia el archivo. Si no, conserva los registros para el siguiente intento.
🧠 En conjunto, estos componentes permiten que SIIB Móvil mantenga una operación continua, segura y autónoma, incluso en condiciones de red limitadas 📶💪.
