Contemporaneità STA/STA Wi-Fi

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

  • Crea prima di interrompere: il dispositivo si connette a una nuova rete Wi-Fi prima di interrompere la connessione esistente. Ciò comporta transizioni più fluide quando passi da una rete Wi-Fi all'altra
  • Connessione a internet e solo locale simultanea: il dispositivo si connette a una rete solo locale senza interrompere la connessione a internet principale del dispositivo.
  • Connessione a internet e con rete con limitazioni contemporaneamente: il dispositivo si connette a una rete con limitazioni (disponibile solo per alcune app privilegiate) senza interrompere la connessione a internet principale 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.

Questa pagina descrive il comportamento del dispositivo quando questa funzionalità è attivata e i dettagli di implementazione per i produttori e i fornitori di dispositivi.

Implementazione

Per implementare la concorrenza STA/STA Wi-Fi, i dispositivi devono supportare quanto segue:

  • Il chip o il firmware 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, ti consigliamo di utilizzare un chip Wi-Fi compatibile con DBS 2x2+2x2.

  • 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 HAL deve avere due interfacce STA contemporaneamente esposte utilizzando un formato di specifica come [{STA} <= 2, ...]. Per maggiori informazioni, consulta la sezione Contemporaneità multi-interfaccia Wi-Fi.

Se questi prerequisiti sono soddisfatti, implementa la concorrenza STA/STA Wi-Fi come segue:

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

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

Per supportare meglio la concorrenza STA/STA Wi-Fi, consigliamo alle app e ai framework personalizzati dall'OEM di utilizzare il metodo NetworkCallback#onCapabilitiesChanged() anziché WifiManager#getConnectionInfo(), che restituisce WifiInfo solo 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.

Fai prima dell'interruzione

La funzione make-before-break consente ai dispositivi di connettersi a una nuova rete Wi-Fi mantenendo la connessione alla rete Wi-Fi esistente, per poi disconnettersi dalla vecchia rete solo quando si connette correttamente alla nuova rete Wi-Fi e ha 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. Il dispositivo viene costretto a tornare alla vecchia rete, con un tempo di interruzione della connettività Wi-Fi molto lungo.

  • La vecchia rete viene disconnessa improvvisamente, il che significa che tutti i socket vengono chiusi. Spesso le app non reagiscono bene a una perdita improvvisa della connettività e questo potrebbe causare alcuni secondi di interruzione della connessione a internet fino a quando la nuova connessione non viene stabilita completamente.

  • La rete predefinita cambia due volte, dalla vecchia rete Wi-Fi alla rete mobile, poi dalla rete mobile alla nuova rete Wi-Fi. Di conseguenza, le app reagiscono alle modifiche della rete due volte. Il dispositivo deve anche utilizzare la rete dati per un breve periodo di tempo.

Il flusso di creazione prima dell'interruzione viene utilizzato solo per i cambi di rete Wi-Fi automatici avviati dal sistema operativo. I cambi di rete avviati dall'utente utilizzano il flusso legacy break-before-make, in cui la rete precedente viene completamente disconnessa prima che venga collegata la nuova rete. In alcuni casi, il flusso di interruzione prima dell'inserimento viene utilizzato anche nei passaggi automatici avviati dal sistema operativo, ad esempio quando si passa da una rete all'altra entrambe configurate per utilizzare l'indirizzo MAC di fabbrica.

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

Convalida del controllo 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 siano entrambe 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 ha 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 simultanea

La funzione di connessione contemporaneamente solo locale e a internet consente ai dispositivi di connettersi a una connessione solo locale, ad esempio a un dispositivo IoT, contemporaneamente alla rete di provider internet principale. Questa funzione migliora l'esperienza utente quando ci si connette direttamente ai dispositivi IoT, come le videocamere, il che è possibile tramite l'API WifiNetworkSpecifier aggiunta in Android 10.

In Android 11 e versioni precedenti, i dispositivi si scollegano dalla rete Wi-Fi principale quando si connettono a un dispositivo IoT, con conseguente perdita della connettività a internet (a meno che sul dispositivo non sia disponibile un altro tipo di trasporto, come i dati di rete mobile).

Le app possono verificare se questa funzionalità è supportata sul dispositivo utilizzando l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Per ulteriori informazioni sulle modifiche alla funzione di connessione contemporaneamente solo locale e a internet in Android 12, consulta API Wi-Fi Network Request per la connettività peer-to-peer.

Convalida la connessione locale e a internet

Per convalidare questa funzione, utilizza il MultiStaConcurrencyWifiNetworkSpecifierTest test CTS.

Connessione a internet e connessioni limitate contemporaneamente

La funzione Connessione con limitazioni e a internet contemporaneamente consente al dispositivo di connettersi contemporaneamente a una rete Wi-Fi principale per l'utente e a una rete Wi-Fi con limitazioni disponibile solo per alcune app.

Le app possono verificare se questa funzionalità è 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 suggerimenti per le reti Wi-Fi con setOemPaid o setOemPrivate impostato su true.

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

Quando il dispositivo rileva risultati di ricerca con una rete corrispondente al suggerimento privato o pagato dell'OEM, si connette automaticamente come rete secondaria.

Convalida della connessione a internet e con accesso limitato simultanea

Per convalidare questa funzione, utilizza il MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest test CTS.

Più reti simultanee 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 verificare se questa funzionalità è supportata sul dispositivo utilizzando il metodo WifiManager#isStaConcurrencyForMultiInternetSupported().

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

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

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

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

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

  3. Aggiungi lo specificatore alla richiesta di rete insieme a un'istanza di NetworkCallback per monitorare lo stato della richiesta e inviala 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 di 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 dei fornitori

I fornitori di chip Wi-Fi devono seguire le linee guida riportate di seguito per supportare la concorrenza STA/STA Wi-Fi.

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

  • Ogni interfaccia STA ha 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 (nella stessa banda o in un'altra banda).
  • Ogni STA può essere connessa allo stesso SSID (nella stessa banda o in un'altra banda). I due STA non devono mai essere connessi allo stesso BSSID.

Le funzionalità critiche devono funzionare su base interfaccia e devono essere disponibili sull'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 prese su una connessione non devono entrare in conflitto con la seconda connessione simultanea. Ad esempio, un'interfaccia non deve eseguire il roaming sul BSSID dell'altra connessione.

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

  • Le statistiche del livello di collegamento devono funzionare su base di interfaccia.

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

  • 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 Esegui prima dell'interruzione. La qualità della connessione principale deve avere la priorità sulla connessione secondaria.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: specifica la funzione contemporanea solo locale e connessione a internet o contemporanea con connessione a internet limitata. La qualità di entrambe le connessioni deve avere la stessa priorità.
  • Poiché gli STA doppi simultanei possono portare a modalità di funzionamento MCC, SCC e DBS, l'implementazione del fornitore deve scegliere la configurazione radio migliore quando il framework chiama IWifiChip.setMultiStaUseCase() per indicare la funzione. Di seguito sono riportate le linee guida generali:

    • È preferibile 2x2+2x2 DBS, se disponibile.
    • Se possibile, evita l'uso di DBS 1x1+1x1 a causa dell'impatto eccessivo sulla qualità della connessione. Ti consigliamo di utilizzare invece la piattaforma MCC.
    • 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 lavoro del MCC, ma esegue query su queste informazioni utilizzando StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Se utilizzi il Centro per i partner di Google, ti consigliamo i seguenti cicli di lavoro tra le connessioni principali e secondarie:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% principale, 30% secondario.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% principale, 50% secondario.