O Android oferece suporte a pontos de acesso Wi-Fi (Soft AP), incluindo tethering. através 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 conseguir esses recursos. Os fabricantes de dispositivos também podem especificar recursos de dispositivo base usando sobreposições.
Algumas APIs são do sistema e estão restritas por para que apenas o app Configurações do sistema possa acessá-las.
Desenvolver apps com APIs de ponto de acesso
A implementação padrão de um ponto de acesso Wi-Fi vinculado é fornecida pelo Settings, mas não exerce todas as APIs do Soft AP configuração do Terraform.
Para oferecer suporte ao tethering por meio de um ponto de acesso somente local, o app precisa executar as seguintes funções:
Registre um callback para acessar os recursos do dispositivo usando
WifiManager#registerSoftApCallback
para um ponto de acesso vinculado; ouWifiManager#registerLocalOnlyHotspotSoftApCallback
para uma loja ponto de acesso.O callback
SoftApCallback
fornece os seguintes métodos:SoftApCallback#onCapabilityChanged
: Fornece informações sobre as capacidades do dispositivo, incluindo o máximo número de clientes compatíveis e se são compatíveis com SAE ou ACS.SoftApCallback#onInfoChanged
: Fornece informações sobre o Soft AP em execução (válido apenas uma vez iniciado), incluindo informações de banda e frequência.SoftApCallback#onConnectedClientsChanged
: Fornece uma lista de clientes conectados. Para cada cliente, é possível receber e o endereço MAC. Para obter as informações de IP, use oTetheringEventCallback#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 com uma das opções a seguir. motivos para o bloqueio: o dispositivo atingiu o número máximo de aos quais ele oferece suporte ou que não está explicitamente autorizado a 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
. ConstruçãoSoftApConfiguration
usando o métodoSoftApConfiguration.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
WifiManager#startLocalOnlyHotspot
.
Implementar listas de permissão e bloqueio
Um requisito típico das operadoras é fornecer ao usuário os controles da que podem se associar ao Soft AP. Existem várias mecanismos para fazer isso:
- Limitar o número máximo de dispositivos que podem ser associados ao soft AP
usando
SoftApConfiguration.Builder#setMaxNumberOfClients
. Não se esqueça de especificar um número menor que o máximo de clientes aceitos. pelo dispositivo. Para conseguir o número máximo,SoftApCapability#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
ser associada ao soft AP, exceto para dispositivos com endereços MAC que sejam
adicionado a
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
SoftApConfiguration.Builder#setBlockedClientList
estão bloqueados de associação. - Todos os dispositivos com endereços MAC
SoftApConfiguration.Builder#setAllowedClientList
são permitidos associação. - Todos os outros dispositivos (ou seja, dispositivos com endereços MAC
não estão na lista de permissões ou de bloqueio) não têm permissão para
associação, mas
SoftApCallback#onBlockedClientConnecting
está chamado, permitindo que o app de controle (ou seja, o app Configurações) acesse realizam uma ação, por exemplo, pedir a confirmação do usuário e e adicionando o dispositivo à lista de permissões ou de bloqueio dependendo do comportamento do usuário.
- Todos os dispositivos com endereços MAC
Os dispositivos só podem usar a funcionalidade de lista de permissões se ela compatível com o dispositivo. Você pode 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
ser associada ao soft AP, exceto para dispositivos com endereços MAC que sejam
adicionado a
Implementação
Para oferecer suporte ao tethering por meio de um ponto de acesso ou somente ao local, faça o seguinte: os fabricantes de dispositivos precisam fornecer o app Configurações, framework e suporte a 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 recursos adicionais, conforme descrito em Como desenvolver apps com APIs de ponto de acesso.
Framework:o código do framework do AOSP é compatível com todas as funcionalidades. descritos em Como desenvolver aplicativos com APIs de ponto de acesso.
HAL/firmware para ponto de acesso: O HIDL IHostapd.hal (em inglês) a versão 1.2 ou mais recente, ou a AIDL, IHostapd.aidl
Personalização
Para personalizar a implementação, os fabricantes de dispositivos devem configurar o
as seguintes sobreposições e configurações de operadoras, que estão documentadas em
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: o padrão ou intervalo de tempo limite de desligamento. Válido apenas seSoftApConfiguration#setAutoShutdownEnabled
está ativado. Podem ser substituídas usandoSoftApConfiguration#setShutdownTimeoutMillis
.config_wifiHardwareSoftapMaxClientCount
: a limitação de hardware para o número máximo de clientes aceitos. O número máximo de clientes compatíveis com o dispositivo é o mínimo de hardware e restrições (especificadas peloCarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
). O resultado final é fornecido ao app comSoftApCapabilities#getMaxSupportedClients
.config_wifiSofapClientForceDisconnectSupported
: se o dispositivo tem a capacidade de forçar a desconexão de um cliente. Necessário para ativar a permissão e listas de bloqueio. Comunicado ao app de controle (app Configurações) usandoSoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
:- (disponível nas 13 opções)
config_wifiSoftapPassphraseAsciiEncodableCheck
: Se a senha longa de soft AP precisa ou não ser codificável em ASCII. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: se ou não para atualizar automaticamente a configuração da configuração de banda para banda dupla durante restauração de configuração de nuvem quando um novo dispositivo é compatível.- (disponível nas 13 opções)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: Se o framework anexa automaticamente bandas inferiores à configuração de bandas para evitar o tratamento da coexistência. config_wifiSoftApDynamicCountryCodeUpdateSupported
: se é dinâmico ou não atualização de código de país no modo AP são suportados 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 em um novo dispositivo:
config_wifiSoftapResetChannelConfig
,config_wifiSoftapResetHiddenConfig
,config_wifiSoftapResetUserControlConfig
,config_wifiSoftapResetAutoShutdownTimerConfig
,config_wifiSoftapResetMaxClientSettingConfig
. Observe que eles estão definidos comotrue
por padrão, o que significa que os valores são redefinidos. Isso é fundamental se o novo dispositivo não é compatível com a configuração. - Recursos de hardware:
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (disponível nas 13 opções)
config_wifiSoftapOweTransitionSupported
- (disponível nas 13 opções)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (disponível nas 13 opções)
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) para validar o recurso de ponto de acesso. O recurso de ponto de acesso também pode ser testado usando o pacote de testes de fornecedor (VTS, na sigla em inglês).
Testes de unidade
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