Mit Android 12 wird die gleichzeitige Nutzung von zwei WLAN-STAs (Station) eingeführt, wodurch Geräte gleichzeitig mit zwei WLANs verbunden sein können. Diese optionale Funktion ermöglicht Folgendes:
- Make-before-break: Das Gerät stellt eine Verbindung zu einem neuen WLAN her, bevor die bestehende Verbindung getrennt wird. Das führt zu reibungsloseren Übergängen beim Wechsel zwischen WLANs.
- Gleichzeitige Verbindung nur mit dem lokalen Netzwerk und Internetverbindung: Das Gerät stellt eine Verbindung zu einem Netzwerk her, das nur lokal verfügbar ist, ohne die primäre Internetverbindung des Geräts zu unterbrechen.
- Gleichzeitige eingeschränkte und Internetverbindung: Das Gerät stellt eine Verbindung zu einem eingeschränkten Netzwerk her (nur für bestimmte privilegierte Apps verfügbar), ohne die primäre Internetverbindung des Geräts zu unterbrechen.
- (Android 13 oder höher) Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung: Das Gerät stellt eine Verbindung zu zwei Netzwerken her, die beide uneingeschränkt und für alle Apps verfügbar sind und eine Internetverbindung bieten.
Auf dieser Seite wird das Geräteverhalten beschrieben, wenn diese Funktion aktiviert ist, sowie die Implementierungsdetails für Gerätehersteller und ‑anbieter.
Implementierung
Geräte müssen Folgendes unterstützen, um die gleichzeitige Nutzung von WLAN-STA/STA zu implementieren:
Der WLAN-Chip oder die Firmware muss zwei gleichzeitige STA-Verbindungen unterstützen. Die Firmware muss alle Kanal- und Bandkombinationen für beide Verbindungen unterstützen. Um Leistungsprobleme zu vermeiden, empfehlen wir die Verwendung eines WLAN-Chips mit 2 × 2 + 2 × 2 DBS.
Das Gerät muss die folgenden APIs in der AIDL- oder HIDL-Implementierung von
IWifiChip
unterstützen.IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
Die HAL-Wi‑Fi-Schnittstellenkombination muss zwei gleichzeitige STA-Schnittstellen haben, die mit einem Spezifikationsformat wie
[{STA} <= 2, ...]
verfügbar gemacht werden. Weitere Informationen finden Sie unter Gleichzeitige Nutzung mehrerer WLAN-Schnittstellen.
Wenn diese Voraussetzungen erfüllt sind, implementieren Sie die gleichzeitige Nutzung von WLAN-STA/STA so:
Aktivieren Sie eine oder mehrere Funktionen einzeln mit Laufzeit-Ressourcen-Overlays (standardmäßig deaktiviert).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Gleichzeitige lokale Verbindung und Internetverbindung:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Gleichzeitige eingeschränkte und Internetverbindung:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
Validieren Sie jede Implementierung wie in den entsprechenden Abschnitten beschrieben.
Um die gleichzeitige Verwendung von WLAN-STAs besser zu unterstützen, empfehlen wir, dass OEM-angepasste Frameworks und Apps die Methode NetworkCallback#onCapabilitiesChanged()
anstelle von WifiManager#getConnectionInfo()
verwenden. WifiManager#getConnectionInfo()
gibt nur WifiInfo
für ein einzelnes Netzwerk zurück und wurde in Android 12 eingestellt. Weitere Informationen finden Sie unter Wi‑Fi Network Request API for peer-to-peer connectivity.
Make-before-break
Die Make-before-Break-Funktion ermöglicht es Geräten, sich mit einem neuen WLAN zu verbinden und gleichzeitig die bestehende WLAN-Verbindung aufrechtzuerhalten. Die Verbindung zum alten Netzwerk wird erst getrennt, wenn das Gerät erfolgreich mit dem neuen WLAN verbunden ist und Internetzugriff hat.
Der Make-before-Break-Anwendungsfall behebt die folgenden Probleme in Android 11 oder niedriger, wo das Gerät die Verbindung zum bestehenden WLAN trennen muss, bevor es sich mit einem neuen Netzwerk verbindet (Break-before-Make).
Wenn Sie eine Verbindung zu einem neuen Netzwerk herstellen, stellt das Gerät möglicherweise fest, dass ein falsches WLAN-Passwort gespeichert ist oder dass das neue Netzwerk keinen Internetzugang hat. Dadurch wird das Gerät gezwungen, zum alten Netzwerk zurückzukehren, was zu einer erheblichen Zeit ohne WLAN-Verbindung führt.
Die Verbindung zum alten Netzwerk wird abrupt getrennt, was bedeutet, dass alle Sockets geschlossen werden. Apps reagieren oft nicht gut auf einen plötzlichen Verbindungsverlust. Das kann dazu führen, dass Nutzer einige Sekunden lang keine Internetverbindung haben, bis die neue Verbindung vollständig hergestellt ist.
Das Standardnetzwerk wird zweimal geändert: vom alten WLAN zum Mobilfunknetz und dann vom Mobilfunknetz zum neuen WLAN. Dadurch reagieren Apps zweimal auf Netzwerkänderungen. Das Gerät muss auch eine kurze Zeit lang mobile Daten verwenden.
Der Make-before-Break-Ablauf wird nur für automatische WLAN-Netzwerkwechsel verwendet, die vom Betriebssystem initiiert werden. Bei vom Nutzer initiierten Netzwerkwechseln wird der alte Break-before-Make-Ablauf verwendet, bei dem die Verbindung zum vorherigen Netzwerk vollständig getrennt wird, bevor die Verbindung zum neuen Netzwerk hergestellt wird. In bestimmten Fällen wird der Break-before-Make-Ablauf auch bei automatischen Wechseln verwendet, die vom Betriebssystem initiiert werden, z. B. beim Wechsel zwischen zwei Netzwerken, die beide für die Verwendung der werkseitigen MAC-Adresse konfiguriert sind.
Apps können mit der WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
API prüfen, ob dieser Anwendungsfall auf dem Gerät unterstützt wird.
Make-before-break-Verbindung validieren
Um die Implementierung zu validieren, lösen Sie einen automatischen WLAN-Netzwerkwechsel aus (indem Sie dafür sorgen, dass ein Netzwerk mit einer stärkeren Signalstärke als das verbundene Netzwerk verfügbar ist) und prüfen Sie, ob das Gerät die bestehende Verbindung aufrechterhält, während es sich mit dem neuen Netzwerk verbindet. Verwenden Sie den folgenden Befehl, um den Status beider WLAN-Schnittstellen aufzurufen und zu prüfen, ob beide verbunden sind.
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
Wenn das neue Netzwerk keine Verbindung hat, versucht das Gerät, eine Verbindung zum Netzwerk herzustellen, während die Verbindung zum bestehenden Netzwerk aufrechterhalten wird. Der Versuch wird abgebrochen, wenn das Gerät erkennt, dass das neue Netzwerk keine Internetverbindung hat. Das Gerät verwendet dann weiterhin die vorhandene Verbindung als primäres WLAN.
Gleichzeitige lokale Verbindung und Internetverbindung
Mit der Funktion gleichzeitige lokale Verbindung und Internetverbindung können Geräte gleichzeitig mit einer reinen lokalen Verbindung, z. B. einer Verbindung zu einem IoT-Gerät, und mit dem primären Netzwerk, das eine Internetverbindung bereitstellt, verbunden sein. Diese Funktion verbessert die Nutzerfreundlichkeit bei der direkten Verbindung mit IoT-Geräten wie Kameras, was über die in Android 10 hinzugefügte WifiNetworkSpecifier
API möglich ist.
Unter Android 11 und niedriger wird die Verbindung von Geräten zum primären WLAN getrennt, wenn eine Verbindung zu einem IoT-Gerät hergestellt wird. Dadurch geht die Internetverbindung verloren, sofern das Gerät nicht über einen anderen Übertragungstyp verfügt, z. B. Mobilfunkdaten.
Apps können mit der WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
API prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
Weitere Informationen zu Änderungen an der Funktion für gleichzeitige lokale und Internetverbindungen in Android 12 finden Sie unter Wi-Fi Network Request API for peer-to-peer connectivity.
Nur lokale Verbindung und Internetverbindung prüfen
Verwenden Sie zum Validieren dieser Funktion den MultiStaConcurrencyWifiNetworkSpecifierTest
-CTS-Test.
Gleichzeitige eingeschränkte und Internetverbindung
Mit der Funktion Gleichzeitige eingeschränkte und Internetverbindung kann das Gerät gleichzeitig eine Verbindung zu einem primären WLAN für den Nutzer und zu einem eingeschränkten WLAN herstellen, das nur für ausgewählte Apps verfügbar ist.
Apps können mit der WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
API prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
So ermöglichen Sie einem Gerät, eine Verbindung zu sekundären eingeschränkten WLANs herzustellen:
Fügen Sie WLAN-Vorschläge hinzu, wobei
setOemPaid
odersetOemPrivate
auf „true“ gesetzt ist.Erstellen Sie in
ConnectivityManager
eineNetworkRequest
mit den entsprechenden Funktionen:NET_CAPABILITY_OEM_PAID
fürsetOemPaid
NET_CAPABILITY_OEM_PRIVATE
fürsetOemPrivate
Wenn das Gerät Scanergebnisse mit einem Netzwerk erkennt, das dem vom OEM bezahlten oder privaten Vorschlag des OEM entspricht, wird automatisch eine Verbindung als sekundäres Netzwerk hergestellt.
Gleichzeitige eingeschränkte und Internetverbindung validieren
Verwenden Sie zum Validieren dieser Funktion den MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
-CTS-Test.
Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung
Die Funktion Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung ist für Android 13 oder höher verfügbar und ermöglicht es dem Gerät, gleichzeitig eine Verbindung zu zwei Netzwerken (APs) herzustellen, die beide uneingeschränkt sind (alle Apps haben Zugriff) und Internetzugang bieten.
Apps können mit der Methode WifiManager#isStaConcurrencyForMultiInternetSupported()
prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
Wenn die Funktion unterstützt wird, können privilegierte Apps sie mit der Methode WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
aktivieren. Die Funktion hat die folgenden Modi:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Beschränkt Dual-Verbindungen auf die Dual-Bänder eines DBS-APs.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Es wird eine Verbindung zu beliebigen APs hergestellt, wobei für die einzelnen Verbindungen unterschiedliche Bänder verwendet werden.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Deaktiviert die Funktion.
Verwenden Sie die Methode WifiManager#getStaConcurrencyForMultiInternetMode()
, um den aktuell aktiven Funktionsmodus abzufragen.
Wenn die Funktion aktiviert ist, können Sie mit den folgenden Schritten ein zusätzliches WLAN-Netzwerk anfordern, das Internetzugang bietet.
Erstellen Sie mit
WifiNetworkSpecifier.Builder
einen WLAN-Spezifizierer. Wählen Sie mit der MethodesetBand()
ein Band für den Spezifizierer aus. Geben Sie die SSID oder BSSID nicht als zusätzliches Netzwerk an, da das zusätzliche Netzwerk für das angegebene Band vom WLAN-Framework ausgewählt wird.Erstellen Sie mit
ConnectivityManager
einNetworkRequest
mit der FunktionNET_CAPABILITY_INTERNET
.Fügen Sie der Netzwerkanfrage den Spezifizierer zusammen mit einer
NetworkCallback
-Instanz hinzu, um den Status der Anfrage zu verfolgen, und senden Sie die Anfrage anConnectivityManager
. Wenn im Scanergebnis ein gespeichertes Netzwerk mit dem angeforderten Band verfügbar ist und die Verbindung zum Netzwerk erfolgreich ist, wirdNetworkCallback.onAvailable()
für das Callback-Objekt aufgerufen.
Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung prüfen
Verwenden Sie den folgenden CTS-Test, um diese Funktion zu validieren:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Richtlinien für WLAN-Chips von Anbietern
Wi‑Fi-Chipanbieter können die folgenden Richtlinien verwenden, um die gleichzeitige Verwendung von Wi‑Fi STA/STA zu unterstützen.
Der WLAN-Chip muss zwei gleichzeitige STA-Verbindungen unterstützen. Das bedeutet, dass Folgendes unterstützt wird:
- Jede STA-Schnittstelle hat eine eindeutige MAC-Adresse, die vom Framework programmiert werden kann.
- Die sekundäre STA-Schnittstelle kann dynamisch erstellt und gelöscht werden.
- Jede STA kann mit einer anderen SSID verbunden werden (entweder im selben Band oder in einem anderen Band).
- Jede STA kann mit derselben SSID verbunden werden (entweder im selben Band oder in einem anderen Band). Die beiden STAs dürfen niemals mit derselben BSSID verbunden sein.
Kritische Funktionen müssen auf Schnittstellenebene funktionieren und auf der primären Schnittstelle verfügbar sein. Im Folgenden finden Sie eine Liste dieser wichtigen Funktionen:
Roaming muss mindestens auf der primären Schnittstelle unterstützt werden (festgelegt mit
IWifiChip.setMultiStaPrimaryConnection()
). Wenn Roaming auf beiden Schnittstellen unterstützt wird, dürfen Entscheidungen für eine Verbindung nicht mit der zweiten gleichzeitigen Verbindung kollidieren. Eine Schnittstelle darf beispielsweise nicht zur BSSID der anderen Verbindung wechseln.APF (und andere Offloads wie ARP und NS) müssen mindestens auf der primären Schnittstelle unterstützt werden (die mit
IWifiChip.setMultiStaPrimaryConnection()
festgelegt wird).Statistiken für die Link-Ebene müssen pro Schnittstelle funktionieren.
Im Folgenden finden Sie empfohlene WLAN-Chip-Implementierungen für verschiedene Szenarien mit gleichzeitiger Nutzung:
Der WLAN-Chip muss es dem Framework ermöglichen,
IWifiChip.setMultiStaUseCase()
mit einer der folgenden Konstanten aufzurufen, um die aktuelle Funktion anzugeben:DUAL_STA_TRANSIENT_PREFER_PRIMARY
: Gibt die Make-Before-Break-Funktion an. Die Qualität der primären Verbindung muss Vorrang vor der sekundären Verbindung haben.DUAL_STA_NON_TRANSIENT_UNBIASED
: Gibt die Funktion gleichzeitige Nur-lokal- und Internetverbindung oder gleichzeitige eingeschränkte und Internetverbindung an. Die Qualität beider Verbindungen muss gleichwertig priorisiert werden.
Da zwei gleichzeitige STAs zu den Betriebsarten MCC, SCC und DBS führen können, muss in der Implementierung des Anbieters die beste Funkkonfiguration ausgewählt werden, wenn das Framework
IWifiChip.setMultiStaUseCase()
aufruft, um die Funktion anzugeben. Nachstehend finden Sie allgemeine Hinweise:- 2x2+2x2 DBS wird bevorzugt, sofern verfügbar.
- Vermeiden Sie nach Möglichkeit 1 × 1 + 1 × 1 DBS, da dies die Verbindungsqualität stark beeinträchtigt. Verwenden Sie stattdessen lieber ein Verwaltungskonto.
- Der MCC-Arbeitszyklus muss vom Treiber oder der Firmware für die verschiedenen Funktionen konfigurierbar sein. Das Framework legt den MCC-Arbeitszyklus nicht direkt fest, sondern fragt diese Informationen über
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
ab. Wenn Sie MCC verwenden, empfehlen wir die folgenden Arbeitszyklen zwischen der primären und der sekundären Verbindung:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% primär, 30% sekundär.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% primär, 50% sekundär.