O Android 12 apresenta a simultaneidade de STA/STA do Wi-Fi, que permite que os dispositivos se conectem a duas redes Wi-Fi simultaneamente. Esse recurso opcional ativa as funções a seguir.
- Fazer antes do intervalo: o dispositivo estabelece uma conexão com uma nova rede Wi-Fi antes de interromper a conexão existente. Isso resulta em transições mais suaves ao alternar entre redes Wi-Fi.
- Conexão local somente local e de Internet: o dispositivo se conecta a uma rede somente local sem interromper a conexão principal de acesso à 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 ao seguinte para implementar a contemporaneidade STA/STA do Wi-Fi:
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
IWifiChip
ou HIDL na AIDL.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 local e de Internet simultâneas:
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 de quebrar" aborda os seguintes problemas no Android 11 ou versões anteriores, em que o dispositivo precisa se desconectar da rede Wi-Fi atual antes de se conectar a uma nova rede (quebrar antes de fazer).
Ao se conectar a uma nova rede, o dispositivo pode descobrir que tem uma senha 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 fazer antes da interrupção é usado apenas para comutadores 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 de criar é usado mesmo em comutações 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 atual 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 conectar a um dispositivo IoT, resultando na perda da conexão à 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 restrita e 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
, envie 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 versões mais recentes, o recurso de várias redes simultâneas com conexão de Internet permite que o dispositivo se conecte simultaneamente a duas redes (APs), ambas sem restrições (todos os apps têm acesso) e fornecem 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 as conexões duplas às 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 do CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Diretrizes para chips 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 oferecer suporte a duas 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 conectada ao mesmo SSID (na mesma faixa ou em uma diferente). Os dois STAs nunca podem ser 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 pelo menos na interface principal (definida usando
IWifiChip.setMultiStaPrimaryConnection()
). Se o roaming for compatível com as duas interfaces, as decisões em uma conexão não poderão entrar em conflito com a segunda conexão simultânea. Por exemplo, uma interface não pode navegar até 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 link precisam operar por interface.
Confira abaixo as implementações recomendadas de chip 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. Confira a seguir 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 a MCC, recomendamos os seguintes ciclos de trabalho 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.