Android 12 introduit la simultanéité Wi-Fi STA/STA, qui permet aux appareils de se connecter à deux réseaux Wi-Fi simultanément. Cette fonctionnalité facultative permet d'effectuer les opérations suivantes.
- Make-before-break : l'appareil se connecte à un nouveau réseau Wi-Fi avant de rompre la connexion existante. Cela permet des transitions plus fluides lors du passage d'un réseau Wi-Fi à un autre.
- Connexion simultanée à un réseau local uniquement et à Internet : l'appareil se connecte à un réseau local uniquement sans interrompre la connexion principale de l'appareil qui fournit l'accès à Internet.
- Connexion Internet et réseau restreint simultanés : l'appareil se connecte à un réseau restreint (disponible uniquement pour certaines applications privilégiées) sans interrompre 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 de l'implémentation pour les fabricants et fournisseurs d'appareils.
Implémentation
Pour implémenter la concurrence Wi-Fi STA/STA, les appareils doivent prendre en charge les éléments suivants :
La puce ou le micrologiciel Wi-Fi doivent être compatibles avec 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 le 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 Concurrence multi-interface Wi-Fi.
Si ces conditions préalables sont remplies, implémentez la simultanéité Wi-Fi STA/STA en procédant comme suit :
Activez une ou plusieurs fonctions individuellement à l'aide des calques de ressources d'exécution (désactivés par défaut).
- Make-before-break :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Connexion Internet et connexion locale uniquement simultanées :
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Connexion Internet et mode restreint simultanés :
config_wifiMultiStaRestrictedConcurrencyEnabled
- Plusieurs réseaux simultanés avec connexion Internet :
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break :
Validez chaque implémentation comme décrit dans les sections correspondantes.
Pour mieux prendre en charge la concurrence Wi-Fi STA/STA, nous recommandons aux frameworks et applications personnalisés par les 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 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. Ils ne se déconnectent de l'ancien réseau que lorsqu'ils se sont connectés au nouveau réseau Wi-Fi et ont accès à Internet.
Le cas d'utilisation "make-before-break" résout les problèmes suivants dans 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étecter qu'un mot de passe Wi-Fi incorrect est enregistré ou que le nouveau réseau n'a pas accès à Internet. Cela force l'appareil à revenir à l'ancien réseau, ce qui entraîne une perte de connectivité Wi-Fi pendant une durée importante.
L'ancien réseau est déconnecté brusquement, ce qui signifie que tous les sockets sont fermés. Les applications réagissent souvent mal à une perte soudaine de connectivité, ce qui peut entraîner une perte de connexion Internet de quelques secondes pour l'utilisateur jusqu'à ce que la nouvelle connexion soit entièrement é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 changements 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 changements automatiques de réseau Wi-Fi initiés par l'OS. Les changements de réseau initiés par l'utilisateur utilisent l'ancien flux "break-before-make", où le réseau précédent est entièrement déconnecté avant que le nouveau réseau ne soit connecté. Dans certains cas, le flux "break-before-make" est utilisé même lors des commutations automatiques initiées par l'OS, par exemple lors du passage d'un réseau à un autre, les deux étant configurés pour utiliser l'adresse MAC d'usine.
Les applications peuvent vérifier si ce cas d'utilisation est pris en charge sur l'appareil à l'aide de l'API WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Valider le mode "make-before-break"
Pour valider votre implémentation, déclenchez un changement automatique de réseau Wi-Fi (en vous assurant qu'un réseau avec une intensité 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, utilisez 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, puis abandonne la tentative lorsqu'il détecte que le nouveau réseau n'a pas accès à 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 de connexion Internet et locale simultanée permet aux appareils de se connecter à une connexion locale uniquement, comme une connexion à un appareil IoT, en même temps qu'au réseau principal fournissant Internet. 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.
Dans Android 11 et les 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 l'appareil dispose d'un autre type de transport disponible, tel que les données mobiles).
Les applications peuvent vérifier si cette fonction est prise en charge sur l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Pour en savoir plus sur les modifications apportées à la fonction de connexion simultanée en local uniquement et à Internet dans Android 12, consultez API Wi-Fi Network Request pour la connectivité peer-to-peer.
Valider la connexion Internet et locale uniquement
Pour valider cette fonction, utilisez le test CTS MultiStaConcurrencyWifiNetworkSpecifierTest
.
Connexion Internet et accès restreint simultanés
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 prise en charge sur l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Pour permettre à un appareil de se connecter à des réseaux Wi-Fi secondaires à accès restreint, procédez comme suit :
Ajoutez des suggestions de réseau Wi-Fi avec
setOemPaid
ousetOemPrivate
défini sur "true".Dans
ConnectivityManager
, déposez 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 OEM payante ou OEM privée, 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 sur Android 13 ou version ultérieure, la fonctionnalité Connexion simultanée à plusieurs réseaux avec accès à Internet permet à l'appareil de se connecter simultanément à deux réseaux (points d'accès) non restreints (toutes les applications y ont accès) et offrant 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 prise en charge, les applications privilégiées peuvent l'activer à l'aide de la méthode WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. Cette fonctionnalité propose les modes suivants :
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: limite les connexions doubles aux bandes doubles 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 différentes bandes.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, suivez les étapes ci-dessous 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 framework Wi-Fi sélectionne le réseau supplémentaire pour la bande spécifiée.À l'aide de
ConnectivityManager
, créez unNetworkRequest
avec la fonctionnalitéNET_CAPABILITY_INTERNET
.Ajoutez le spécificateur à la requête réseau avec 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 est établie,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 concernant les puces Wi-Fi des fournisseurs
Pour les fournisseurs de puces Wi-Fi, suivez les consignes ci-dessous pour prendre en charge la simultanéité Wi-Fi STA/STA.
La puce Wi-Fi doit être compatible avec les connexions STA simultanées doubles. 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 supprimée de manière dynamique.
- Chaque STA peut être connecté à un SSID différent (dans la même bande ou dans une bande différente).
- Chaque STA peut être connecté au même SSID (dans la même bande ou dans une bande différente). Les deux STA ne doivent jamais être connectées au même BSSID.
Les fonctionnalités critiques doivent fonctionner par interface et être disponibles sur l'interface principale. Voici une liste de ces fonctionnalités essentielles :
L'itinérance doit être prise en charge 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 concernant une connexion ne doivent pas entrer en conflit avec la deuxième connexion simultanée. Par exemple, une interface ne doit pas se déplacer vers le BSSID de l'autre connexion.L'APF (et d'autres déchargements tels qu'ARP et NS) doit être pris en charge au moins sur l'interface principale (définie à l'aide de
IWifiChip.setMultiStaPrimaryConnection()
).Les statistiques de la couche liaison de données doivent fonctionner par interface.
Voici les implémentations de puces Wi-Fi recommandées pour différents scénarios de simultanéité :
La puce Wi-Fi doit permettre au framework d'appeler
IWifiChip.setMultiStaUseCase()
avec l'une des constantes suivantes pour spécifier la fonction actuelle :DUAL_STA_TRANSIENT_PREFER_PRIMARY
: spécifie la fonction Make-Before-Break. La qualité de la connexion principale doit être privilégiée par rapport à celle de la connexion secondaire.DUAL_STA_NON_TRANSIENT_UNBIASED
: spécifie la fonction connexion Internet et connexion locale uniquement simultanées ou la fonction connexion Internet et connexion restreinte simultanées. La qualité des deux connexions doit être privilégiée de manière égale.
Étant donné que les STA doubles simultanées peuvent entraîner 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 :- Si possible, utilisez une configuration DBS 2x2+2x2.
- Évitez les DBS 1x1+1x1 si possible, car ils ont un impact excessif sur la qualité de la connexion. Privilégiez plutôt les comptes multicomptes.
- 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 MCC, mais interroge ces informations à l'aide de
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. Si vous utilisez MCC, nous vous recommandons les cycles d'utilisation suivants entre les connexions principale et secondaire :
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70 % de nœuds principaux et 30 % de nœuds secondaires.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50 % de primaire, 50 % de secondaire.