Fase 1
Primer prototipo nativo Android
Kotlin, Android Studio, solo APIs oficiales. Esta página es la especificación que se entrega al equipo nativo; el prototipo web no compila una app Android.
PROTOTIPO WEB / ESPECIFICACIÓNNO DEMOSTRADO EN HARDWARE
Capas del proyecto
| Capa | Responsabilidad | Implementación Android |
|---|---|---|
| PeerDiscovery | Encontrar y anunciar dispositivos | BLE advertising y scanning, Wi-Fi Direct, Wi-Fi Aware |
| PeerTransport | Canal de mensajes entre teléfonos | GATT y sockets de Wi-Fi Direct |
| SecurityManager | Identidad efímera y cifrado | X25519, HKDF, AES-GCM, Keystore |
| SessionManager | Estados de la sesión y temporizador | Máquina de estados y servicio en primer plano |
| NetworkConfiguration | Guiar el hotspot y unir al solicitante | Intent de Ajustes y WifiNetworkSpecifier |
| FairUseManager | Límites y avisos de uso justo | Reglas locales |
| LocalEventStore | Historial y cola de eventos | SQLite cifrada |
| SyncManager | Envío idempotente al recuperar red | WorkManager |
Las capas se definen como interfaces: la lógica de negocio no conoce ninguna API concreta del sistema, lo que permite reutilizar el mismo diseño en iOS.
Flujo de 19 pasos
- 1El solicitante abre Conecta sin Internet
- 2Elige el motivo de la ayuda
- 3Elige cuántos MB y cuántos minutos necesita
- 4La app empieza a buscar por radio
- 5El ayudante ya estaba anunciándose como disponible
- 6Los dos teléfonos se descubren
- 7Se muestra alias efímero, distancia aproximada y oferta
- 8El solicitante elige a un ayudante y envía la solicitud
- 9El ayudante recibe la solicitud con motivo y límites
- 10El ayudante acepta o rechaza en su teléfono
- 11Autenticación mutua y handshake cifrado
- 12Se acuerdan límites y consentimiento explícito
- 13La app abre el panel de compartir conexión del sistema
- 14El ayudante activa el compartir en Ajustes
- 15Se transmite cifrada la información de conexión, de un solo uso
- 16El solicitante recibe el diálogo del sistema para unirse
- 17Se comprueba que hay Internet REAL
- 18Sesión activa con temporizador, estimado y botón de terminar
- 19Fin, borrado de secretos y registro local en la cola
APIs oficiales
- BluetoothLeAdvertiser, BluetoothLeScanner, BluetoothGattServer
- WifiP2pManager (Wi-Fi Direct) y WifiAwareManager donde el hardware lo soporte
- WifiNetworkSpecifier y WifiNetworkSuggestion para unirse
- EasyConnectStatusCallback (Wi-Fi Easy Connect / DPP) como plan B
- Settings.ACTION_WIRELESS_SETTINGS o el panel de tethering para guiar al ayudante
- ConnectivityManager y NetworkCapabilities para comprobar Internet real
- AndroidKeyStore, WorkManager, servicio en primer plano de tipo connectedDevice
Permisos
- BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT
- ACCESS_FINE_LOCATION en versiones donde el escaneo lo exige, o neverForLocation cuando aplique
- NEARBY_WIFI_DEVICES en Android 13 o superior
- ACCESS_WIFI_STATE, CHANGE_WIFI_STATE, ACCESS_NETWORK_STATE
- FOREGROUND_SERVICE y FOREGROUND_SERVICE_CONNECTED_DEVICE
- POST_NOTIFICATIONS para avisar de solicitudes entrantes
Lo que este prototipo NO hará
- Encender el compartir de conexión por su cuenta.
- Leer el nombre o la clave del hotspot del sistema.
- Cortar el tráfico del invitado al llegar al límite.
- Sortear una restricción del operador.
La transferencia cifrada de la credencial previamente registrada por el ayudante es una hipótesis técnica que debe validarse en hardware antes de darse por buena.
HIPÓTESIS TÉCNICA — REQUIERE VALIDACIÓN EN HARDWARE
Compatibilidad a comprobar
| Fabricante | Riesgo principal | Estado |
|---|---|---|
| Pixel | Referencia del comportamiento estándar | NO PROBADO |
| Samsung | Restricciones de batería sobre el anuncio en segundo plano | NO PROBADO |
| Xiaomi | Autoarranque y ahorro de energía agresivos | NO PROBADO |
| Otros | Paneles de Ajustes distintos según capa del fabricante | NO PROBADO |