Hotspot Wi-Fi (Soft AP)

Android supporta 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 la configurazione di quanto segue:

  • SSID e BSSID
  • Tipo di sicurezza (incluso WPA3)
  • SSID nascosto
  • Banda e canale di funzionamento (incluso ACS)
  • Numero massimo di client consentiti
  • Valore di timeout di arresto automatico
  • Liste consentite e bloccate per consentire il controllo degli utenti sui dispositivi associati
  • Livello di randomizzazione dell'indirizzo MAC per il BSSID del punto di accesso
  • 802.11ax e 802.11be

Le funzionalità del dispositivo determinano la disponibilità di questi controlli. Android 11 introduce API per ottenere queste funzionalità. I produttori di dispositivi possono anche specificare le funzionalità di base del dispositivo utilizzando le sovrapposizioni.

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 le API hotspot

L'app Impostazioni AOSP fornisce un'implementazione predefinita di un hotspot Wi-Fi tethering, ma non utilizza tutte le API per la configurazione di Soft AP.

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

  1. Registra un callback per ottenere le funzionalità del dispositivo utilizzando WifiManager#registerSoftApCallback per un hotspot 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 SAE o ACS sono supportati.
    • SoftApCallback#onInfoChanged: Fornisce informazioni sulla Soft AP in esecuzione (valide solo una volta avviata), incluse informazioni su banda e frequenza.
    • SoftApCallback#onConnectedClientsChanged: Fornisce un elenco dei 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 dell'AP software man mano che viene attivato e disattivato.
    • SoftApCallback#onBlockedClientConnecting: Fornisce le informazioni sul client bloccato con uno dei seguenti motivi del 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 tethering:

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

Per l'hotspot solo locale:

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

Implementare le liste consentite e bloccate

Un requisito tipico 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 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 da SoftApCapability#getMaxSupportedClients.
  • Fornisci un controllo dinamico utilizzando le liste consentite e 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 sono aggiunti a SoftApConfiguration.Builder#setBlockedClientList.
    • Se l'AP virtuale è configurato con SoftApConfiguration.Builder#setClientControlByUserEnabled(true), viene utilizzata la lista consentita.

      • Tutti i dispositivi i cui indirizzi MAC si trovano in SoftApConfiguration.Builder#setBlockedClientList non possono essere associati.
      • Tutti i dispositivi i cui indirizzi MAC si trovano in SoftApConfiguration.Builder#setAllowedClientList sono autorizzati all'associazione.
      • Tutti gli altri dispositivi (ovvero i dispositivi i cui indirizzi MAC non sono presenti nella lista consentita o bloccata) non possono essere associati, 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.

    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).

Implementazione

Per supportare il tethering tramite un hotspot o un hotspot solo locale, i produttori di dispositivi devono fornire l'app Impostazioni, il framework e il supporto 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 in Sviluppare app con API hotspot.

  • Framework:il codice del framework AOSP supporta tutte le funzionalità descritte in Sviluppare app con le API hotspot.

  • HAL/firmware per l'hotspot: HIDL IHostapd.hal versione 1.2 o successive oppure AIDL IHostapd.aidl.

Personalizzazione

Per personalizzare l'implementazione, i produttori di dispositivi devono 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 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: indica se il dispositivo ha la possibilità di forzare la disconnessione di un client. Necessario per abilitare le liste consentite e bloccate. Comunicato all'app di controllo (app Impostazioni) tramite SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).
  • (Disponibile dalla versione 13) config_wifiSoftapPassphraseAsciiEncodableCheck: Indica se la passphrase dell'AP soft deve essere codificabile in ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: indica se eseguire o meno l'upgrade automatico della configurazione dell'impostazione della banda a doppia banda durante il ripristino della configurazione cloud quando viene supportato un nuovo dispositivo.
  • (Disponibile dalla versione 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: Indica se il framework aggiunge automaticamente le bande inferiori alla configurazione delle bande 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_wifiSoftap6gChannelList e config_wifiSoftap60gChannelList.
  • Supporto del ripristino che specifica se le voci corrispondenti vengono reimpostate sui valori predefiniti durante il ripristino della configurazione dell'hotspot su un nuovo dispositivo: config_wifiSoftapResetChannelConfig, config_wifiSoftapResetHiddenConfig, config_wifiSoftapResetUserControlConfig, config_wifiSoftapResetAutoShutdownTimerConfig, config_wifiSoftapResetMaxClientSettingConfig. Tieni presente che questi valori sono impostati su true per impostazione predefinita, il che significa che vengono ripristinati. Ciò è fondamentale se il nuovo dispositivo non supporta la configurazione.
  • Funzionalità hardware:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Disponibile dal giorno 13) config_wifiSoftapOweTransitionSupported
    • (Disponibile dal giorno 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Disponibile 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 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 suite di test del fornitore (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.WifiManagerTest

Suite di test del fornitore (VTS)

Se l'interfaccia HIDL è implementata, esegui:

atest VtsHalWifiHostapdV1_2Target

Se l'interfaccia AIDL è implementata, esegui:

atest VtsHalHostapdTargetTest