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 restringida y a Internet: 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) 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 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 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:
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 mantienen la conexión existente, y solo se desconectan de la red anterior cuando se conectan correctamente a la nueva red Wi-Fi y tienen 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 se guardó una contraseña de Wi-Fi incorrecta 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, 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 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 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 que inicia el usuario usan el flujo de corte antes de la conexión heredado, 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 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 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 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 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 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 mediante la API de WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Para permitir que un dispositivo se conecte a redes Wi-Fi restringidas secundarias, sigue estos pasos:
Agrega sugerencias de redes Wi-Fi con
setOemPaid
osetOemPrivate
configurado como verdadero.En
ConnectivityManager
, archiva 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 una 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 mediante 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 duales a las bandas duales 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.Usando
ConnectivityManager
, crea unNetworkRequest
con la capacidadNET_CAPABILITY_INTERNET
.Agrega el especificador a la solicitud de red junto con una instancia de
NetworkCallback
para hacer un 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 del 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 de 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 puede conectarse al mismo SSID (ya sea 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. En la siguiente lista, se enumeran estas características fundamentales:
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 acceder 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ínculos 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 fabricación antes de la ruptura. 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:- Se prefiere 2x2+2x2 DBS si está disponible.
- Evita la DBS de 1 × 1 + 1 × 1 si es posible 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, 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.