O Android oferece suporte a pontos de acesso Wi-Fi (soft AP), incluindo tethering por um ponto de acesso Wi-Fi e pontos de acesso Wi-Fi somente locais.
O recurso de AP flexível permite configurar o seguinte:
- SSID e BSSID;
- tipo de segurança (WPA3 incluso);
- SSID oculto;
- banda e canal operacional (ACS incluso);
- número máximo de clientes permitidos;
- valor do tempo limite do encerramento automático;
- lista de permissões e lista de bloqueio para permitir o controle do usuário dos dispositivos associados.
- Nível de ordenação aleatória de MAC para o BSSID do AP
- 802.11ax e 802.11be
Os recursos do dispositivo determinam a disponibilidade desses controles. O Android 11 apresenta APIs para conseguir esses recursos. Os fabricantes de dispositivos também podem especificar os recursos do dispositivo de base usando sobreposições.
Algumas das APIs são do sistema e são restritas por permissões para que apenas o app Configurações do sistema possa acessá-las.
Desenvolver apps com APIs de ponto de acesso
Uma implementação padrão de um ponto de acesso Wi-Fi vinculado é fornecida pelo app AOSP Settings, mas não usa todas as APIs para a configuração do Soft AP.
Para oferecer suporte ao tethering por um ponto de acesso ou um ponto de acesso somente local, o app precisa realizar as seguintes funções:
Registre um callback para receber os recursos do dispositivo usando
WifiManager#registerSoftApCallback
para um ponto de acesso vinculado ouWifiManager#registerLocalOnlyHotspotSoftApCallback
para um ponto de acesso somente local.O callback
SoftApCallback
fornece os seguintes métodos:SoftApCallback#onCapabilityChanged
: fornece informações sobre os recursos do dispositivo, incluindo o número máximo de clientes com suporte e se o SAE ou o ACS são compatíveis.SoftApCallback#onInfoChanged
: fornece informações sobre o Soft AP em execução (válido apenas após ser iniciado), incluindo informações de banda e frequência.SoftApCallback#onConnectedClientsChanged
: fornece uma lista de clientes conectados. Para cada cliente, é possível conferir o endereço MAC. Para receber as informações de IP, use o callbackTetheringEventCallback#onClientsChanged
.SoftApCallback#onStateChanged
: fornece atualizações sobre o estado do AP virtual conforme ele é ativado e desativado.SoftApCallback#onBlockedClientConnecting
: fornece as informações do cliente bloqueado com um dos seguintes motivos: o dispositivo atingiu o número máximo de clientes que pode suportar ou o cliente não está explicitamente autorizado a se conectar.
Para um ponto de acesso com tethering:
- Configure a configuração do AP virtual para tethering chamando o método
WifiManager#setSoftApConfiguration
e fornecendo uma instânciaSoftApConfiguration
. CrieSoftApConfiguration
usando a classeSoftApConfiguration.Builder
. - Inicie o tethering chamando o método de tethering em
TetheringManager#startTethering
.
Para ponto de acesso somente local:
- Inicie o ponto de acesso local com uma configuração específica de AP flexível chamando o
método
WifiManager#startLocalOnlyHotspot
.
Implementar listas de permissões e de bloqueio
Um requisito típico da operadora é fornecer ao usuário controles dos dispositivos que podem ser associados ao AP virtual. Há vários mecanismos para fazer isso:
- Limite o número máximo de dispositivos que podem se associar ao AP virtual
usando
SoftApConfiguration.Builder#setMaxNumberOfClients
. Especifique um número menor que o número máximo de clientes aceitos pelo dispositivo. Você pode conferir o número máximo emSoftApCapability#getMaxSupportedClients
. Forneça controle dinâmico usando listas de permissões e de bloqueio:
- A configuração padrão de um AP virtual permite que todos os dispositivos
se associem a ele, exceto aqueles cujos endereços MAC são
adicionados a
SoftApConfiguration.Builder#setBlockedClientList
. Se o Soft AP for configurado com
SoftApConfiguration.Builder#setClientControlByUserEnabled(true)
, a lista de permissões será usada.- Todos os dispositivos com endereços MAC em
SoftApConfiguration.Builder#setBlockedClientList
são bloqueados da associação. - Todos os dispositivos com endereços MAC em
SoftApConfiguration.Builder#setAllowedClientList
podem ser associados. - Todos os outros dispositivos (ou seja, dispositivos cujos endereços MAC
não estão na lista de permissões ou de bloqueio) não podem ser
associados, mas
SoftApCallback#onBlockedClientConnecting
é chamado, permitindo que o app de controle (ou seja, o app Configurações) tome uma ação, por exemplo, pedindo a confirmação do usuário e em seguida adicionando o dispositivo à lista de permissões ou de bloqueio dependendo do comportamento do usuário.
- Todos os dispositivos com endereços MAC em
Os dispositivos só podem usar a funcionalidade de lista de permissões se ela tiver suporte no dispositivo. É possível verificar a compatibilidade do dispositivo usando
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
.- A configuração padrão de um AP virtual permite que todos os dispositivos
se associem a ele, exceto aqueles cujos endereços MAC são
adicionados a
Implementação
Para oferecer suporte ao tethering por um ponto de acesso ou a um ponto de acesso somente local, os fabricantes de dispositivos precisam oferecer suporte ao app Configurações, ao framework e ao HAL/firmware:
App Configurações:o app Configurações do AOSP fornece uma base para configurar um ponto de acesso de tethering com SSID e credenciais de segurança. Esse código pode ser usado como está ou modificado para oferecer recursos adicionais, conforme descrito em Como desenvolver apps com APIs de ponto de acesso.
Framework:o código do framework do AOSP oferece suporte a todas as funcionalidades descritas em Como desenvolver apps com APIs de ponto de acesso.
HAL/firmware para ponto de acesso:a HIDL IHostapd.hal versão 1.2 ou mais recente ou a AIDL IHostapd.aidl.
Personalização
Para personalizar a implementação, os fabricantes de dispositivos precisam configurar as
seguintes sobreposições e configurações de operadora, documentadas em
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: o intervalo de tempo limite de desligamento padrão. Válido apenas seSoftApConfiguration#setAutoShutdownEnabled
estiver ativado. Pode ser substituído usandoSoftApConfiguration#setShutdownTimeoutMillis
.config_wifiHardwareSoftapMaxClientCount
: a limitação de hardware para o número máximo de clientes com suporte. O número máximo de clientes com que o dispositivo é compatível é o mínimo das restrições de hardware e de operadora (especificado porCarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
). O resultado final é fornecido ao app comSoftApCapabilities#getMaxSupportedClients
.config_wifiSofapClientForceDisconnectSupported
: se o dispositivo tem a capacidade de desconectar um cliente à força. Necessário para ativar listas de permissões e bloqueios. Comunicado ao app de controle (app Configurações) porSoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
.- (Disponível a partir da versão 13)
config_wifiSoftapPassphraseAsciiEncodableCheck
: define se a senha longa do AP flexível precisa ser codificada em ASCII. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: define se a configuração da banda será atualizada automaticamente para bandas duplas durante a restauração da configuração da nuvem quando um novo dispositivo tiver suporte.- (Disponível a partir da versão 13)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: indica se o framework anexa automaticamente bandas mais baixas à configuração de banda para evitar o processamento de coexistência. config_wifiSoftApDynamicCountryCodeUpdateSupported
: se a atualização dinâmica do código do país no modo AP é compatível com o dispositivo- Suporte a canais:
config_wifiSoftap2gChannelList
,config_wifiSoftap5gChannelList
,config_wifiSoftap6gChannelList
econfig_wifiSoftap60gChannelList
. - Suporte à restauração especificando se as entradas correspondentes são redefinidas
para o padrão ao restaurar a configuração do ponto de acesso em um novo dispositivo:
config_wifiSoftapResetChannelConfig
,config_wifiSoftapResetHiddenConfig
,config_wifiSoftapResetUserControlConfig
,config_wifiSoftapResetAutoShutdownTimerConfig
,config_wifiSoftapResetMaxClientSettingConfig
. Eles são definidos comotrue
por padrão, o que significa que os valores são redefinidos. Isso é essencial se o novo dispositivo não tiver suporte à configuração. - Recursos de hardware:
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (Disponível a partir da versão 13)
config_wifiSoftapOweTransitionSupported
- (Disponível a partir da versão 13)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (Disponível a partir da versão 13)
config_wifiSoftapIeee80211beSupported
config_wifiSoftapMacAddressCustomizationSupported
config_wifiSoftapHeSuBeamformerSupported
config_wifiSoftapHeSuBeamformeeSupported
config_wifiSoftapHeMuBeamformerSupported
config_wifiSoftapHeTwtSupported
config_wifiSoftap24ghzSupported
config_wifiSoftap5ghzSupported
config_wifiSoftap6ghzSupported
config_wifiSoftap60ghzSupported
config_wifiSoftapAcsIncludeDfs
Validação
O Android oferece um conjunto de testes de unidade e do conjunto de teste de compatibilidade (CTS) para validar o recurso de ponto de acesso. O recurso de ponto de acesso também pode ser testado usando o pacote de teste do fornecedor (VTS).
Testes de unidade
Verifique o pacote de ponto de acesso usando os testes a seguir.
Testes de serviço:
atest packages/modules/Wifi/service/tests/wifitests/
Testes do administrador:
atest packages/modules/Wifi/framework/tests/
Testes do conjunto de teste de compatibilidade (CTS)
Use os testes do CTS para validar o recurso de ponto de acesso. O CTS detecta quando o recurso está ativado e inclui automaticamente os testes associados.
Para acionar os testes do CTS, execute:
atest android.net.wifi.cts.WifiManagerTest
Teste de fornecedor (VTS)
Se a interface HIDL estiver implementada, execute:
atest VtsHalWifiHostapdV1_2Target
Se a interface AIDL estiver implementada, execute:
atest VtsHalHostapdTargetTest