Contemporaneità STA/STA Wi-Fi

Android 12 introduce la contemporaneità Wi-Fi STA/STA, che consente ai dispositivi di connettersi a due reti Wi-Fi contemporaneamente. Questa funzionalità facoltativa attiva le seguenti funzioni.

  • Preparazione prima dell'interruzione: il dispositivo si connette a una nuova rete Wi-Fi prima di interrompere la connessione esistente. Ciò si traduce in transizioni più fluide quando si passa da una rete Wi-Fi a un'altra
  • Connessione simultanea solo locale e a internet: il dispositivo si connette a una rete solo locale senza interrompere la connessione principale che fornisce a internet.
  • Connessione a internet e limitata simultanea: il dispositivo si connette a una rete con limitazioni (disponibile solo per determinate app con privilegi) senza interrompere la connessione principale di fornitura a internet del dispositivo.
  • (Android 13 o versioni successive) Più reti simultanee con connessione a internet: il dispositivo si connette a due reti, entrambe senza restrizioni e disponibili per tutte le app, e fornisce connettività a internet.

In questa pagina viene descritto il comportamento dei dispositivi quando questa funzionalità è attiva e i dettagli di implementazione per i produttori e i fornitori di dispositivi.

Implementazione

I dispositivi devono supportare quanto segue per implementare la contemporaneità STA/STA Wi-Fi:

  • Il firmware o il chip Wi-Fi deve supportare due connessioni STA contemporaneamente. Il firmware deve supportare tutte le combinazioni di canali e bande per entrambe le connessioni. Per evitare problemi di prestazioni, consigliamo di usare un chip Wi-Fi 2x2 + 2x2 DBS.

  • Il dispositivo deve supportare le seguenti API nell'implementazione AIDL o HIDL di IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • La combinazione di interfacce Wi-Fi dell'HAL deve avere due interfacce STA simultanee esposte utilizzando un formato di specifiche, ad esempio [{STA} <= 2, ...]. Per maggiori informazioni, consulta Contemporaneità multi-interfaccia Wi-Fi.

Se questi prerequisiti sono soddisfatti, implementa la contemporaneità Wi-Fi STA/STA nel seguente modo:

  1. Abilita singolarmente una o più funzioni utilizzando gli overlay di risorse di runtime (disattivati per impostazione predefinita).

    • Preparazione prima dell'interruzione: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Connessione simultanea solo locale e a internet: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Connessione a internet e limitata simultanea: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Più reti simultanee con connessione a internet: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Convalida ogni implementazione come descritto nelle rispettive sezioni.

Per un supporto migliore della contemporaneità Wi-Fi STA/STA, consigliamo di utilizzare per le app e i framework framework personalizzati OEM il metodo NetworkCallback#onCapabilitiesChanged() anziché WifiManager#getConnectionInfo(), che restituisce solo WifiInfo per una singola rete ed è stato ritirato in Android 12. Per maggiori informazioni, consulta API Wi-Fi Network Request per la connettività peer-to-peer.

Prima della pausa

La funzione make-before-break consente ai dispositivi di connettersi a una nuova rete Wi-Fi mantenendo la connessione di rete Wi-Fi esistente e disconnettendosi dalla rete precedente solo quando il dispositivo si connette correttamente alla nuova rete Wi-Fi e dispone dell'accesso a internet.

Il caso d'uso "make-before-break" risolve i seguenti problemi in Android 11 o versioni precedenti, in cui il dispositivo deve disconnettersi dalla rete Wi-Fi esistente prima di connettersi a una nuova rete (break-before-make).

  • Quando si connette a una nuova rete, il dispositivo potrebbe scoprire di aver salvato una password Wi-Fi errata o che la nuova rete non ha accesso a internet. Ciò costringe il dispositivo a tornare alla rete precedente, il che comporta un periodo di tempo significativo senza connettività Wi-Fi.

  • La vecchia rete viene disconnessa improvvisamente, il che significa che tutti i socket vengono chiusi. Le app spesso non reagiscono bene a un'improvvisa perdita di connettività e questo potrebbe portare l'utente a riscontrare alcuni secondi senza connettività a internet fino a quando la nuova connessione non viene completamente stabilita.

  • La rete predefinita cambia due volte: dalla rete Wi-Fi precedente a quella cellulare e viceversa. In questo modo le app reagiscono alle modifiche di rete due volte. Il dispositivo deve anche trascorrere un breve tempo sull'utilizzo della rete dati.

Il flusso "make-before-break" viene utilizzato solo per gli switch di rete Wi-Fi automatici avviati dal sistema operativo. Gli switch di rete avviati dall'utente utilizzano il flusso break-before-make legacy, in cui la rete precedente è completamente disconnessa prima che la nuova rete sia connessa. In alcuni casi, il flusso break-before-make viene utilizzato anche negli switch automatici avviati dal sistema operativo, ad esempio quando si passa tra due reti, entrambe configurate per l'utilizzo dell'indirizzo MAC di fabbrica.

Le app possono controllare se questo caso d'uso è supportato sul dispositivo utilizzando l'API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Convalida il passaggio prima dell'interruzione

Per convalidare l'implementazione, attiva uno switch di rete Wi-Fi automatico (assicurandoti che una rete abbia una potenza del segnale più forte di quella disponibile nella rete connessa) e verifica che il dispositivo mantenga la connessione esistente durante la connessione alla nuova rete. Per visualizzare lo stato di entrambe le interfacce Wi-Fi e verificare che entrambe siano connesse, utilizza il seguente comando.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Se la nuova rete non dispone di connettività, il dispositivo tenta di connettersi alla rete, mantenendo la connessione con la rete esistente, e interrompe il tentativo quando rileva che la nuova rete non ha internet. Il dispositivo continua quindi a utilizzare la connessione esistente come rete Wi-Fi principale.

Connessione a internet e solo locale contemporaneamente

La funzione di connessione simultanea solo locale e a internet consente ai dispositivi di connettersi a una connessione solo locale, ad esempio a un dispositivo IoT, in concomitanza con la rete principale di fornitura di internet. Questa funzione migliora l'esperienza utente quando si connette direttamente a dispositivi IoT, come le fotocamere, che è possibile tramite l'API WifiNetworkSpecifier aggiunta in Android 10.

In Android 11 e versioni precedenti, i dispositivi si disconnettono dalla rete Wi-Fi principale quando si connettono a un dispositivo IoT, con conseguente perdita di connettività a internet (a meno che per il dispositivo non sia disponibile un altro tipo di trasporto, ad esempio la rete dati).

Le app possono controllare se questa funzione è supportata sul dispositivo utilizzando l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Per maggiori informazioni sulle modifiche alla funzione simultanea solo locale e di connessione a internet in Android 12, consulta l'articolo sull'API Wi-Fi Network Request per la connettività peer-to-peer.

Convalida solo la connessione locale e la connessione a internet

Per convalidare questa funzione, utilizza il test CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

Connessione a internet e limitata simultanea

La funzione connessione simultanea limitata e connessione a internet consente al dispositivo di connettersi contemporaneamente a una rete Wi-Fi principale per l'utente e a una rete Wi-Fi con restrizioni disponibile solo per determinate app.

Le app possono controllare se questa funzione è supportata sul dispositivo utilizzando l'API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

Per consentire a un dispositivo di connettersi a reti Wi-Fi secondarie limitate, procedi nel seguente modo:

  1. Aggiungi i suggerimenti per le reti Wi-Fi con setOemPaid o setOemPrivate impostati su true.

  2. In ConnectivityManager, invia una NetworkRequest con le funzionalità corrispondenti:

Quando il dispositivo rileva i risultati della scansione con una rete corrispondente al suggerimento privato OEM o a pagamento OEM, vi si connette automaticamente come rete secondaria.

Convalida la connessione a internet e limitata simultanea

Per convalidare questa funzione, utilizza il test CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

Più reti in contemporanea con connessione a internet

Disponibile per Android 13 o versioni successive, la funzionalità più reti simultanee con connessione a internet consente al dispositivo di connettersi contemporaneamente a due reti (AP) senza restrizioni (tutte le app hanno accesso) e di fornire accesso a internet.

Le app possono controllare se questa funzionalità è supportata sul dispositivo utilizzando il metodo WifiManager#isStaConcurrencyForMultiInternetSupported().

Se la funzionalità è supportata, le app con privilegi possono abilitarla utilizzando il metodo WifiManager#setStaConcurrencyForMultiInternetMode(int mode). La funzionalità prevede le seguenti modalità:

Per eseguire query sulla modalità delle funzionalità attualmente attiva, usa il metodo WifiManager#getStaConcurrencyForMultiInternetMode().

Quando la funzionalità è attiva, segui questi passaggi per richiedere un'ulteriore rete Wi-Fi che fornisce internet.

  1. Crea un indicatore di rete Wi-Fi utilizzando WifiNetworkSpecifier.Builder. Scegli una banda per l'indicatore utilizzando il metodo setBand(). Non specificare SSID o BSSID perché la rete aggiuntiva per la banda specificata viene selezionata dal framework Wi-Fi.

  2. Con ConnectivityManager, crea un elemento NetworkRequest con la funzionalità NET_CAPABILITY_INTERNET.

  3. Aggiungi l'indicatore alla richiesta di rete insieme a un'istanza NetworkCallback per monitorare lo stato della richiesta ed inviare la richiesta a ConnectivityManager. Se nel risultato della scansione è disponibile una rete salvata con la banda richiesta e la connessione alla rete va a buon fine, NetworkCallback.onAvailable() viene richiamato sull'oggetto di callback.

Convalida più reti simultanee con connessione a internet

Per convalidare questa funzione, utilizza il seguente test CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Linee guida per i chip Wi-Fi del fornitore

Per i fornitori di chip Wi-Fi, attieniti alle seguenti linee guida per supportare la contemporaneità STA/STA Wi-Fi.

Il chip Wi-Fi deve supportare le connessioni STA doppie simultanee. Ciò significa che supporta:

  • Ogni interfaccia STA dispone di un MAC univoco programmabile dal framework.
  • L'interfaccia STA secondaria può essere creata ed eliminata in modo dinamico.
  • Ogni STA può essere connessa a un SSID diverso (all'interno della stessa banda o di una banda diversa).
  • Ogni STA può essere connessa allo stesso SSID (nella stessa banda o in una banda diversa). I due STA non devono mai essere collegati allo stesso BSSID.

Le funzionalità critiche devono operare sulla base di ogni singola interfaccia e devono essere disponibili nell'interfaccia principale. Di seguito è riportato un elenco di queste funzionalità critiche:

  • Il roaming deve essere supportato almeno sull'interfaccia principale (impostata utilizzando IWifiChip.setMultiStaPrimaryConnection()). Se il roaming è supportato su entrambe le interfacce, le decisioni su una connessione non devono essere in contrasto con la seconda connessione simultanea. Ad esempio, un'interfaccia non deve spostarsi sul BSSID dell'altra connessione.

  • L'APF (e altri offload come ARP e NS) devono essere supportati almeno sull'interfaccia principale (impostata utilizzando IWifiChip.setMultiStaPrimaryConnection()).

  • Le statistiche del livello di link devono operare sulla base dell'interfaccia.

Di seguito sono riportate le implementazioni consigliate dei chip Wi-Fi per diversi scenari di contemporaneità:

  • Il chip Wi-Fi deve consentire al framework di chiamare IWifiChip.setMultiStaUseCase() con una delle seguenti costanti per specificare la funzione corrente:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: specifica la funzione Make-Before-Break. La qualità della connessione principale deve avere la priorità sulla connessione secondaria.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: specifica la connessione simultanea solo locale e a internet o la funzione Connessione a internet e limitata in parallelo. La qualità di entrambe le connessioni deve avere la stessa priorità.
  • Poiché due STA simultanee possono portare alle modalità operative di MCC, SCC e DBS, l'implementazione del fornitore deve scegliere la migliore configurazione radio quando il framework chiama IWifiChip.setMultiStaUseCase() per indicare la funzione. Ecco alcune linee guida generali:

    • È preferibile 2x2+2x2 DBS, se disponibile.
    • Se possibile, evita DBS 1x1+1x1 a causa dell'impatto eccessivo sulla qualità della connessione. Preferisci il Centro clienti.
    • Il ciclo di servizio del Centro clienti deve essere configurabile dal driver o dal firmware per le varie funzioni. Il framework non imposta direttamente il ciclo di servizio del Centro clienti, ma esegue query su queste informazioni utilizzando StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Se utilizzi il Centro clienti, ti consigliamo i seguenti cicli di servizio tra le connessioni principali e secondarie:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% primario, 30% secondario.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% primaria, 50% secondaria.