Mit Android 12 wird die gleichzeitige Nutzung von zwei WLAN-STA-Verbindungen eingeführt, mit der Geräte gleichzeitig eine Verbindung zu zwei WLANs herstellen können. Diese optionale Funktion ermöglicht die folgenden Funktionen:
- Make-before-break:Das Gerät stellt eine Verbindung zu einem neuen WLAN her, bevor die bestehende Verbindung getrennt wird. Dadurch werden Übergänge beim Wechsel zwischen WLANs reibungsloser.
- Gleichzeitige lokale und Internetverbindung:Das Gerät stellt eine Verbindung zu einem rein lokalen Netzwerk her, 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 zwei WLAN-STA-Verbindungen 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 2x2+2x2-DBS-fähigen WLAN-Chips.
Das Gerät muss die folgenden APIs in der AIDL- oder HIDL-Implementierung von
IWifiChipunterstützen:IWifiChip.setMultiStaPrimaryConnection(String ifName)IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
Die HAL-WLAN-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 zwei WLAN-STA-Verbindungen so:
Aktivieren Sie eine oder mehrere Funktionen einzeln mit Laufzeit-Ressourcen-Overlays (standardmäßig deaktiviert).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled - Gleichzeitige lokale 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 Nutzung von zwei WLAN-STA-Verbindungen besser zu unterstützen, empfehlen wir, dass OEM-angepasste Frameworks und Apps die Methode NetworkCallback#onCapabilitiesChanged() anstelle von WifiManager#getConnectionInfo() verwenden. Diese gibt nur WifiInfo für ein einzelnes Netzwerk zurück und wurde in Android 12 verworfen. Weitere Informationen finden Sie unter
WLAN Network Request API for Peer-to-Peer Konnektivität.
Make-before-break
Mit der Funktion Make-before-break können Geräte eine Verbindung zu einem neuen WLAN herstellen und gleichzeitig die bestehende WLAN-Verbindung aufrechterhalten. Die Verbindung zum alten Netzwerk wird erst getrennt, wenn die Verbindung zum neuen WLAN hergestellt wurde und Internetzugriff besteht.
Der Anwendungsfall „Make-before-break“ behebt die folgenden Probleme in Android 11 oder niedriger, wo das Gerät die Verbindung zum bestehenden WLAN trennen muss, bevor es eine Verbindung zu einem neuen Netzwerk herstellen kann (Break-before-make).
Wenn eine Verbindung zu einem neuen Netzwerk hergestellt wird, stellt das Gerät möglicherweise fest, dass ein falsches WLAN-Passwort gespeichert ist oder dass das neue Netzwerk keinen Internetzugriff hat. Dadurch muss das Gerät zum alten Netzwerk zurückkehren, 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 Verlust der Verbindung. Dies kann dazu führen, dass der Nutzer einige Sekunden lang keine Internetverbindung hat, bis die neue Verbindung vollständig hergestellt ist.
Das Standardnetzwerk ändert sich zweimal: vom alten WLAN zum Mobilfunknetz und dann vom Mobilfunknetz zum neuen WLAN. Dadurch reagieren Apps zweimal auf Netzwerkänderungen. Das Gerät muss auch kurze Zeit mobile Daten verwenden.
Der Ablauf „Make-before-break“ wird nur für automatische WLAN-Wechsel verwendet, die vom Betriebssystem initiiert werden. Bei vom Nutzer initiierten Netzwerkwechseln wird der Legacy-Ablauf „Break-before-make“ 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 Ablauf „Break-before-make“ 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 API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() prüfen, ob dieser Anwendungsfall auf dem Gerät unterstützt wird.
Make-before-break validieren
Um Ihre Implementierung zu validieren, lösen Sie einen automatischen WLAN-Wechsel aus (indem Sie prüfen, ob 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 eine Verbindung zum neuen Netzwerk herstellt. Mit dem folgenden Befehl können Sie den Status beider WLAN-Schnittstellen aufrufen und 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 feststellt, dass das neue Netzwerk keine Internetverbindung hat. Das Gerät verwendet dann weiterhin die bestehende Verbindung als primäres WLAN.
Gleichzeitige lokale und Internetverbindung
Mit der Funktion Gleichzeitige lokale und Internetverbindung können Geräte gleichzeitig eine Verbindung zu einer rein lokalen Verbindung, z. B. zu einem IoT-Gerät, und zum primären Netzwerk mit Internetverbindung herstellen. Diese Funktion verbessert die Nutzerfreundlichkeit bei der direkten Verbindung zu IoT-Geräten wie Kameras, was mit der in Android 10 hinzugefügten WifiNetworkSpecifier API möglich ist.
In Android 11 und niedriger wird die Verbindung zum primären WLAN getrennt, wenn eine Verbindung zu einem IoT-Gerät hergestellt wird. Dadurch geht die Internetverbindung verloren, es sei denn, das Gerät hat einen anderen Transporttyp zur Verfügung, z. B. mobile Daten.
Apps können mit der API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
Weitere Informationen zu Änderungen an der Funktion „Gleichzeitige lokale und Internet verbindung“ in Android 12 finden Sie unter Wi-Fi Network Request API for peer-to-peer connectivity.
Lokale und Internetverbindung validieren
Verwenden Sie den CTS-Test MultiStaConcurrencyWifiNetworkSpecifierTest, um diese Funktion zu validieren.
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 API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
So stellen Sie eine Verbindung zu sekundären eingeschränkten WLANs her:
Fügen Sie WLAN-Vorschläge hinzu, bei denen
setOemPaidodersetOemPrivateauf „true“ gesetzt ist.Reichen Sie in
ConnectivityManagereineNetworkRequestmit den entsprechenden Funktionen ein:NET_CAPABILITY_OEM_PAIDfürsetOemPaidNET_CAPABILITY_OEM_PRIVATEfürsetOemPrivate
Wenn das Gerät Scanergebnisse mit einem Netzwerk erkennt, das dem OEM-Vorschlag für kostenpflichtige oder private Netzwerke entspricht, wird automatisch eine Verbindung als sekundäres Netzwerk hergestellt.
Gleichzeitige eingeschränkte und Internetverbindung validieren
Verwenden Sie den CTS-Test MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest, um diese Funktion zu validieren.
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 Internetzugriff bieten.
Apps können mit der
WifiManager#isStaConcurrencyForMultiInternetSupported()
Methode 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: Stellt eine Verbindung zu beliebigen APs her, wobei die einzelnen Verbindungen unterschiedliche Bänder verwenden.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED: Deaktiviert die Funktion.
Verwenden Sie die
WifiManager#getStaConcurrencyForMultiInternetMode()
Methode, um den aktiven Funktionsmodus abzufragen.
Wenn die Funktion aktiviert ist, gehen Sie so vor, um ein zusätzliches WLAN mit Internetverbindung anzufordern:
Erstellen Sie mit
WifiNetworkSpecifier.Buildereinen WLAN-Spezifizierer. Wählen Sie mit dersetBand()Methode ein Band für den Spezifizierer aus. Geben Sie die SSID oder BSSID nicht an, da das zusätzliche Netzwerk für das angegebene Band vom WLAN-Framework ausgewählt wird.Erstellen Sie mit
ConnectivityManager, eineNetworkRequestmit derNET_CAPABILITY_INTERNETFunktion.Fügen Sie den Spezifizierer zusammen mit einer
NetworkCallbackInstanz zur Netzwerk-Anfrage 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 hergestellt wurde, wirdNetworkCallback.onAvailable()für das Callback-Objekt aufgerufen.
Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung validieren
Verwenden Sie den folgenden CTS-Test, um diese Funktion zu validieren:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Richtlinien für WLAN-Chips von Anbietern
WLAN-Chip-Anbieter können die folgenden Richtlinien verwenden, um die gleichzeitige Nutzung von zwei WLAN-STA-Verbindungen zu unterstützen.
Der WLAN-Chip muss zwei gleichzeitige STA-Verbindungen unterstützen. Das bedeutet, dass er Folgendes unterstützt:
- 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 oder in einem anderen Band).
- Jede STA kann mit derselben SSID verbunden werden (entweder im selben oder in einem anderen Band). Die beiden STAs dürfen niemals mit derselben BSSID verbunden sein.
Kritische Funktionen müssen pro Schnittstelle ausgeführt werden und auf der primären Schnittstelle verfügbar sein. Im Folgenden finden Sie eine Liste dieser kritischen Funktionen:
Roaming muss mindestens auf der primären Schnittstelle unterstützt werden (mit
IWifiChip.setMultiStaPrimaryConnection()festgelegt). Wenn Roaming auf beiden Schnittstellen unterstützt wird, dürfen Entscheidungen zu einer Verbindung nicht mit der zweiten gleichzeitigen Verbindung in Konflikt geraten. Beispielsweise darf eine Schnittstelle 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 (mit
IWifiChip.setMultiStaPrimaryConnection()festgelegt).Statistiken auf Link-Layer-Ebene müssen pro Schnittstelle ausgeführt werden.
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 Funktion „Make-before-break“ an. Die Qualität der primären Verbindung muss gegenüber der sekundären Verbindung priorisiert werden.DUAL_STA_NON_TRANSIENT_UNBIASED: Gibt die Funktion Gleichzeitige lokale und Internetverbindung oder Gleichzeitige eingeschränkte und Internetverbindung an. Die Qualität beider Verbindungen muss gleich priorisiert werden.
Da zwei gleichzeitige STAs zu MCC-, SCC- und DBS-Betriebsmodi führen können, muss die Anbieterimplementierung die beste Funkkonfiguration auswählen, wenn das Framework
IWifiChip.setMultiStaUseCase()aufruft, um die Funktion anzugeben. Nachstehend finden Sie allgemeine Hinweise:- 2x2+2x2 DBS wird bevorzugt, wenn verfügbar.
- Vermeiden Sie nach Möglichkeit 1x1+1x1 DBS, da dies die Verbindungsqualität erheblich beeinträchtigt. Verwenden Sie stattdessen MCC.
- Der MCC-Duty-Cycle muss vom Treiber oder der Firmware für die verschiedenen Funktionen konfiguriert werden können. Das Framework legt den MCC-Duty-Cycle nicht direkt fest, sondern fragt diese Informationen mit
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercentab. Wenn Sie MCC verwenden, empfehlen wir die folgenden Duty-Cycles 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.