Android 12 presenta la simultaneidad de STA/STA de Wi-Fi, que permite que los dispositivos se conecten a dos redes Wi-Fi de manera simultánea. Esta función opcional habilita las siguientes funciones.
- Conexión antes de la interrupción: El dispositivo se conecta a una red Wi-Fi nueva antes de interrumpir la conexión existente. Esto genera transiciones más fluidas cuando cambias de una red Wi-Fi a otra.
- Conexión simultánea a Internet y solo local: El dispositivo se conecta a una red solo local sin interrumpir la conexión principal a 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 a Internet del dispositivo.
- (Android 13 o versiones posteriores) Conexión simultánea a Internet en varias redes: El dispositivo se conecta a dos redes, ambas sin restricciones y disponibles para todas las apps, y proporciona conectividad a Internet.
En esta página, se describe el comportamiento del dispositivo cuando esta 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 que uses un chip Wi-Fi compatible con DBS de 2 × 2 + 2 × 2.
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 de Wi-Fi de HAL debe tener dos interfaces 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 haciendo lo siguiente:
Habilita una o más funciones de forma individual con las superposiciones de recursos del entorno 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
- Hacer antes de la pausa:
Valida cada implementación como se describe en sus respectivas secciones.
Para admitir mejor la simultaneidad de STA/STA de Wi-Fi, recomendamos que los frameworks y las apps personalizados por 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.
Hacer antes de romper
La función make-before-break permite que los dispositivos se conecten a una nueva red Wi-Fi mientras se mantiene la conexión existente, y solo se desconecta de la red anterior cuando se conecta correctamente a la nueva red Wi-Fi y tiene acceso a Internet.
El caso de uso de conexión antes de la desconexión 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 (conexión antes de la desconexión).
Cuando se conecta a una red nueva, es posible que el dispositivo descubra que tiene una contraseña de Wi-Fi incorrecta guardada o que la red nueva no tiene acceso a Internet. Esto obliga al dispositivo a volver a la red anterior, lo que genera una gran cantidad de tiempo sin conectividad Wi-Fi.
La red anterior se desconecta de forma abrupta, lo que significa que se cierran todos los sockets. A menudo, las apps no reaccionan bien a una pérdida repentina de conectividad, lo que puede provocar que el usuario experimente unos segundos sin conectividad a Internet hasta que se establezca por completo la nueva conexión.
La red predeterminada cambia dos veces, de la red Wi-Fi anterior a la red celular y, luego, de la red celular a la nueva red Wi-Fi. Esto hace que las apps reaccionen a los cambios de red dos veces. El dispositivo también debe pasar un período breve usando datos móviles.
El flujo de conexión antes de la desconexión solo se usa para los cambios automáticos de red Wi-Fi que inicia el SO. Los interruptores de red que inicia el usuario usan el flujo heredado de corte antes de la conexión, en el que la red anterior se desconecta por completo antes de que se conecte la nueva. En algunos casos, el flujo de interrupción antes de la creación se usa incluso en los interruptores 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 mediante la API de WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Valida la creación antes de la pausa
Para validar tu implementación, activa un interruptor de red Wi-Fi automático (asegúrate de que haya 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 y, al mismo tiempo, mantiene la conexión con la red existente. Luego, aborta el intento cuando detecta que la red nueva no tiene Internet. Luego, el dispositivo continúa usando la conexión existente como la 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 la IoT, de forma simultánea con la red principal que proporciona Internet. Esta función mejora la experiencia del usuario cuando se conecta directamente a dispositivos de la 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 la IoT, lo que genera 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 verificar si esta función es compatible con el dispositivo usando la API de WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Para obtener más información sobre los cambios en la función de conexión simultánea a Internet y solo local en Android 12, consulta API de Wi-Fi Network Request para la conectividad entre pares.
Valida la conexión a Internet y solo local
Para validar esta función, usa la
prueba de CTS de MultiStaConcurrencyWifiNetworkSpecifierTest
.
Conexión simultánea a Internet y restringida
La función de conexión simultánea a Internet y restringida 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 verificar si esta función es compatible con el dispositivo usando la API de WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Para permitir que un dispositivo se conecte a redes Wi-Fi secundarias restringidas, sigue estos pasos:
Agrega sugerencias de redes Wi-Fi con
setOemPaid
osetOemPrivate
configurado como verdadero.En
ConnectivityManager
, envía unNetworkRequest
con las capacidades correspondientes:NET_CAPABILITY_OEM_PAID
parasetOemPaid
NET_CAPABILITY_OEM_PRIVATE
parasetOemPrivate
Cuando el dispositivo detecta resultados de análisis con una red que coincide con la sugerencia privada o paga del OEM, se conecta automáticamente a ella como red secundaria.
Valida la conexión simultánea restringida y a Internet
Para validar esta función, usa la
prueba de CTS de MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
.
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 simultáneamente a dos redes (PA), que no tendrán restricciones (todas las apps tendrán acceso) y ofrecerán acceso a Internet.
Las apps pueden verificar si esta función es compatible con el dispositivo con el método WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Si la función es compatible, las apps con privilegios pueden habilitarla con el método WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. La función tiene los siguientes modos:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Restringe las conexiones dobles a las bandas dobles de un AP de DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Se conecta a APs arbitrarios en los que las conexiones individuales usan diferentes bandas.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Inhabilita la función.
Para consultar el modo de función activo actualmente, 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.
Crea un especificador de red Wi-Fi con
WifiNetworkSpecifier.Builder
. Elige una banda para el especificador con el métodosetBand()
. No especifiques el SSID ni el BSSID, ya que el framework de Wi-Fi selecciona la red adicional para la banda especificada.Con
ConnectivityManager
, crea unNetworkRequest
con la capabilityNET_CAPABILITY_INTERNET
.Agrega el especificador a la solicitud de red junto con una instancia
NetworkCallback
para realizar el seguimiento del estado de la solicitud y envía la solicitud aConnectivityManager
. Si hay una red guardada con la banda solicitada disponible en el resultado del análisis y la conexión a la red es exitosa, se invoca aNetworkCallback.onAvailable()
en el objeto de devolución de llamada.
Valida la conexión simultánea a Internet en varias redes
Para validar esta función, usa la siguiente prueba de CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Lineamientos para chips Wi-Fi de proveedores
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 dos conexiones STA simultáneas. Esto significa que es compatible con lo siguiente:
- Cada interfaz STA tiene un MAC único que el framework puede programar.
- La interfaz STA secundaria se puede crear y destruir de forma dinámica.
- Cada STA se puede conectar a un SSID diferente (dentro de la misma banda o en una diferente).
- Cada STA se puede conectar al mismo SSID (dentro de la misma banda o en una diferente). Los dos STAs nunca deben estar conectados al mismo BSSID.
Las funciones críticas deben funcionar por interfaz y deben estar disponibles en la interfaz principal. La siguiente es una lista de estas funciones críticas:
El roaming debe admitirse al menos en la interfaz principal (configurada con
IWifiChip.setMultiStaPrimaryConnection()
). Si el roaming se admite en ambas interfaces, las decisiones de una conexión no deben entrar en conflicto con la segunda conexión simultánea. Por ejemplo, una interfaz no debe realizar roaming al BSSID de la otra conexión.El APF (y otras descargas, como ARP y NS) deben admitirse, al menos, en la interfaz principal (configurada con
IWifiChip.setMultiStaPrimaryConnection()
).Las estadísticas de la capa de vínculo deben operar por interfaz.
A continuación, se muestran las implementaciones recomendadas de chips 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 de preparación antes de la pausa. La calidad de la conexión principal debe priorizarse sobre la conexión secundaria.DUAL_STA_NON_TRANSIENT_UNBIASED
: Especifica la función de conexión simultánea a Internet y solo local o la de conexión simultánea a Internet y restringida. La calidad de ambas conexiones debe priorizarse por igual.
Debido a que los STA dobles simultáneos pueden generar modos de operación de 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:- Si está disponible, se prefiere la DBS de 2 × 2 + 2 × 2.
- Evita la DBS de 1 × 1 + 1 × 1 si es posible debido al impacto excesivo en la calidad de la conexión. En su lugar, prefiere MCC.
- El controlador o el firmware deben poder configurar el ciclo de trabajo del MCC para las diversas funciones. El framework no establece el ciclo de trabajo del MCC directamente, pero consulta esta información con
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. Si usas MCC, te recomendamos los siguientes ciclos de trabajo entre las conexiones principales y secundarias:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% primario, 30% secundario.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% primario, 50% secundario.