O Android oferece suporte a pontos de acesso Wi-Fi (Soft AP), incluindo tethering por meio de um ponto de acesso Wi-Fi e pontos de acesso Wi-Fi somente locais.
O recurso de soft AP permite a configuração do 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 ordem aleatória de MAC para o BSSID do AP
- 802.11ax e 802.11be
As funcionalidades do dispositivo determinam a disponibilidade desses controles. O Android 11 introduz APIs para ter esses recursos. Os fabricantes de dispositivos também podem especificar recursos de dispositivo base usando sobreposições.
Algumas das APIs são do sistema e são restritas por permissões, de modo que apenas o app Configurações do sistema pode 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 Configurações do AOSP. No entanto, ele não usa todas as APIs da configuração do Soft AP.
Para oferecer suporte ao tethering por meio de um ponto de acesso ou somente local, o app precisa executar 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 compatíveis 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 somente quando iniciado), incluindo informações de banda e frequência.SoftApCallback#onConnectedClientsChanged
: fornece uma lista de clientes conectados. É possível obter o endereço MAC de cada cliente. Para receber as informações de IP, use o callbackTetheringEventCallback#onClientsChanged
.SoftApCallback#onStateChanged
: fornece atualizações sobre o estado do Soft AP conforme ele é ativado e desativado.SoftApCallback#onBlockedClientConnecting
: fornece as informações do cliente bloqueado por um dos seguintes motivos para o bloqueio: o dispositivo atingiu o número máximo de clientes que pode aceitar ou o cliente não está explicitamente autorizado a se conectar.
Para um ponto de acesso vinculado:
- Configure a configuração de soft AP para tethering chamando o método
WifiManager#setSoftApConfiguration
e fornecendo uma instância deSoftApConfiguration
. CrieSoftApConfiguration
usando a classeSoftApConfiguration.Builder
. - Inicie o tethering chamando o método de tethering em
TetheringManager#startTethering
.
Para pontos de acesso somente locais:
- Inicie o ponto de acesso somente local com uma configuração de soft AP específica
chamando o
método
WifiManager#startLocalOnlyHotspot
.
Implementar listas de permissão e bloqueio
Um requisito típico da operadora é fornecer ao usuário os controles dos dispositivos que podem ser associados ao Soft AP. Há vários mecanismos para fazer isso:
- Limite o número máximo de dispositivos que podem ser associados ao soft AP
usando
SoftApConfiguration.Builder#setMaxNumberOfClients
. Especifique um número menor que o máximo de clientes aceito pelo dispositivo. É possível conseguir o número máximo deSoftApCapability#getMaxSupportedClients
. Forneça controle dinâmico usando listas de permissão e bloqueio:
- A configuração padrão de um soft AP permite que todos os dispositivos se associem a ele, exceto aqueles com endereços MAC adicionados ao
SoftApConfiguration.Builder#setBlockedClientList
. Se o Soft AP estiver configurado com
SoftApConfiguration.Builder#setClientControlByUserEnabled(true)
, a lista de permissões será usada.- Todos os dispositivos com endereços MAC que estão em
SoftApConfiguration.Builder#setBlockedClientList
são bloqueados para associação. - A associação é permitida para todos os dispositivos com endereços MAC em
SoftApConfiguration.Builder#setAllowedClientList
. - Todos os outros dispositivos (ou seja, dispositivos com endereços MAC
que não estejam na lista de permissões ou bloqueio) têm a
associação bloqueada, mas
SoftApCallback#onBlockedClientConnecting
é chamado, permitindo que o app de controle (ou seja, o app Configurações) realize uma ação, por exemplo, pedir a confirmação do usuário e, em seguida, adicionar o dispositivo à lista de permissões ou de bloqueio, dependendo do comportamento do usuário.
- Todos os dispositivos com endereços MAC que estão em
Os dispositivos só poderão usar a funcionalidade de lista de permissões se ela tiver suporte. É possível verificar o suporte do dispositivo usando
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
.- A configuração padrão de um soft AP permite que todos os dispositivos se associem a ele, exceto aqueles com endereços MAC adicionados ao
Implementação
Para oferecer suporte ao tethering por meio de um ponto de acesso ou suporte a um ponto de acesso somente local, os fabricantes de dispositivos precisam oferecer suporte ao app Configurações, ao framework e à HAL/firmware:
App Configurações:o app Configurações do AOSP oferece um valor de referência para configurar um ponto de acesso tethering com SSID e credenciais de segurança. Esse código pode ser usado no estado em que se encontra ou modificado para fornecer outros recursos, 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 versão 1.2 ou mais recente do HIDL IHostapd.hal ou a AIDL IHostapd.aidl.
Personalização
Para personalizar a implementação, os fabricantes de dispositivos precisam configurar as
sobreposições e configurações de operadora abaixo, que estão documentadas em
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: o intervalo padrão de tempo limite de desligamento. 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 aceitos pelo dispositivo é o mínimo das restrições de hardware e operadora (especificadas porCarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
). O resultado final é fornecido ao app comSoftApCapabilities#getMaxSupportedClients
.config_wifiSofapClientForceDisconnectSupported
: se o dispositivo pode forçar a desconexão de um cliente. Necessário para ativar listas de permissão e bloqueio. Comunicado ao app de controle (app Configurações) usandoSoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
.- (Disponível a partir de 13)
config_wifiSoftapPassphraseAsciiEncodableCheck
: se a senha longa de soft AP precisa ou não ser codificável em ASCII. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: se é necessário fazer o upgrade automático da configuração da configuração de banda para banda dupla durante a restauração da configuração na nuvem quando um novo dispositivo for compatível.- (Disponível a partir da 13)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: se o framework anexa automaticamente bandas inferiores à configuração de bandas para evitar o processamento da coexistência. config_wifiSoftApDynamicCountryCodeUpdateSupported
: se a atualização dinâmica do código do país no modo AP tem ou não suporte no dispositivo.- Suporte ao canal:
config_wifiSoftap2gChannelList
,config_wifiSoftap5gChannelList
,config_wifiSoftap6gChannelList
econfig_wifiSoftap60gChannelList
. - Restaure o suporte especificando se as entradas correspondentes serão redefinidas
para o padrão ao restaurar a configuração do ponto de acesso para 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 for compatível com a configuração. - Recursos de hardware:
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (Disponível em 13)
config_wifiSoftapOweTransitionSupported
- (Disponível em 13)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (Disponível em 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 de conjunto de teste de compatibilidade (CTS, na sigla em inglês) para validar o recurso do ponto de acesso. O recurso de ponto de acesso também pode ser testado com o conjunto de testes de fornecedor (VTS, na sigla em inglês).
Testes de unidades
Verifique o pacote do ponto de acesso usando os testes a seguir.
Testes de serviço:
atest packages/modules/Wifi/service/tests/wifitests/
Testes do gerenciador:
atest packages/modules/Wifi/framework/tests/
Testes do conjunto de teste de compatibilidade (CTS)
Use testes CTS para validar o recurso do ponto de acesso. O CTS detecta quando o recurso está ativado e inclui automaticamente os testes associados.
Para acionar os testes de 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