O Android 12 apresenta a simultaneidade de STA/STA Wi-Fi, que permite que os dispositivos se conectem a duas redes Wi-Fi simultaneamente. Esse recurso opcional ativa as seguintes funções.
- Make-before-break: o dispositivo faz uma conexão com uma nova rede Wi-Fi antes de interromper a conexão atual. Isso resulta em transições mais suaves ao alternar entre redes Wi-Fi.
- Conexão simultânea de Internet e somente local: o dispositivo se conecta a uma rede somente local sem interromper a conexão principal de Internet do dispositivo.
- Conexão simultânea restrita e de Internet: o dispositivo se conecta a uma rede restrita (disponível apenas para determinados apps privilegiados) sem interromper a conexão principal de Internet do dispositivo.
- (Android 13 ou mais recente) Várias redes simultâneas com conexão de Internet: o dispositivo se conecta a duas redes, que não têm restrições e estão disponíveis para todos os apps, e fornecem conectividade de Internet.
Esta página descreve o comportamento do dispositivo quando esse recurso está ativado e os detalhes de implementação para fabricantes e fornecedores de dispositivos.
Implementação
Os dispositivos precisam oferecer suporte aos itens abaixo para implementar a simultaneidade de Wi-Fi STA/STA:
O chip ou firmware Wi-Fi precisa oferecer suporte a duas conexões STA simultâneas. O firmware precisa ser compatível com todas as combinações de canais e bandas para as duas conexões. Para evitar problemas de desempenho, recomendamos usar um chip Wi-Fi compatível com DBS 2x2+2x2.
O dispositivo precisa oferecer suporte às seguintes APIs na implementação de AIDL ou HIDL de
IWifiChip
.IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
A combinação de interface Wi-Fi do HAL precisa ter duas interfaces STA simultâneas expostas usando um formato de especificação, como
[{STA} <= 2, ...]
. Para mais informações, consulte Simultaneidade de várias interfaces de Wi-Fi.
Se esses pré-requisitos forem atendidos, implemente a simultaneidade de Wi-Fi STA/STA fazendo o seguinte:
Ative uma ou mais funções individualmente usando sobreposições de recursos de execução (desativadas por padrão).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Conexão simultânea somente local e de Internet:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Conexão simultânea restrita e de Internet:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Várias redes simultâneas com conexão de Internet:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
Valide cada implementação conforme descrito nas respectivas seções.
Para oferecer suporte à simultaneidade STA/STA do Wi-Fi, recomendamos que os apps e frameworks personalizados
pelo OEM usem o método NetworkCallback#onCapabilitiesChanged()
em vez de WifiManager#getConnectionInfo()
, que retorna apenas WifiInfo
para
uma única rede e foi descontinuado no Android 12. Para
mais informações, consulte
API Wi-Fi Network Request para conectividade ponto a ponto.
Make-before-break
A função make-before-break permite que os dispositivos se conectem a uma nova rede Wi-Fi mantendo a conexão de rede Wi-Fi atual, desconectando-se da rede antiga somente quando ele se conecta à nova rede Wi-Fi e tem acesso à Internet.
O caso de uso fazer antes da pausa aborda os seguintes problemas no Android 11 ou versões anteriores, em que o dispositivo precisa se desconectar da rede Wi-Fi existente antes de se conectar a uma nova (break-before-make).
Ao se conectar a uma nova rede, o dispositivo pode descobrir que tem uma senha de Wi-Fi incorreta salva ou que a nova rede não tem acesso à Internet. Isso força o dispositivo a voltar para a rede antiga, levando a um tempo significativo sem conectividade Wi-Fi.
A rede antiga é desconectada abruptamente, o que significa que todos os soquetes são fechados. Muitas vezes, os apps não reagem bem a uma perda repentina de conectividade, e isso pode fazer com que o usuário fique alguns segundos sem conectividade de Internet até que a nova conexão seja totalmente estabelecida.
A rede padrão muda duas vezes, da antiga rede Wi-Fi para a rede celular e depois da rede celular para a nova rede Wi-Fi. Isso faz com que os apps reajam às mudanças de rede duas vezes. O dispositivo também precisa passar um curto período usando dados da rede celular.
O fluxo de make-before-break é usado apenas para chaveamentos automáticos de rede Wi-Fi iniciados pelo SO. As chaves de rede iniciadas pelo usuário usam o fluxo de desligamento antes da conexão legada, em que a rede anterior é totalmente desconectada antes da nova rede ser conectada. Em alguns casos, o fluxo de interrupção antes da criação é usado mesmo em trocas automáticas iniciadas pelo SO, por exemplo, ao alternar entre duas redes configuradas para usar o endereço MAC de fábrica.
Os apps podem verificar se esse caso de uso tem suporte no dispositivo usando a
API WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Validar make-before-break
Para validar sua implementação, acione uma troca automática de rede Wi-Fi (garantindo que uma rede com uma intensidade de sinal mais forte do que a rede conectada esteja disponível) e verifique se o dispositivo mantém a conexão atual ao se conectar à nova rede. Para conferir o status das duas interfaces Wi-Fi e verificar se elas estão conectadas, use o comando abaixo.
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
Se a nova rede não tiver conectividade, o dispositivo vai tentar se conectar a ela, mantendo a conexão com a rede existente, e abortar a tentativa quando detectar que a nova rede não tem Internet. O dispositivo continua usando a conexão existente como a rede Wi-Fi principal.
Conexão local e de Internet simultâneas
A função conexão simultânea local e de Internet permite que os dispositivos
se conectem a uma conexão local, como uma conexão com um dispositivo IoT,
simultaneamente à rede principal que fornece Internet. Essa função melhora
a experiência do usuário ao se conectar diretamente a dispositivos IoT, como câmeras,
o que é possível com a API WifiNetworkSpecifier
adicionada no
Android 10.
No Android 11 e versões anteriores, os dispositivos se desconectam da rede Wi-Fi principal ao se conectarem a um dispositivo de IoT, resultando em uma perda de conexão com a Internet, a menos que o dispositivo tenha outro tipo de transporte disponível, como dados móveis.
Os apps podem verificar se essa função tem suporte no dispositivo usando a
API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Para mais informações sobre as mudanças na função de conexão concorrente somente local e de Internet no Android 12, consulte API Wi-Fi Network Request para conectividade ponto a ponto.
Validar a conexão local e de Internet
Para validar essa função, use o
teste CTS MultiStaConcurrencyWifiNetworkSpecifierTest
.
Conexão de Internet e restrita simultânea
A função conexão simultânea restrita e de Internet permite que o dispositivo se conecte simultaneamente a uma rede Wi-Fi principal para o usuário e a uma rede Wi-Fi restrita que só está disponível para apps selecionados.
Os apps podem verificar se essa função tem suporte no dispositivo usando a
API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Para permitir que um dispositivo se conecte a redes Wi-Fi secundárias restritas, siga estas etapas:
Adicione sugestão de rede Wi-Fi com
setOemPaid
ousetOemPrivate
definido como verdadeiro.Em
ConnectivityManager
, arquive umNetworkRequest
com os recursos correspondentes:NET_CAPABILITY_OEM_PAID
parasetOemPaid
NET_CAPABILITY_OEM_PRIVATE
parasetOemPrivate
Quando o dispositivo detecta resultados de verificação com uma rede que corresponde à sugestão paga ou particular do OEM, ele se conecta automaticamente a ela como uma rede secundária.
Validar a conexão de Internet e restrita simultânea
Para validar essa função, use o
teste CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
.
Várias redes simultâneas com conexão de Internet
Disponível para o Android 13 ou mais recente, o recurso de várias redes simultâneas com conexão de Internet permite que o dispositivo se conecte simultaneamente a duas redes (APs) sem restrições (todos os apps têm acesso) e forneçam acesso à Internet.
Os apps podem verificar se esse recurso tem suporte no dispositivo usando o
método
WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Se o recurso tiver suporte, os apps privilegiados poderão ativar o recurso usando o
método WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. O
recurso tem os seguintes modos:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: restringe conexões duplas com as bandas duplas de um AP DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: se conecta a APs arbitrários em que as conexões individuais usam bandas diferentes.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: desativa o recurso.
Para consultar o modo de recurso ativo, use o
método
WifiManager#getStaConcurrencyForMultiInternetMode()
.
Quando o recurso estiver ativado, siga as etapas abaixo para solicitar outra rede Wi-Fi com acesso à Internet.
Crie um especificador de rede Wi-Fi usando
WifiNetworkSpecifier.Builder
. Escolha uma banda para o especificador usando o métodosetBand()
. Não especifique o SSID ou o BSSID, já que a rede extra para a banda especificada é selecionada pelo framework de Wi-Fi.Usando
ConnectivityManager
, crie umNetworkRequest
com o recursoNET_CAPABILITY_INTERNET
.Adicione o especificador à solicitação de rede com uma instância
NetworkCallback
para rastrear o status da solicitação e emita a solicitação paraConnectivityManager
. Se uma rede salva com a banda solicitada estiver disponível no resultado da verificação e a conexão com a rede for bem-sucedida,NetworkCallback.onAvailable()
será invocado no objeto de callback.
Validar várias redes simultâneas com conexão de Internet
Para validar essa função, use o seguinte teste de CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Diretrizes para o chip de Wi-Fi do fornecedor
Para fornecedores de chips Wi-Fi, use as diretrizes a seguir para oferecer suporte à simultaneidade de Wi-Fi STA/STA.
O chip Wi-Fi precisa ser compatível com conexões STA simultâneas. Isso significa que ele oferece suporte para o seguinte:
- Cada interface STA tem um MAC exclusivo programável pelo framework.
- A interface STA secundária pode ser criada e destruída dinamicamente.
- Cada STA pode ser conectada a um SSID diferente (na mesma faixa ou em uma faixa diferente).
- Cada STA pode ser conectado ao mesmo SSID (dentro da mesma faixa ou em uma faixa diferente). Os dois STAs nunca podem estar conectados ao mesmo BSSID.
Os recursos críticos precisam operar por interface e estar disponíveis na interface principal. Confira a seguir uma lista desses recursos críticos:
O roaming precisa ter suporte em pelo menos a interface principal (definida usando
IWifiChip.setMultiStaPrimaryConnection()
). Se o roaming tiver suporte em ambas as interfaces, as decisões em uma conexão não podem entrar em conflito com a segunda conexão simultânea. Por exemplo, uma interface não pode migrar para o BSSID da outra conexão.O APF (e outros offloads, como ARP e NS) precisa ter suporte em pelo menos a interface principal (definida usando
IWifiChip.setMultiStaPrimaryConnection()
).As estatísticas da camada de enlace precisam operar por interface.
Confira a seguir as implementações recomendadas de chips Wi-Fi para diferentes cenários de simultaneidade:
O chip Wi-Fi precisa permitir que o framework chame
IWifiChip.setMultiStaUseCase()
com uma das constantes abaixo para especificar a função atual:DUAL_STA_TRANSIENT_PREFER_PRIMARY
: especifica a função Make-Before-Break. A qualidade da conexão principal precisa ser priorizada em relação à conexão secundária.DUAL_STA_NON_TRANSIENT_UNBIASED
: especifica a conexão concorrente somente local e de Internet ou a função conexão concorrente restrita e de Internet. A qualidade de ambas as conexões precisa ser priorizada igualmente.
Como as STAs duplas simultâneas podem levar a modos de operação MCC, SCC e DBS, a implementação do fornecedor precisa escolher a melhor configuração de rádio quando o framework chamar
IWifiChip.setMultiStaUseCase()
para indicar a função. Estas são as diretrizes gerais:- A DBS 2x2+2x2 é a preferida, se disponível.
- Se possível, evite usar DBS 1x1+1x1 devido ao impacto excessivo na qualidade da conexão. Em vez disso, prefira o MCC.
- O ciclo de trabalho do MCC precisa ser configurável pelo driver ou firmware para
as várias funções. O framework não define o ciclo de trabalho do MCC
diretamente, mas consulta essas informações usando
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. Se você estiver usando o MCC, recomendamos os seguintes ciclos de ativação entre as conexões primária e secundária:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% primário, 30% secundário.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% primário, 50% secundário.