Android 12 introduce la concorrenza Wi-Fi STA/STA, che consente ai dispositivi di connettersi a due reti Wi-Fi contemporaneamente. Questa funzionalità facoltativa attiva le seguenti funzioni.
- Make-before-break: 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 all'altra.
- Connessione simultanea solo locale e a internet: il dispositivo si connette a una rete solo locale senza interrompere la connessione principale che fornisce l'accesso a internet.
- Connessione a internet e con restrizioni simultanea: il dispositivo si connette a una rete con restrizioni (disponibile solo per alcune app con privilegi) senza interrompere la connessione principale del dispositivo che fornisce l'accesso a internet.
- (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 la 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 Wi-Fi STA/STA, i dispositivi devono supportare quanto segue:
Il chip Wi-Fi o il firmware deve supportare due connessioni STA contemporanee. 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 simultanee esposte utilizzando un formato di specifica come
[{STA} <= 2, ...]
. Per maggiori informazioni, consulta Concorrenza multi-interfaccia Wi-Fi.
Se questi prerequisiti sono soddisfatti, implementa la concorrenza Wi-Fi STA/STA procedendo nel seguente modo:
Abilita una o più funzioni singolarmente utilizzando overlay delle risorse di runtime (disabilitati per impostazione predefinita).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Connessione simultanea solo locale e a internet:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Connessione a internet e con limitazioni simultanee:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Più reti simultanee con connessione a internet:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
Convalida ogni implementazione come descritto nelle rispettive sezioni.
Per supportare meglio la concorrenza STA/STA Wi-Fi, consigliamo che i framework e le app personalizzati dall'OEM utilizzino 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.
Make-before-break
La funzione make-before-break consente ai dispositivi di connettersi a una nuova rete Wi-Fi mantenendo la connessione alla rete Wi-Fi esistente e disconnettendosi 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 rilevare che è stata salvata una password del Wi-Fi errata o che la nuova rete non ha accesso a internet. In questo modo, il dispositivo torna alla vecchia rete, con un conseguente periodo di tempo significativo senza connettività Wi-Fi.
La vecchia rete viene disconnessa bruscamente, il che significa che tutti i socket vengono chiusi. Spesso le app non reagiscono bene a un'improvvisa perdita di connettività e ciò potrebbe portare l'utente a sperimentare alcuni secondi senza connettività a internet finché 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. In questo modo, le app reagiscono due volte alle modifiche di rete. Il dispositivo deve anche utilizzare la rete dati per un breve periodo di tempo.
Il flusso make-before-break viene utilizzato solo per i cambi automatici di rete Wi-Fi avviati dal sistema operativo. I cambi di rete avviati dall'utente utilizzano il flusso interruzione prima della creazione precedente, in cui la rete precedente viene completamente disconnessa prima che venga connessa la nuova rete. In alcuni casi, il flusso break-before-make viene utilizzato anche negli switch 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 make-before-break
Per convalidare l'implementazione, attiva un cambio automatico della rete Wi-Fi (assicurandoti che sia disponibile una rete con un'intensità del segnale più forte di quella a cui è connesso) 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 accesso a internet. Il dispositivo continua a utilizzare la connessione esistente come rete Wi-Fi principale.
Connessione a internet e solo locale simultanea
La funzione di connessione locale e a internet simultanea consente ai dispositivi di connettersi a una connessione solo locale, ad esempio a un dispositivo IoT, contemporaneamente alla rete principale che fornisce l'accesso a internet. Questa funzione migliora
l'esperienza utente quando ci si connette direttamente a dispositivi IoT, come le videocamere,
cosa 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 della connettività a internet (a meno che il dispositivo non disponga di un altro tipo di trasporto disponibile, come i dati mobili).
Le app possono verificare se questa funzione è supportata sul dispositivo utilizzando l'API
WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Per ulteriori informazioni sulle modifiche alla funzione di connessione simultanea solo locale e a internet in Android 12, consulta la pagina API di richiesta di rete Wi-Fi per la connettività peer-to-peer.
Convalida della connessione solo locale e a internet
Per convalidare questa funzione, utilizza il test CTS MultiStaConcurrencyWifiNetworkSpecifierTest
.
Connessione a internet e con limitazioni simultanee
La funzione connessione simultanea limitata e a internet consente al dispositivo di connettersi contemporaneamente a una rete Wi-Fi principale per l'utente e a una rete Wi-Fi limitata disponibile solo per app selezionate.
Le app possono verificare se questa funzione è supportata sul dispositivo utilizzando l'API
WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Per consentire a un dispositivo di connettersi a reti Wi-Fi secondarie con limitazioni, segui questi passaggi:
Aggiungi suggerimenti per le reti Wi-Fi con
setOemPaid
osetOemPrivate
impostato su true.In
ConnectivityManager
, presenta unNetworkRequest
con le funzionalità corrispondenti:NET_CAPABILITY_OEM_PAID
persetOemPaid
NET_CAPABILITY_OEM_PRIVATE
persetOemPrivate
Quando il dispositivo rileva risultati di scansione con una rete corrispondente al suggerimento privato o a pagamento dell'OEM, si connette automaticamente a quest'ultima come rete secondaria.
Convalida la connessione a internet e quella simultanea con limitazioni
Per convalidare questa funzione, utilizza il test CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
.
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 (punti di accesso) entrambe senza restrizioni (tutte le app hanno accesso) e che forniscono l'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à:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Limita le doppie connessioni alle doppie bande di un punto di accesso DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Si connette a punti di accesso arbitrari in cui le singole connessioni utilizzano bande diverse.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Disattiva la funzionalità.
Per eseguire query sulla modalità funzionalità attualmente attiva, utilizza il metodo
WifiManager#getStaConcurrencyForMultiInternetMode()
.
Quando la funzionalità è attiva, segui questi passaggi per richiedere una rete Wi-Fi che fornisce l'accesso a internet.
Crea uno specificatore di rete Wi-Fi utilizzando
WifiNetworkSpecifier.Builder
. Scegli una banda per lo specificatore utilizzando il metodosetBand()
. Non specificare l'SSID o il BSSID come rete aggiuntiva per la banda specificata selezionata dal framework Wi-Fi.Utilizzando
ConnectivityManager
, crea unNetworkRequest
con la funzionalitàNET_CAPABILITY_INTERNET
.Aggiungi lo specificatore alla richiesta di rete insieme a un'istanza
NetworkCallback
per monitorare lo stato della richiesta ed emetti la richiesta aConnectivityManager
. Se una rete salvata con la banda richiesta è disponibile nel risultato della scansione e la connessione alla rete è andata a buon fine,NetworkCallback.onAvailable()
viene richiamato sull'oggetto callback.
Convalida di più reti simultanee con connessione a internet
Per convalidare questa funzione, utilizza il seguente test CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Linee guida per il chip Wi-Fi del fornitore
Per i fornitori di chip Wi-Fi, utilizza le seguenti linee guida per supportare la concorrenza Wi-Fi STA/STA.
Il chip Wi-Fi deve supportare due connessioni STA 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 (all'interno della stessa banda o di una banda diversa).
- Ogni STA può essere connessa allo stesso SSID (all'interno della stessa banda o di una banda diversa). Le due STA non devono mai essere collegate allo stesso BSSID.
Le funzionalità critiche devono operare per 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 relative a 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) devono essere supportati almeno sull'interfaccia principale (impostata utilizzando
IWifiChip.setMultiStaPrimaryConnection()
).Le statistiche del livello di collegamento devono operare in base all'interfaccia.
Di seguito sono riportate le implementazioni di chip Wi-Fi consigliate 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 Make-Before-Break. La qualità della connessione principale deve avere la priorità rispetto alla connessione secondaria.DUAL_STA_NON_TRANSIENT_UNBIASED
: specifica la funzione di connessione a internet e locale simultanea o di connessione a internet e con limitazioni simultanea. La qualità di entrambe le connessioni deve avere la stessa priorità.
Poiché le STA simultanee doppie possono portare alle modalità di funzionamento 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:- Se disponibile, è preferibile la DBS 2x2+2x2.
- Se possibile, evita 1x1+1x1 DBS a causa dell'impatto eccessivo sulla qualità della connessione. Preferisci invece utilizzare il Centro clienti.
- Il ciclo di lavoro del Centro di controllo del motore deve essere configurabile dal conducente 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 MCC, ti consigliamo i seguenti cicli di lavoro tra le connessioni principale e secondaria:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% primaria, 30% secondaria.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% primaria, 50% secondaria.