Simultaneidad de STA/STA de Wi-Fi

Android 12 presenta simultaneidad de STA/STA de Wi-Fi, que permite que los dispositivos se conecten a dos redes Wi-Fi de forma simultánea. Esta función opcional habilita las siguientes funciones.

  • Hacer antes de la pausa: El dispositivo se conecta a una nueva red Wi-Fi antes de interrumpir la conexión existente. Esto brinda transiciones más fluidas cuando alternas entre redes Wi-Fi
  • Conexión simultánea a Internet y solo local: El dispositivo se conecta a una red solo local sin interrumpir la conexión principal que proporciona Internet.
  • Conexión simultánea a Internet y restringida: El dispositivo se conecta a una red restringida (disponible solo para ciertas apps con privilegios) sin interrumpir la conexión principal del dispositivo que proporciona Internet.
  • (Android 13 o versiones posteriores) Varias redes simultáneas con conexión a Internet: El dispositivo se conecta a dos redes sin restricciones y disponibles para todas las apps, y proporciona conectividad a Internet.

En esta página, se describe el comportamiento del dispositivo cuando la función está habilitada y los detalles de implementación para los fabricantes y proveedores de dispositivos.

Implementación

Los dispositivos deben admitir lo siguiente para implementar la simultaneidad de STA/STA de Wi-Fi:

  • El chip o firmware de Wi-Fi debe admitir dos conexiones STA simultáneas. El firmware debe admitir todas las combinaciones de canales y bandas para ambas conexiones. Para evitar problemas de rendimiento, te recomendamos usar un chip de Wi-Fi compatible con DBS de 2x2 + 2x2.

  • El dispositivo debe admitir las siguientes APIs en la implementación de AIDL o HIDL de IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • La combinación de interfaces Wi-Fi del HAL debe tener dos interfaces de STA simultáneas expuestas con un formato de especificación como [{STA} <= 2, ...]. Para obtener más información, consulta Simultaneidad de varias interfaces de Wi-Fi.

Si se cumplen esos requisitos previos, implementa la simultaneidad de STA/STA de Wi-Fi de la siguiente manera:

  1. Habilita una o más funciones de forma individual con las superposiciones de recursos del tiempo de ejecución (inhabilitadas de forma predeterminada).

    • Hacer antes de la pausa: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Conexión simultánea a Internet y solo local: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Conexión simultánea a Internet y restringida: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Varias redes simultáneas con conexión a Internet: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Valida cada implementación como se describe en las secciones respectivas.

Para admitir mejor la simultaneidad de STA/STA de Wi-Fi, te recomendamos que los frameworks y las apps personalizados por el OEM usen el método NetworkCallback#onCapabilitiesChanged() en lugar de WifiManager#getConnectionInfo(), que solo muestra WifiInfo para una sola red y dejó de estar disponible en Android 12. Para obtener más información, consulta API de Wi-Fi Network Request para la conectividad entre pares.

Preparación antes del descanso

La función make-before-break permite que los dispositivos se conecten a una red Wi-Fi nueva mientras mantiene la conexión de red Wi-Fi existente. Solo se desconectan de la red anterior cuando se conecta correctamente a la nueva red Wi-Fi y tiene acceso a Internet.

El caso de uso del proceso de hacer antes de interrumpir aborda los siguientes problemas en Android 11 o versiones anteriores, en los que el dispositivo debe desconectarse de la red Wi-Fi existente antes de conectarse a una nueva red (se interrumpe antes de hacer).

  • Cuando se conecta a una red nueva, es posible que el dispositivo descubra que se guardó una contraseña de Wi-Fi incorrecta o que la red nueva no tiene acceso a Internet. De esta manera, se fuerza al dispositivo a volver a la red anterior, lo que lleva a una cantidad significativa de tiempo sin conectividad Wi-Fi.

  • La red antigua se desconecta de manera abrupta, lo que significa que todos los sockets se cierran. A menudo, las apps no reaccionan bien a una pérdida repentina de conectividad, y esto puede provocar que el usuario experimente unos segundos sin conexión a Internet hasta que la nueva conexión se establezca por completo.

  • La red predeterminada cambia dos veces, de la red Wi-Fi anterior a la red móvil, y luego de la red móvil a la nueva. Esto hace que las apps reaccionen dos veces a los cambios de red. Además, el dispositivo debe usar datos móviles durante un período breve.

El flujo se usa antes de la pausa solo se usa para conmutadores de red Wi-Fi automáticos que inicia el SO. Los interruptores de red iniciados por el usuario usan el flujo heredado de interrupción antes de realizar, en el que la red anterior se desconecta por completo antes de que se conecte la red nueva. En algunos casos, el flujo de interrupción antes de realizar se usa incluso en conmutadores automáticos que inicia el SO, por ejemplo, cuando se cambia entre dos redes configuradas para usar la dirección MAC de fábrica.

Las apps pueden verificar si este caso de uso es compatible con el dispositivo a través de la API de WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Valida el paso previo a la pausa

Para validar tu implementación, activa un cambio automático de red Wi-Fi (asegúrate de que esté disponible una red con una intensidad de señal más fuerte que la red conectada) y verifica que el dispositivo mantenga la conexión existente mientras se conecta a la red nueva. Para ver el estado de ambas interfaces Wi-Fi y verificar que ambas estén conectadas, usa el siguiente comando.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Si la red nueva no tiene conectividad, el dispositivo intenta conectarse a ella mientras mantiene la conexión con la red existente y anula el intento cuando detecta que la red nueva no tiene Internet. Luego, el dispositivo continúa usando la conexión existente como red Wi-Fi principal.

Conexión simultánea a Internet y solo local

La función de conexión simultánea a Internet y solo local permite que los dispositivos se conecten a una conexión solo local, como una conexión a un dispositivo de IoT, de forma simultánea con la red principal de Internet. Esta función mejora la experiencia del usuario cuando se conecta directamente a dispositivos de IoT, como cámaras, lo que es posible a través de la API de WifiNetworkSpecifier que se agregó en Android 10.

En Android 11 y versiones anteriores, los dispositivos se desconectan de la red Wi-Fi principal cuando se conectan a un dispositivo de IoT, lo que provoca una pérdida de conectividad a Internet (a menos que el dispositivo tenga otro tipo de transporte disponible, como datos móviles).

Las apps pueden comprobar si esta función es compatible con el dispositivo mediante la API de WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Para obtener más información sobre los cambios en la función simultánea de conexión a Internet y solo local en Android 12, consulta API de Wi-Fi Network Request para la conectividad entre pares.

Valida la conexión solo local y a Internet.

Para validar esta función, usa la prueba MultiStaConcurrencyWifiNetworkSpecifierTest del CTS.

Conexión a Internet y restringida simultánea

La función de conexión simultánea y restringida a Internet permite que el dispositivo se conecte de forma simultánea a una red Wi-Fi principal para el usuario y a una red Wi-Fi restringida que solo está disponible para apps seleccionadas.

Las apps pueden comprobar si esta función es compatible con el dispositivo mediante la API de WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

Para permitir que un dispositivo se conecte a redes Wi-Fi restringidas secundarias, sigue estos pasos:

  1. Agrega sugerencias de redes Wi-Fi con setOemPaid o setOemPrivate configurado como verdadero.

  2. En ConnectivityManager, envía un NetworkRequest con las capacidades correspondientes:

Cuando el dispositivo detecta los resultados del análisis con una red que coincide con la sugerencia privada o pagada por el OEM, se conecta automáticamente a él como una red secundaria.

Valida la conexión simultánea a Internet y restringida

Para validar esta función, usa la prueba MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest del CTS.

Conexión simultánea a Internet en varias redes

Disponible para Android 13 o versiones posteriores, la función de conexión simultánea a Internet en varias redes permite que el dispositivo se conecte de forma simultánea a dos redes (PA), que no tienen restricciones (todas las apps tienen acceso) y proporcionan acceso a Internet.

Las apps pueden comprobar si esta función es compatible con el dispositivo mediante el método WifiManager#isStaConcurrencyForMultiInternetSupported().

Si la función es compatible, las apps con privilegios pueden habilitar la función con el método WifiManager#setStaConcurrencyForMultiInternetMode(int mode). La función tiene los siguientes modos:

Para consultar el modo de función activo en este momento, usa el método WifiManager#getStaConcurrencyForMultiInternetMode().

Cuando la función esté habilitada, sigue estos pasos para solicitar una red Wi-Fi adicional que proporcione Internet.

  1. Crea un especificador de red Wi-Fi con WifiNetworkSpecifier.Builder. Elige una banda para el especificador mediante el método setBand(). No especifiques el SSID o BSSID, ya que el framework de Wi-Fi selecciona la red adicional para la banda especificada.

  2. Usando ConnectivityManager, crea un NetworkRequest con la capacidad NET_CAPABILITY_INTERNET.

  3. Agrega el especificador a la solicitud de red junto con una instancia de NetworkCallback para hacer un seguimiento del estado de la solicitud y emitirla a ConnectivityManager. Si una red guardada con la banda solicitada está disponible en el resultado del análisis y la conexión a la red es correcta, se invoca a NetworkCallback.onAvailable() en el objeto de devolución de llamada.

Valida varias redes simultáneas con conexión a Internet

Para validar esta función, usa la siguiente prueba del CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Lineamientos del chip Wi-Fi del proveedor

En el caso de los proveedores de chips Wi-Fi, usa los siguientes lineamientos para admitir la simultaneidad de STA/STA de Wi-Fi.

El chip Wi-Fi debe admitir conexiones STA simultáneas dobles. Esto significa que admite lo siguiente:

  • Cada interfaz de STA tiene un MAC único que el framework puede programar.
  • La interfaz de STA secundaria se puede crear y destruir de forma dinámica.
  • Cada STA puede conectarse a un SSID diferente (ya sea dentro de la misma banda o en una diferente).
  • Cada STA puede conectarse al mismo SSID (ya sea dentro de la misma banda o en una diferente). Los dos STA nunca deben estar conectados al mismo BSSID.

Las funciones esenciales deben operar por interfaz y deben estar disponibles en la interfaz principal. En la siguiente lista, se enumeran estas características fundamentales:

  • El roaming debe ser compatible al menos en la interfaz principal (configurada mediante IWifiChip.setMultiStaPrimaryConnection()). Si el roaming es compatible con ambas interfaces, las decisiones sobre una conexión no deben entrar en conflicto con la segunda conexión simultánea. Por ejemplo, una interfaz no debe acceder al BSSID de la otra conexión.

  • APF (y otras descargas, como ARP y NS) deben ser compatibles, al menos, en la interfaz principal (configurada con IWifiChip.setMultiStaPrimaryConnection()).

  • Las estadísticas de la capa de vínculos deben operar por interfaz.

Las siguientes son implementaciones recomendadas de chips de Wi-Fi para diferentes situaciones de simultaneidad:

  • El chip Wi-Fi debe permitir que el framework llame a IWifiChip.setMultiStaUseCase() con una de las siguientes constantes para especificar la función actual:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Especifica la función Make-Antes-Break. La calidad de la conexión principal debe priorizarse por sobre la conexión secundaria.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: Especifica la conexión simultánea a Internet y solo local o la función conexión a Internet y restringida simultáneamente. La calidad de ambas conexiones debe priorizarse por igual.
  • Debido a que los STA simultáneos duales pueden generar modos de operación MCC, SCC y DBS, la implementación del proveedor debe elegir la mejor configuración de radio cuando el framework llame a IWifiChip.setMultiStaUseCase() para indicar la función. Los siguientes son lineamientos generales:

    • Se prefiere 2x2+2x2 DBS si está disponible.
    • Si es posible, evita los DBS de 1 x 1 + 1 x 1 debido al impacto excesivo en la calidad de la conexión. Prefiere MCC.
    • El controlador o el firmware deben poder configurar el ciclo de trabajo de MCC para las diversas funciones. El framework no establece el ciclo de trabajo de MCC directamente, sino que consulta esta información mediante StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Si usas MCC, te recomendamos los siguientes ciclos de trabajo entre la conexión principal y la secundaria:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% primaria, 30% secundaria.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% primaria, 50% secundaria.