Android fornisce il supporto per l'hotspot Wi-Fi (Soft AP), incluso 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 operativi (incluso ACS)
- Numero massimo di client consentiti
- Valore di timeout di arresto automatico
- Lista consentita e lista bloccata per consentire all'utente di controllare i dispositivi associati
- Livello di randomizzazione 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 di dispositivi possono anche specificare le funzionalità di base del dispositivo utilizzando gli overlay.
Sviluppare app con le API hotspot
Un'implementazione predefinita di un hotspot Wi-Fi con tethering è fornita dall'app Impostazioni di Android Open Source Project (AOSP), ma non utilizza tutte le API per la configurazione Soft AP.
Per supportare il tethering tramite un hotspot o un hotspot solo locale, l'app deve eseguire le seguenti funzioni:
Registra un callback per ottenere le funzionalità del dispositivo utilizzando
WifiManager#registerSoftApCallbackper un hotspot con tethering oWifiManager#registerLocalOnlyHotspotSoftApCallbackper un hotspot solo locale.Il callback
SoftApCallbackfornisce i seguenti metodi:SoftApCallback#onCapabilityChanged: fornisce informazioni sulle funzionalità del dispositivo, incluso il numero massimo di client supportati e se SAE o ACS sono supportati.SoftApCallback#onInfoChanged: fornisce informazioni sul Soft AP in esecuzione (valido solo una volta avviato), incluse le 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 IP, utilizza il callbackTetheringEventCallback#onClientsChanged.SoftApCallback#onStateChanged: fornisce aggiornamenti sullo stato del Soft AP man mano che viene abilitato e disabilitato.SoftApCallback#onBlockedClientConnecting: fornisce le informazioni sul 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.SoftApCallback#onClientsDisconnected: fornisce un elenco dei client disconnessi. Per ogni client, puoi ottenere il motivo della disconnessione.
Per un hotspot con tethering:
- Configura la configurazione Soft AP per il tethering chiamando il
WifiManager#setSoftApConfigurationmetodo e fornendo un'istanzaSoftApConfiguration. CreaSoftApConfigurationutilizzando laSoftApConfiguration.Builderclasse. - Avvia il tethering chiamando il metodo di tethering all'indirizzo
TetheringManager#startTethering.
Per l'hotspot solo locale:
- Avvia l'hotspot solo locale con una configurazione Soft AP specifica by
calling the
WifiManager#startLocalOnlyHotspotmethod.
Implementare le liste consentite e le liste bloccate
Un requisito tipico dell'operatore è fornire all'utente i controlli dei dispositivi autorizzati ad associarsi al Soft AP. Esistono diversi meccanismi per farlo:
- Limita il numero massimo di dispositivi che possono associarsi 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 le liste bloccate:
- La configurazione predefinita di un Soft AP consente a tutti i dispositivi di associarsi 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.- A tutti i dispositivi i cui indirizzi MAC sono presenti in
SoftApConfiguration.Builder#setBlockedClientListviene impedita l'associazione. - A tutti i dispositivi i cui indirizzi MAC sono presenti in
SoftApConfiguration.Builder#setAllowedClientListè consentita l'associazione. - A tutti gli altri dispositivi (ovvero i dispositivi i cui indirizzi MAC non sono presenti nella lista consentita o nella lista bloccata) viene impedita l'associazione, ma viene chiamato
SoftApCallback#onBlockedClientConnecting, consentendo all'app di controllo (ovvero l'app Impostazioni ) di intraprendere 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.
- A tutti i dispositivi i cui indirizzi MAC sono presenti 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 associarsi 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 un'app Impostazioni, un framework e il supporto HAL/firmware:
App Impostazioni: l'app Impostazioni di Android Open Source Project (AOSP) fornisce una base per la configurazione di un hotspot con 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 in Sviluppare app con le API hotspot.
HAL/firmware per hotspot: la versione 1.2 o successive di HIDL
IHostapd.halo AIDLIHostapd.aidl.
Personalizzazione
Per personalizzare l'implementazione, consigliamo ai produttori di dispositivi di configurare i
seguenti overlay e configurazioni dell'operatore, documentati in
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml:
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds: l'intervallo di timeout di arresto predefinito. Valido solo seSoftApConfiguration#setAutoShutdownEnabledè abilitato. Può essere sostituito 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 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 è in grado di forzare la disconnessione di un client. Necessario per abilitare le liste consentite e le liste bloccate. Comunicato all'app di controllo (app Impostazioni) tramiteSoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).- (Disponibile dalla versione 13)
config_wifiSoftapPassphraseAsciiEncodableCheck: indica se la passphrase Soft AP deve essere codificabile in ASCII. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: indica se eseguire o meno l'upgrade automatico della configurazione delle impostazioni della banda a doppia banda durante il ripristino della configurazione cloud quando è supportato un nuovo dispositivo.- (Disponibile dalla versione 13)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: indica se il framework aggiunge automaticamente le bande inferiori alla configurazione della banda per evitare la gestione della coesistenza. config_wifiSoftApDynamicCountryCodeUpdateSupported: indica se l'aggiornamento dinamico del codice paese in modalità AP è supportato sul dispositivo.- Supporto dei canali:
config_wifiSoftap2gChannelList,config_wifiSoftap5gChannelList,config_wifiSoftap6gChannelListeconfig_wifiSoftap60gChannelList. - Supporto per il ripristino che specifica se le voci corrispondenti vengono reimpostate sui valori predefiniti quando la configurazione dell'hotspot viene ripristinata su un nuovo dispositivo:
config_wifiSoftapResetChannelConfig,config_wifiSoftapResetHiddenConfig,config_wifiSoftapResetUserControlConfig,config_wifiSoftapResetAutoShutdownTimerConfig,config_wifiSoftapResetMaxClientSettingConfig. Tieni presente che questi valori sono impostati sutrueper impostazione predefinita, il che significa che i valori vengono reimpostati. Questo è fondamentale se il nuovo dispositivo non supporta la configurazione. - Funzionalità hardware:
config_wifi_softap_acs_supportedconfig_wifi_softap_sae_supported- (Disponibile dalla versione 13)
config_wifiSoftapOweTransitionSupported - (Disponibile dalla versione 13)
config_wifiSoftapOweSupported config_wifi_softap_ieee80211ac_supportedconfig_wifiSoftapIeee80211axSupported- (Disponibile dalla versione 13)
config_wifiSoftapIeee80211beSupported config_wifiSoftapMacAddressCustomizationSupportedconfig_wifiSoftapHeSuBeamformerSupportedconfig_wifiSoftapHeSuBeamformeeSupportedconfig_wifiSoftapHeMuBeamformerSupportedconfig_wifiSoftapHeTwtSupportedconfig_wifiSoftap24ghzSupportedconfig_wifiSoftap5ghzSupportedconfig_wifiSoftap6ghzSupportedconfig_wifiSoftap60ghzSupportedconfig_wifiSoftapAcsIncludeDfs
Convalida
Android fornisce una serie di test delle 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 hotspot utilizzando i seguenti test.
Test del servizio:
atest packages/modules/Wifi/service/tests/wifitests/Test del gestore:
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à è abilitata e include automaticamente i test associati.
Per attivare i test CTS, esegui:
atest android.net.wifi.cts.WifiManagerTestVendor Test Suite (VTS)
Se l'interfaccia HIDL è implementata, esegui:
atest VtsHalWifiHostapdV1_2TargetSe l'interfaccia AIDL è implementata, esegui:
atest VtsHalHostapdTargetTest