Android supporta l'hotspot Wi-Fi (Soft AP), compreso il tethering tramite un hotspot Wi-Fi e hotspot Wi-Fi solo locali.
La funzionalità soft AP consente di configurare quanto segue:
- SSID e BSSID
- Tipo di sicurezza (incluso WPA3)
- SSID nascosto
- Banda e canale di funzionamento (inclusa ACS)
- Numero massimo di client consentiti
- Valore del timeout di arresto automatico
- Lista consentita e lista bloccata per consentire all'utente di controllare i dispositivi associati
- Livello di generazione casuale dell'indirizzo MAC per il BSSID dell'AP
- 802.11ax e 802.11be
Le funzionalità del dispositivo determinano la disponibilità di questi controlli. Android 11 introduce le API per ottenere queste funzionalità. I produttori possono anche specificare le funzionalità di base dei dispositivi tramite overlay.
Tieni presente che alcune API sono API di sistema e sono limitate tramite autorizzazioni in modo che solo l'app Impostazioni del sistema possa accedervi.
Sviluppare app con API hotspot
L'app Impostazioni AOSP fornisce un'implementazione predefinita di un hotspot Wi-Fi tethered, ma non utilizza tutte le API per la configurazione del punto di accesso virtuale.
Per supportare il tethering tramite un hotspot o un hotspot solo locale, l'app deve svolgere le seguenti funzioni:
Registra un callback per ottenere le funzionalità del dispositivo utilizzando
WifiManager#registerSoftApCallback
per un hotspot con tethering oWifiManager#registerLocalOnlyHotspotSoftApCallback
per un hotspot solo locale.Il callback
SoftApCallback
fornisce i seguenti metodi:SoftApCallback#onCapabilityChanged
: fornisce informazioni sulle funzionalità del dispositivo, tra cui il numero massimo di client supportati e se sono supportati SAE o ACS.SoftApCallback#onInfoChanged
: fornisce informazioni sull'AP soft in esecuzione (valido solo dopo l'avvio), incluse informazioni su banda e frequenza.SoftApCallback#onConnectedClientsChanged
: fornisce un elenco di client connessi. Per ogni client puoi ottenere l'indirizzo MAC. Per ottenere le informazioni sull'IP, utilizza il callbackTetheringEventCallback#onClientsChanged
.SoftApCallback#onStateChanged
: fornisce aggiornamenti sullo stato dell'AP soft quando viene attivato e disattivato.SoftApCallback#onBlockedClientConnecting
: fornisce le informazioni del client bloccato con uno dei seguenti motivi per il blocco: il dispositivo ha raggiunto il numero massimo di client che può supportare o il client non è esplicitamente autorizzato a connettersi.
Per un hotspot con tethering:
- Configura la configurazione dell'hotspot soft per il tethering chiamando il metodo
WifiManager#setSoftApConfiguration
e fornendo un'istanzaSoftApConfiguration
. CostruisciSoftApConfiguration
utilizzando la classeSoftApConfiguration.Builder
. - Avvia il tethering chiamando il metodo di tethering in
TetheringManager#startTethering
.
Per hotspot solo locale:
- Avvia l'hotspot solo locale con una configurazione specifica dell'AP soft chiamando il metodo
WifiManager#startLocalOnlyHotspot
.
Implementare liste consentite e bloccate
Un tipico requisito dell'operatore è fornire all'utente i controlli dei dispositivi che possono essere associati all'AP soft. Esistono diversi meccanismi per farlo:
- Limita il numero massimo di dispositivi che possono essere associati al soft AP
utilizzando
SoftApConfiguration.Builder#setMaxNumberOfClients
. Assicurati di specificare un numero inferiore al numero massimo di client supportati dal dispositivo. Puoi ottenere il numero massimo daSoftApCapability#getMaxSupportedClients
. Fornisci un controllo dinamico utilizzando le liste consentite e bloccate:
- La configurazione predefinita di un Soft AP consente a tutti i dispositivi di associarlo al soft AP, ad eccezione dei dispositivi i cui indirizzi MAC vengono aggiunti a
SoftApConfiguration.Builder#setBlockedClientList
. Se il Soft AP è configurato con
SoftApConfiguration.Builder#setClientControlByUserEnabled(true)
, viene utilizzata la lista consentita.- L'associazione è bloccata per tutti i dispositivi i cui indirizzi MAC sono in
SoftApConfiguration.Builder#setBlockedClientList
. - È consentita l'associazione di tutti i dispositivi i cui indirizzi MAC sono in
SoftApConfiguration.Builder#setAllowedClientList
. - Tutti gli altri dispositivi (ovvero i dispositivi i cui indirizzi MAC non sono presenti nella lista consentita o nella lista bloccata) non possono essere associati, ma viene chiamato
SoftApCallback#onBlockedClientConnecting
, consentendo all'app di controllo (ovvero l'app Impostazioni) di eseguire un'azione, ad esempio chiedere all'utente una conferma e poi aggiungere il dispositivo alla lista consentita o alla lista bloccata a seconda del comportamento dell'utente.
- L'associazione è bloccata per tutti i dispositivi i cui indirizzi MAC sono in
Tieni presente che i dispositivi possono utilizzare la funzionalità della lista consentita solo se è supportata sul dispositivo. Puoi verificare il supporto del dispositivo utilizzando
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
.- La configurazione predefinita di un Soft AP consente a tutti i dispositivi di associarlo al soft AP, ad eccezione dei dispositivi i cui indirizzi MAC vengono aggiunti a
Implementazione
Per supportare il tethering tramite un hotspot o un hotspot solo locale, i produttori di dispositivi devono fornire il supporto per l'app Impostazioni, il framework e HAL/firmware:
App Impostazioni: l'app Impostazioni AOSP fornisce una linea di base per la configurazione di un hotspot tethering con SSID e credenziali di sicurezza. Questo codice può essere utilizzato così com'è o modificato per fornire funzionalità aggiuntive come descritto in Sviluppare app con le API hotspot.
Framework: il codice del framework AOSP supporta tutte le funzionalità descritte nella sezione Sviluppo di app con API hotspot.
HAL/firmware per l'hotspot: o HIDL IHostapd.hal versione 1.2 o successiva oppure AIDL IHostapd.aidl.
Personalizzazione
Per personalizzare l'implementazione, i produttori di dispositivi devono configurare i seguenti overlay e le configurazioni dell'operatore, documentati in packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: l'intervallo di tempo predefinito per il timeout di spegnimento. Valido solo seSoftApConfiguration#setAutoShutdownEnabled
è attivato. Può essere ignorato utilizzandoSoftApConfiguration#setShutdownTimeoutMillis
.config_wifiHardwareSoftapMaxClientCount
: la limitazione hardware per il numero massimo di client supportati. Il numero massimo di client supportati dal dispositivo è il minimo dei vincoli dell'hardware e dell'operatore (specificati daCarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
). Il risultato finale viene fornito all'app conSoftApCapabilities#getMaxSupportedClients
.config_wifiSofapClientForceDisconnectSupported
: indica se il dispositivo ha la possibilità di disconnettere forzatamente un client. Obbligatorio per attivare le liste consentite e bloccate. Comunicazione all'app di controllo (app Impostazioni) tramiteSoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
.- (Disponibile dalla versione 13)
config_wifiSoftapPassphraseAsciiEncodableCheck
: Indica se la passphrase del soft AP deve essere codificabile in ASCII. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: indica se eseguire o meno l'upgrade automatico della configurazione dell'impostazione della banda alle bande duali durante il ripristino della configurazione cloud quando è supportato un nuovo dispositivo.- (Disponibile a partire da 13)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: Indica se il framework aggiunge automaticamente bande inferiori alla configurazione di banda per evitare la gestione della coesistenza. config_wifiSoftApDynamicCountryCodeUpdateSupported
: indica se l'aggiornamento dinamico del codice paese in modalità AP è supportato o meno sul dispositivo- Assistenza per i canali:
config_wifiSoftap2gChannelList
,config_wifiSoftap5gChannelList
,config_wifiSoftap6gChannelList
econfig_wifiSoftap60gChannelList
. - Supporto del ripristino che specifica se le voci corrispondenti devono essere reimpostate su predefinite quando si ripristina la configurazione dell'hotspot su un nuovo dispositivo:
config_wifiSoftapResetChannelConfig
,config_wifiSoftapResetHiddenConfig
,config_wifiSoftapResetUserControlConfig
,config_wifiSoftapResetAutoShutdownTimerConfig
,config_wifiSoftapResetMaxClientSettingConfig
. Tieni presente che per impostazione predefinita sono impostati sutrue
, il che significa che i valori vengono reimpostati. Questo è fondamentale se il nuovo dispositivo non supporta la configurazione. - Funzionalità hardware:
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (Disponibile a partire da 13)
config_wifiSoftapOweTransitionSupported
- (disponibile a partire dal giorno 13)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (disponibile a partire dal giorno 13)
config_wifiSoftapIeee80211beSupported
config_wifiSoftapMacAddressCustomizationSupported
config_wifiSoftapHeSuBeamformerSupported
config_wifiSoftapHeSuBeamformeeSupported
config_wifiSoftapHeMuBeamformerSupported
config_wifiSoftapHeTwtSupported
config_wifiSoftap24ghzSupported
config_wifiSoftap5ghzSupported
config_wifiSoftap6ghzSupported
config_wifiSoftap60ghzSupported
config_wifiSoftapAcsIncludeDfs
Convalida
Android fornisce un insieme di test di unità e test della suite di test di compatibilità (CTS) per convalidare la funzionalità hotspot. La funzionalità hotspot può essere testata anche utilizzando la Vendor Test Suite (VTS).
Test delle unità
Verifica il pacchetto dell'hotspot utilizzando i seguenti test.
Test di servizio:
atest packages/modules/Wifi/service/tests/wifitests/
Test di gestione:
atest packages/modules/Wifi/framework/tests/
Test della suite di test di compatibilità (CTS)
Utilizza i test CTS per convalidare la funzionalità hotspot. CTS rileva quando la funzionalità è attivata e include automaticamente i test associati.
Per attivare i test CTS, esegui:
atest android.net.wifi.cts.WifiManagerTest
Vendor Test Suite (VTS)
Se l'interfaccia HIDL è implementata, esegui:
atest VtsHalWifiHostapdV1_2Target
Se l'interfaccia AIDL è implementata, esegui:
atest VtsHalHostapdTargetTest