Hotspot Wi-Fi (Soft AP)

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 operativa e canale (incluso ACS)
  • Numero massimo di client consentiti
  • Valore timeout arresto automatico
  • Lista consentita e lista bloccata per consentire il controllo utente dei dispositivi associati
  • Livello di randomizzazione MAC per l'AP BSSID
  • 802.11ax e 802.11be

La disponibilità di questi controlli dipende dalle funzionalità del dispositivo. 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.

Sviluppa app con API hotspot

L'implementazione predefinita di un hotspot Wi-Fi con tethering è fornita dall'app Impostazioni AOSP, ma non utilizza tutte le API per la configurazione del soft AP.

Per supportare il tethering tramite un hotspot o un hotspot solo locale, l'app deve svolgere le seguenti funzioni:

  1. Registra un callback per ottenere le funzionalità del dispositivo utilizzando WifiManager#registerSoftApCallback per un hotspot con tethering o WifiManager#registerLocalOnlyHotspotSoftApCallback per un hotspot solo locale.

    Il callback SoftApCallback fornisce i seguenti metodi:

    • SoftApCallback#onCapabilityChanged: fornisce informazioni sulle funzionalità del dispositivo, incluso il numero massimo di client supportati e se sono supportati SAE o ACS.
    • SoftApCallback#onInfoChanged: fornisce informazioni sul soft AP in esecuzione (valido solo una volta avviato), 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 callback TetheringEventCallback#onClientsChanged.
    • SoftApCallback#onStateChanged: fornisce aggiornamenti sullo stato del Soft AP 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:

  1. Configura la configurazione soft AP per il tethering chiamando il metodo WifiManager#setSoftApConfiguration e fornendo un'istanza SoftApConfiguration. Costruire SoftApConfiguration utilizzando la classe SoftApConfiguration.Builder.
  2. Avvia il tethering chiamando il metodo di tethering al numero TetheringManager#startTethering.

Per hotspot solo locale:

  1. Avvia l'hotspot solo locale con una configurazione soft AP specifica chiamando il metodo WifiManager#startLocalOnlyHotspot.

Implementare elenchi di elementi consentiti e bloccati

Un tipico requisito dell'operatore è fornire all'utente i controlli dei dispositivi che possono essere associati al Soft AP. 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 da SoftApCapability#getMaxSupportedClients.
  • Fornire un controllo dinamico utilizzando 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 viene bloccata per tutti i dispositivi i cui indirizzi MAC si trovano in SoftApConfiguration.Builder#setBlockedClientList.
      • È consentita l'associazione a tutti i dispositivi i cui indirizzi MAC si trovano in SoftApConfiguration.Builder#setAllowedClientList.
      • Per tutti gli altri dispositivi (ovvero i dispositivi i cui indirizzi MAC non sono presenti nell'elenco di elementi consentiti o bloccati) viene bloccata l'associazione, ma viene chiamato SoftApCallback#onBlockedClientConnecting, consentendo all'app di controllo (ovvero l'app Impostazioni) di eseguire un'azione, ad esempio chiedere all'utente la conferma e quindi aggiungere il dispositivo alla lista consentita o alla lista bloccata a seconda del comportamento dell'utente.

    Tieni presente che i dispositivi possono utilizzare la funzionalità lista consentita solo se è supportata. Puoi verificare il supporto del dispositivo utilizzando SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).

Implementazione

Per supportare il tethering tramite un hotspot o un hotspot solo locale, i produttori di dispositivi devono fornire il supporto per app Impostazioni, framework e HAL/firmware:

  • App Impostazioni: l'app Impostazioni AOSP fornisce una base per la configurazione di un hotspot di tethering con SSID e credenziali di sicurezza. Questo codice può essere utilizzato così com'è o modificato per fornire funzionalità aggiuntive, come descritto nella sezione Sviluppo di app con API hotspot.

  • Framework: il codice del framework AOSP supporta tutte le funzionalità descritte nella sezione Sviluppo di app con API hotspot.

  • HAL/firmware per hotspot: Utilizzare la versione 1.2 o successiva del protocollo HIDL IHostapd.hal oppure il file AIDL IHostapd.aidl.

Personalizzazione

Per personalizzare l'implementazione, i produttori di dispositivi devono configurare le seguenti configurazioni di overlay e operatori, documentate in packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml:

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds: l'intervallo predefinito per il timeout di arresto. Valido solo se SoftApConfiguration#setAutoShutdownEnabled è abilitato. Può essere sostituito utilizzando SoftApConfiguration#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 da CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT). Il risultato finale viene fornito all'app con SoftApCapabilities#getMaxSupportedClients.
  • config_wifiSofapClientForceDisconnectSupported: se il dispositivo ha la possibilità di forzare la disconnessione di un client. Obbligatorio per attivare le liste consentite e bloccate. Comunicazione all'app di controllo (app Impostazioni) tramite SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).
  • (Disponibile a partire da 13) config_wifiSoftapPassphraseAsciiEncodableCheck: Indica se la passphrase soft AP deve essere codificabile con ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: se eseguire o meno l'upgrade automatico della configurazione delle impostazioni di banda a dual band 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: se il dispositivo supporta o meno l'aggiornamento dinamico del codice paese in modalità AP
  • Canali supportati: config_wifiSoftap2gChannelList, config_wifiSoftap5gChannelList, config_wifiSoftap6gChannelList e config_wifiSoftap60gChannelList.
  • Ripristina il supporto che specifica se le voci corrispondenti vengono reimpostate sui valori predefiniti quando si ripristina la configurazione dell'hotspot su un nuovo dispositivo: config_wifiSoftapResetChannelConfig, config_wifiSoftapResetHiddenConfig, config_wifiSoftapResetUserControlConfig, config_wifiSoftapResetAutoShutdownTimerConfig, config_wifiSoftapResetMaxClientSettingConfig. Tieni presente che questi sono impostati su true per 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_supported
    • config_wifi_softap_sae_supported
    • (Disponibile a partire da 13) config_wifiSoftapOweTransitionSupported
    • (Disponibile a partire da 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Disponibile a partire da 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 offre una serie di test delle unità e del Compatibility Test Suite (CTS) per convalidare la funzionalità hotspot. La funzionalità hotspot può essere testata anche utilizzando la suite di test del fornitore.

Test delle unità

Verifica il pacchetto hotspot utilizzando i seguenti test.

  • Test di servizio:

    atest packages/modules/Wifi/service/tests/wifitests/
    
  • Test del gestore:

    atest packages/modules/Wifi/framework/tests/
    

Test della Compatibility Test Suite (CTS)

Utilizza i test CTS per convalidare la funzionalità degli hotspot. Il CTS rileva quando la funzionalità è attivata e include automaticamente i test associati.

Per attivare i test CTS, esegui:

atest android.net.wifi.cts.WifiManagerTest

Suite di test del fornitore (VTS)

Se l'interfaccia HIDL è implementata, esegui:

atest VtsHalWifiHostapdV1_2Target

Se l'interfaccia AIDL è implementata, esegui:

atest VtsHalHostapdTargetTest