Android 12 presenta la simultaneidad de Wi-Fi STA/STA, que permite que los dispositivos se conecten a dos redes Wi-Fi simultáneamente. Esta característica opcional habilita las siguientes funciones.
- Hacer antes de interrumpir : el dispositivo establece una conexión a una nueva red Wi-Fi antes de interrumpir la conexión existente. Esto da como resultado transiciones más suaves al cambiar 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 de Internet del dispositivo.
- Conexión simultánea restringida y a Internet : el dispositivo se conecta a una red restringida (disponible solo para ciertas aplicaciones privilegiadas) sin interrumpir la conexión principal de Internet del dispositivo.
- (Android 13 o superior) Múltiples redes simultáneas con conexión a Internet : el dispositivo se conecta a dos redes, las cuales no tienen restricciones y están disponibles para todas las aplicaciones, y brindan conectividad a Internet.
Esta página describe el comportamiento del dispositivo cuando esta función está habilitada y los detalles de implementación para fabricantes y proveedores de dispositivos.
Implementación
Los dispositivos deben admitir lo siguiente para implementar la simultaneidad de Wi-Fi STA/STA:
El chip o firmware 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, recomendamos utilizar un chip Wi-Fi con capacidad DBS 2x2+2x2.
El dispositivo debe admitir las siguientes API en la implementación AIDL o HIDL de
IWifiChip
.-
IWifiChip.setMultiStaPrimaryConnection(String ifName)
-
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
-
La combinación de interfaz HAL Wi-Fi debe tener dos interfaces STA simultáneas expuestas utilizando un formato de especificación como
[{STA} <= 2, ...]
. Para obtener más información, consulte Simultaneidad de múltiples interfaces Wi-Fi .
Si se cumplen esos requisitos previos, implemente la simultaneidad de Wi-Fi STA/STA haciendo lo siguiente:
Habilite una o más funciones individualmente usando superposiciones de recursos de tiempo de ejecución (deshabilitadas de forma predeterminada).
- Hacer antes de romper :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Conexión simultánea a Internet y solo local :
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Conexión simultánea restringida y a Internet :
config_wifiMultiStaRestrictedConcurrencyEnabled
- Múltiples redes simultáneas con conexión a Internet :
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Hacer antes de romper :
Valide cada implementación como se describe en sus respectivas secciones a continuación.
Para admitir mejor la simultaneidad de Wi-Fi STA/STA, recomendamos que los marcos y aplicaciones personalizados de OEM utilicen el método NetworkCallback#onCapabilitiesChanged()
en lugar de WifiManager#getConnectionInfo()
, que solo devuelve WifiInfo
para una única red y quedó obsoleto en Android 12. Para obtener más información, consulte API de solicitud de red Wi-Fi para conectividad de igual a igual .
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 de red Wi-Fi existente, desconectándose solo de la red anterior cuando se conecta exitosamente a la nueva red Wi-Fi y tiene acceso a Internet.
El caso de uso de make-before-break aborda los siguientes problemas en Android 11 o versiones anteriores, donde el dispositivo debe desconectarse de la red Wi-Fi existente antes de conectarse a una nueva red (break-before-make).
Al conectarse a una nueva red, el dispositivo puede descubrir que tiene guardada una contraseña de Wi-Fi incorrecta o que la nueva red no tiene acceso a Internet. Esto obliga al dispositivo a volver a la red anterior, lo que provoca una cantidad significativa de tiempo sin conectividad Wi-Fi.
La antigua red se desconecta bruscamente, lo que significa que se cierran todos los enchufes. Las aplicaciones a menudo no reaccionan bien ante una pérdida repentina de conectividad y esto puede hacer que el usuario experimente unos segundos sin conexión a Internet hasta que la nueva conexión esté completamente establecida.
La red predeterminada cambia dos veces, de la antigua red Wi-Fi a la celular y luego de la celular a la nueva red Wi-Fi. Esto hace que las aplicaciones reaccionen dos veces a los cambios de red. El dispositivo también debe pasar un breve período de tiempo utilizando datos móviles.
El flujo de activación antes de interrupción solo se utiliza para cambios automáticos de red Wi-Fi iniciados por el sistema operativo. Los conmutadores de red iniciados por el usuario utilizan el flujo heredado de interrupción antes de conexión, donde la red anterior se desconecta por completo antes de que se conecte la nueva red. En ciertos casos, el flujo de interrupción antes de realizar se utiliza incluso en cambios automáticos iniciados por el sistema operativo, por ejemplo, cuando se cambia entre dos redes, ambas configuradas para usar la dirección MAC de fábrica.
Las aplicaciones pueden comprobar si este caso de uso es compatible con el dispositivo mediante la API WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Validar hacer antes de romper
Para validar su implementación, active un cambio automático de red Wi-Fi (asegurándose de que esté disponible una red con una intensidad de señal más fuerte que la red actualmente conectada) y verifique que el dispositivo mantenga la conexión existente mientras se conecta a la nueva red. Para ver el estado de ambas interfaces Wi-Fi y verificar que ambas estén conectadas, use el siguiente comando.
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
Si la nueva red no tiene conectividad, el dispositivo intenta conectarse a la red, mientras mantiene la conexión con la red existente, y cancela el intento cuando detecta que la nueva red 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 IoT, al mismo tiempo que la red principal que proporciona Internet. Esta función mejora la experiencia del usuario al conectarse directamente a dispositivos IoT, como cámaras, lo cual es posible a través de la API WifiNetworkSpecifier
agregada 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 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 aplicaciones pueden comprobar si esta función es compatible con el dispositivo mediante la API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Para obtener más información sobre los cambios en la función de conexión a Internet y solo local simultánea en Android 12, consulte API de solicitud de red Wi-Fi para conectividad de igual a igual .
Validación de conexión a Internet y solo local
Para validar esta función, utilice las siguientes pruebas CTS y ACTS:
- CTS:
MultiStaConcurrencyWifiNetworkSpecifierTest
- ACTOS:
WifiStaConcurrencyNetworkRequestTest
Conexión simultánea restringida y a Internet.
La función de conexión simultánea restringida y a Internet permite que el dispositivo se conecte simultáneamente a una red Wi-Fi principal para el usuario y a una red Wi-Fi restringida que solo está disponible para aplicaciones seleccionadas.
Las aplicaciones pueden comprobar si esta función es compatible con el dispositivo mediante la API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Para permitir que un dispositivo se conecte a redes Wi-Fi secundarias restringidas, siga estos pasos:
Agregue sugerencias de redes Wi-Fi con
setOemPaid
osetOemPrivate
configurado en verdadero.En
ConnectivityManager
, presente unaNetworkRequest
con las capacidades correspondientes:-
NET_CAPABILITY_OEM_PAID
parasetOemPaid
-
NET_CAPABILITY_OEM_PRIVATE
parasetOemPrivate
-
Cuando el dispositivo detecta resultados de escaneo con una red que coincide con la sugerencia privada o paga del OEM, se conecta automáticamente a ella como una red secundaria.
Validación de conexión simultánea restringida y a Internet
Para validar esta función, utilice las siguientes pruebas CTS y ACTS:
- CTS: Prueba
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
- ACTOS:
WifiStaConcurrencyNetworkRequestTest
Múltiples redes simultáneas con conexión a Internet.
Disponible para Android 13 o superior, la función de múltiples redes simultáneas con conexión a Internet permite que el dispositivo se conecte simultáneamente a dos redes (AP), las cuales no tienen restricciones (todas las aplicaciones tienen acceso) y brindan acceso a Internet.
Las aplicaciones pueden comprobar si esta función es compatible con el dispositivo mediante el método WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Si la función es compatible, las aplicaciones privilegiadas pueden habilitarla utilizando 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 DBS. -
WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: se conecta a AP arbitrarios donde las conexiones individuales usan diferentes bandas. -
WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Desactiva la función.
Para consultar el modo de función actualmente activo, utilice el método WifiManager#getStaConcurrencyForMultiInternetMode()
.
Cuando la función esté habilitada, siga los siguientes pasos para solicitar una red Wi-Fi adicional que proporcione Internet.
Cree un especificador de red Wi-Fi usando
WifiNetworkSpecifier.Builder
. Elija una banda para el especificador usando el métodosetBand()
. No especifique el SSID o BSSID ya que el marco Wi-Fi selecciona la red adicional para la banda especificada.Usando
ConnectivityManager
, cree unaNetworkRequest
con la capacidadNET_CAPABILITY_INTERNET
.Agregue el especificador a la solicitud de red junto con una instancia
NetworkCallback
para realizar un seguimiento del estado de la solicitud y emita la solicitud aConnectivityManager
. Si una red guardada con la banda solicitada está disponible en el resultado del escaneo y la conexión a la red es exitosa, se invocaNetworkCallback.onAvailable()
en el objeto de devolución de llamada.
Validación de múltiples redes simultáneas con conexión a Internet
Para validar esta función, utilice la siguiente prueba CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Pautas del proveedor de chips Wi-Fi
Para los proveedores de chips Wi-Fi, utilice las siguientes pautas para admitir la simultaneidad de Wi-Fi STA/STA.
El chip Wi-Fi debe admitir conexiones STA duales simultáneas. Esto significa que admite lo siguiente:
- Cada interfaz STA tiene una MAC única programable por el marco.
- La interfaz STA secundaria se puede crear y destruir dinámicamente.
- Cada STA se puede conectar a un SSID diferente (ya sea dentro de la misma banda o en una banda diferente).
- Cada STA se puede conectar al mismo SSID (ya sea dentro de la misma banda o en una banda diferente). Las dos STA nunca deben estar conectadas 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 características críticas:
La itinerancia debe ser compatible al menos en la interfaz principal (configurada mediante
IWifiChip.setMultiStaPrimaryConnection()
). Si se admite la itinerancia en 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 mediante
IWifiChip.setMultiStaPrimaryConnection()
).Las estadísticas de la capa de enlace deben operar por interfaz.
Las siguientes son implementaciones de chips Wi-Fi recomendadas para diferentes escenarios de concurrencia:
El chip Wi-Fi debe permitir que el marco 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 Hacer antes de romper. Se debe priorizar la calidad de la conexión primaria 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 de conexión simultánea restringida y a Internet . Se debe priorizar por igual la calidad de ambas conexiones.
-
Debido a que las STA duales simultáneas pueden conducir a modos de operación MCC, SCC y DBS, la implementación del proveedor debe elegir la mejor configuración de radio cuando el marco llama a
IWifiChip.setMultiStaUseCase()
para indicar la función. Las siguientes son pautas generales:- Se prefiere 2x2+2x2 DBS si está disponible.
- Evite 1x1+1x1 DBS si es posible debido al impacto excesivo en la calidad de la conexión. En su lugar, prefiera MCC.
- El ciclo de trabajo del MCC debe ser configurable mediante el controlador o el firmware para las distintas funciones. El marco no establece el ciclo de trabajo de MCC directamente, sino que consulta esta información mediante
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. Si utiliza MCC, recomendamos los siguientes ciclos de trabajo entre las conexiones primaria y secundaria:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% primario, 30% secundario. -
DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% primario, 50% secundario.
-