Android 12 introduit la simultanéité STA/STA Wi-Fi, qui permet aux appareils de se connecter à deux réseaux Wi-Fi simultanément. Cette fonctionnalité facultative active les fonctions suivantes.
- Make-before-break: l'appareil se connecte à un nouveau réseau Wi-Fi avant de rompre la connexion existante. Cela permet de passer plus facilement d'un réseau Wi-Fi à un autre.
- Connexion Internet et locale simultanées: l'appareil se connecte à un réseau local uniquement sans perturber la connexion Internet principale de l'appareil.
- Connexion Internet et connexion limitée simultanées: l'appareil se connecte à un réseau limité (accessible uniquement à certaines applications privilégiées) sans perturber la connexion Internet principale de l'appareil.
- (Android 13 ou version ultérieure) Plusieurs réseaux simultanés avec connexion Internet: l'appareil se connecte à deux réseaux, qui sont tous deux sans restriction et disponibles pour toutes les applications, et qui fournissent une connectivité Internet.
Cette page décrit le comportement de l'appareil lorsque cette fonctionnalité est activée, ainsi que les détails d'implémentation pour les fabricants et les fournisseurs d'appareils.
Implémentation
Pour implémenter la simultanéité STA/STA Wi-Fi, les appareils doivent prendre en charge les éléments suivants:
La puce ou le micrologiciel Wi-Fi doit prendre en charge deux connexions STA simultanées. Le micrologiciel doit être compatible avec toutes les combinaisons de canaux et de bandes pour les deux connexions. Pour éviter les problèmes de performances, nous vous recommandons d'utiliser une puce Wi-Fi compatible avec DBS 2x2+2x2.
L'appareil doit être compatible avec les API suivantes dans l'implémentation AIDL ou HIDL de
IWifiChip
.IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
La combinaison d'interfaces Wi-Fi HAL doit comporter deux interfaces STA simultanées exposées à l'aide d'un format de spécification tel que
[{STA} <= 2, ...]
. Pour en savoir plus, consultez la section Simultanéité multi-interface Wi-Fi.
Si ces conditions préalables sont remplies, mettez en œuvre la simultanéité STA/STA Wi-Fi en procédant comme suit:
Activez une ou plusieurs fonctions individuellement à l'aide des superpositions de ressources d'exécution (désactivées par défaut).
- Make-before-break :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Connexion Internet et connexion locale simultanées :
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Connexion Internet et connexion limitée simultanées :
config_wifiMultiStaRestrictedConcurrencyEnabled
- Plusieurs réseaux simultanés avec une connexion Internet :
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break :
Validez chaque implémentation comme décrit dans les sections respectives.
Pour mieux prendre en charge la simultanéité STA/STA Wi-Fi, nous recommandons aux frameworks et applications personnalisés par l'OEM d'utiliser la méthode NetworkCallback#onCapabilitiesChanged()
au lieu de WifiManager#getConnectionInfo()
, qui ne renvoie que WifiInfo
pour un seul réseau et a été abandonnée dans Android 12. Pour en savoir plus, consultez la section API Wi-Fi Network Request pour la connectivité peer-to-peer.
Make-before-break
La fonction make-before-break permet aux appareils de se connecter à un nouveau réseau Wi-Fi tout en conservant la connexion au réseau Wi-Fi existant. Elle ne se déconnecte de l'ancien réseau que lorsqu'elle se connecte correctement au nouveau réseau Wi-Fi et qu'elle a accès à Internet.
Le cas d'utilisation "make-before-break" résout les problèmes suivants sous Android 11 ou version antérieure, où l'appareil doit se déconnecter du réseau Wi-Fi existant avant de se connecter à un nouveau réseau (break-before-make).
Lors de la connexion à un nouveau réseau, l'appareil peut découvrir qu'il a enregistré un mot de passe Wi-Fi incorrect ou que le nouveau réseau ne dispose pas d'un accès à Internet. L'appareil est alors forcé de revenir à l'ancien réseau, ce qui entraîne une longue période sans connexion Wi-Fi.
L'ancien réseau est déconnecté brusquement, ce qui signifie que toutes les sockets se ferment. Les applications ne réagissent souvent pas bien à une perte soudaine de connectivité, ce qui peut entraîner une interruption de la connexion Internet pendant quelques secondes jusqu'à ce que la nouvelle connexion soit complètement établie.
Le réseau par défaut change deux fois, de l'ancien réseau Wi-Fi au réseau mobile, puis du réseau mobile au nouveau réseau Wi-Fi. Cela entraîne une double réaction des applications aux modifications de réseau. L'appareil doit également utiliser les données mobiles pendant une courte période.
Le flux "make-before-break" n'est utilisé que pour les commutateurs réseau Wi-Fi automatiques lancés par l'OS. Les commutateurs réseau déclenchés par l'utilisateur utilisent l'ancien flux de rupture avant connexion, où le réseau précédent est complètement déconnecté avant que le nouveau réseau ne soit connecté. Dans certains cas, le flux de rupture avant la création est utilisé même dans les commutateurs automatiques lancés par l'OS, par exemple lors du basculement entre deux réseaux tous deux configurés pour utiliser l'adresse MAC d'usine.
Les applications peuvent vérifier si ce cas d'utilisation est compatible avec l'appareil à l'aide de l'API WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Valider la création avant la rupture
Pour valider votre implémentation, déclenchez un changement automatique de réseau Wi-Fi (en vous assurant qu'un réseau avec une puissance de signal plus forte que le réseau connecté est disponible) et vérifiez que l'appareil maintient la connexion existante tout en se connectant au nouveau réseau. Pour afficher l'état des deux interfaces Wi-Fi et vérifier qu'elles sont toutes les deux connectées, exécutez la commande suivante.
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
Si le nouveau réseau n'est pas connecté, l'appareil tente de s'y connecter, tout en maintenant la connexion avec le réseau existant, et interrompt la tentative lorsqu'il détecte que le nouveau réseau n'est pas connecté à Internet. L'appareil continue ensuite d'utiliser la connexion existante comme réseau Wi-Fi principal.
Connexion Internet et connexion locale simultanées
La fonction Connexion locale uniquement et connexion Internet simultanée permet aux appareils de se connecter à une connexion uniquement locale, telle qu'une connexion à un appareil IoT, en même temps que le réseau Internet principal. Cette fonction améliore l'expérience utilisateur lors de la connexion directe à des appareils IoT, tels que des caméras, ce qui est possible grâce à l'API WifiNetworkSpecifier
ajoutée dans Android 10.
Sous Android 11 et versions antérieures, les appareils se déconnectent du réseau Wi-Fi principal lorsqu'ils se connectent à un appareil IoT, ce qui entraîne une perte de connectivité Internet (sauf si un autre type de transport est disponible, comme les données mobiles).
Les applications peuvent vérifier si cette fonction est compatible avec l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Pour en savoir plus sur les modifications apportées à la fonction de connexion locale uniquement locale et Internet simultanée dans Android 12, consultez la section API Wi-Fi Network Request pour la connectivité peer-to-peer.
Valider la connexion Internet et locale
Pour valider cette fonction, utilisez le test CTS MultiStaConcurrencyWifiNetworkSpecifierTest
.
Connexion Internet et connexion limitée simultanées
La fonction connexion Internet et connexion restreinte simultanées permet à l'appareil de se connecter simultanément à un réseau Wi-Fi principal pour l'utilisateur et à un réseau Wi-Fi restreint qui n'est disponible que pour certaines applications.
Les applications peuvent vérifier si cette fonction est compatible avec l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Pour autoriser un appareil à se connecter à des réseaux Wi-Fi secondaires restreints, procédez comme suit:
Ajoutez des suggestions de réseaux Wi-Fi avec
setOemPaid
ousetOemPrivate
définis sur "true".Dans
ConnectivityManager
, enregistrez unNetworkRequest
avec les fonctionnalités correspondantes:NET_CAPABILITY_OEM_PAID
poursetOemPaid
NET_CAPABILITY_OEM_PRIVATE
poursetOemPrivate
Lorsque l'appareil détecte des résultats d'analyse avec un réseau correspondant à la suggestion payante ou privée de l'OEM, il s'y connecte automatiquement en tant que réseau secondaire.
Valider la connexion Internet et les restrictions simultanées
Pour valider cette fonction, utilisez le test CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
.
Plusieurs réseaux simultanés avec connexion Internet
Disponible pour Android 13 ou version ultérieure, la fonctionnalité de connexion simultanée de plusieurs réseaux à Internet permet à l'appareil de se connecter simultanément à deux réseaux (PA) non restreints (toutes les applications ont accès à Internet) et de fournir un accès à Internet.
Les applications peuvent vérifier si cette fonctionnalité est prise en charge sur l'appareil à l'aide de la méthode WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Si la fonctionnalité est compatible, les applications privilégiées peuvent l'activer à l'aide de la méthode WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. La fonctionnalité propose les modes suivants:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: limite les doubles connexions aux doubles bandes d'un point d'accès DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: se connecte à des points d'accès arbitraires où les connexions individuelles utilisent des bandes différentes.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: désactive la fonctionnalité.
Pour interroger le mode de fonctionnalité actuellement actif, utilisez la méthode WifiManager#getStaConcurrencyForMultiInternetMode()
.
Lorsque la fonctionnalité est activée, procédez comme suit pour demander un réseau Wi-Fi supplémentaire fournissant un accès à Internet.
Créez un spécificateur de réseau Wi-Fi à l'aide de
WifiNetworkSpecifier.Builder
. Choisissez une bande pour le spécificateur à l'aide de la méthodesetBand()
. Ne spécifiez pas le SSID ni le BSSID, car le réseau supplémentaire pour la bande spécifiée est sélectionné par le framework Wi-Fi.À l'aide de
ConnectivityManager
, créez unNetworkRequest
avec la fonctionnalitéNET_CAPABILITY_INTERNET
.Ajoutez le spécificateur à la requête réseau, ainsi qu'une instance
NetworkCallback
pour suivre l'état de la requête, puis envoyez la requête àConnectivityManager
. Si un réseau enregistré avec la bande demandée est disponible dans le résultat de l'analyse et que la connexion au réseau aboutit,NetworkCallback.onAvailable()
est appelé sur l'objet de rappel.
Valider plusieurs réseaux simultanés avec connexion Internet
Pour valider cette fonction, utilisez le test CTS suivant:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Consignes du fournisseur concernant les puces Wi-Fi
Pour les fournisseurs de puces Wi-Fi, suivez les consignes ci-dessous pour prendre en charge la simultanéité STA/STA Wi-Fi.
La puce Wi-Fi doit accepter les doubles connexions STA simultanées. Cela signifie qu'il est compatible avec les éléments suivants:
- Chaque interface STA possède une adresse MAC unique programmable par le framework.
- L'interface STA secondaire peut être créée et détruite de manière dynamique.
- Chaque STA peut être connectée à un SSID différent (dans la même bande ou dans une autre).
- Chaque STA peut être connecté au même SSID (dans la même bande ou dans une autre bande). Les deux STA ne doivent jamais être connectés au même BSSID.
Les fonctionnalités critiques doivent fonctionner par interface et être disponibles sur l'interface principale. Voici la liste de ces fonctionnalités critiques:
L'itinérance doit être compatible au moins sur l'interface principale (définie à l'aide de
IWifiChip.setMultiStaPrimaryConnection()
). Si l'itinérance est prise en charge sur les deux interfaces, les décisions sur une connexion ne doivent pas entrer en conflit avec la deuxième connexion simultanée. Par exemple, une interface ne doit pas se connecter en itinérance au BSSID de l'autre connexion.L'APF (et d'autres offloads tels que l'ARP et le NS) doit être compatible avec au moins l'interface principale (définie à l'aide de
IWifiChip.setMultiStaPrimaryConnection()
).Les statistiques de la couche de liaison de données doivent fonctionner par interface.
Voici les implémentations de puce Wi-Fi recommandées pour différents scénarios de simultanéité:
La puce Wi-Fi doit autoriser le framework à appeler
IWifiChip.setMultiStaUseCase()
avec l'une des constantes suivantes pour spécifier la fonction actuelle:DUAL_STA_TRANSIENT_PREFER_PRIMARY
: spécifie la fonction de compensation. La qualité de la connexion principale doit être prioritaire par rapport à la connexion secondaire.DUAL_STA_NON_TRANSIENT_UNBIASED
: spécifie la fonction connexion Internet et locale simultanée ou la fonction connexion Internet et restreinte simultanée. La qualité des deux connexions doit être prioritairement égale.
Étant donné que l'utilisation de deux STA simultanées peut conduire à des modes de fonctionnement MCC, SCC et DBS, l'implémentation du fournisseur doit choisir la meilleure configuration radio lorsque le framework appelle
IWifiChip.setMultiStaUseCase()
pour indiquer la fonction. Voici quelques consignes générales:- Il est préférable d'utiliser une DBS 2x2+2x2, le cas échéant.
- Dans la mesure du possible, évitez les DBS 1x1+1x1 en raison de l'impact excessif sur la qualité de la connexion. Utilisez plutôt le code marchand.
- Le cycle de service du MCC doit être configurable par le pilote ou le micrologiciel pour les différentes fonctions. Le framework ne définit pas directement le cycle de service du MCC, mais interroge ces informations à l'aide de
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. Si vous utilisez un MCC, nous vous recommandons les cycles de service suivants entre les connexions primaire et secondaire:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% pour l'enseignement primaire et 30% pour l'enseignement secondaire.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% de priorité principale, 50% de priorité secondaire.