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

CapaResponsabilidadImplementación Android
PeerDiscoveryEncontrar y anunciar dispositivosBLE advertising y scanning, Wi-Fi Direct, Wi-Fi Aware
PeerTransportCanal de mensajes entre teléfonosGATT y sockets de Wi-Fi Direct
SecurityManagerIdentidad efímera y cifradoX25519, HKDF, AES-GCM, Keystore
SessionManagerEstados de la sesión y temporizadorMáquina de estados y servicio en primer plano
NetworkConfigurationGuiar el hotspot y unir al solicitanteIntent de Ajustes y WifiNetworkSpecifier
FairUseManagerLímites y avisos de uso justoReglas locales
LocalEventStoreHistorial y cola de eventosSQLite cifrada
SyncManagerEnvío idempotente al recuperar redWorkManager

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

  1. 1El solicitante abre Conecta sin Internet
  2. 2Elige el motivo de la ayuda
  3. 3Elige cuántos MB y cuántos minutos necesita
  4. 4La app empieza a buscar por radio
  5. 5El ayudante ya estaba anunciándose como disponible
  6. 6Los dos teléfonos se descubren
  7. 7Se muestra alias efímero, distancia aproximada y oferta
  8. 8El solicitante elige a un ayudante y envía la solicitud
  9. 9El ayudante recibe la solicitud con motivo y límites
  10. 10El ayudante acepta o rechaza en su teléfono
  11. 11Autenticación mutua y handshake cifrado
  12. 12Se acuerdan límites y consentimiento explícito
  13. 13La app abre el panel de compartir conexión del sistema
  14. 14El ayudante activa el compartir en Ajustes
  15. 15Se transmite cifrada la información de conexión, de un solo uso
  16. 16El solicitante recibe el diálogo del sistema para unirse
  17. 17Se comprueba que hay Internet REAL
  18. 18Sesión activa con temporizador, estimado y botón de terminar
  19. 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

FabricanteRiesgo principalEstado
PixelReferencia del comportamiento estándarNO PROBADO
SamsungRestricciones de batería sobre el anuncio en segundo planoNO PROBADO
XiaomiAutoarranque y ahorro de energía agresivosNO PROBADO
OtrosPaneles de Ajustes distintos según capa del fabricanteNO PROBADO