Saltar al contenido principal

🤖 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 los BroadcastReceivers para 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 Broadcast con la información recibida (código, timestamp, nombre del bastón) para que MainActivity la 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: LogLocalManager guarda eventos como cambios de red, errores de API o lecturas de bastón en un archivo JSON local.
  • 🧭 Envío Programado: EnviarLogsWorker (basado en WorkManager) se ejecuta periódicamente 🕒.
  • 🚀 Sincronización: Lee los logs del archivo, los envía al endpoint /ACCESS/RegistrarLogsLote y, 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 📶💪.

Vista previa de la app Android