In Android 12 wird die WLAN-STA/STA-Parallelität eingeführt, mit der Geräte gleichzeitig eine Verbindung zu zwei WLANs herstellen können. Mit dieser optionalen Funktion sind die folgenden Funktionen verfügbar.
- 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 flüssiger.
- Gleichzeitige lokale und Internetverbindung: Das Gerät verbindet sich mit einem lokalen Netzwerk, ohne die primäre Internetverbindung des Geräts zu unterbrechen.
- Gleichzeitige eingeschränkte und Internetverbindung: Das Gerät verbindet sich mit einem eingeschränkten Netzwerk (nur für bestimmte privilegierte Apps verfügbar), ohne die primäre Internetverbindung des Geräts zu unterbrechen.
- (Android 13 oder höher) Mehrere Netzwerke gleichzeitig mit Internetverbindung: Das Gerät verbindet sich mit zwei Netzwerken, die 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 WLAN-STA/STA-Parallelität zu implementieren:
Der WLAN-Chip oder die WLAN-Firmware muss zwei gleichzeitige STA-Verbindungen unterstützen. Die Firmware muss alle Kanal- und Bandkombinationen für beide Verbindungen unterstützen. Zur Vermeidung von Leistungsproblemen 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
IWifiChip
unterstü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, ...]
freigegeben werden. Weitere Informationen finden Sie unter Gleichzeitigkeit von WLAN-Multi-Schnittstellen.
Wenn diese Voraussetzungen erfüllt sind, implementieren Sie die WLAN-STA/STA-Parallelität so:
Sie können eine oder mehrere Funktionen einzeln mithilfe von Laufzeitressourcen-Overlays aktivieren (standardmäßig deaktiviert).
- Make-before-Break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Gleichzeitige lokale und Internetverbindung:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Gleichzeitige eingeschränkte und Internetverbindung:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Mehrere Netzwerke mit Internetverbindung gleichzeitig:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-Break:
Validieren Sie jede Implementierung wie in den entsprechenden Abschnitten beschrieben.
Um die gleichzeitige Nutzung von WLAN-STAs und STAs besser zu unterstützen, empfehlen wir, dass OEM-spezifische Frameworks und Apps die Methode NetworkCallback#onCapabilitiesChanged()
anstelle von WifiManager#getConnectionInfo()
verwenden. Letztere 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 für Peer-to-Peer-Verbindungen.
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 eine Verbindung zum neuen WLAN hergestellt wurde und Internetzugriff besteht.
Der Anwendungsfall für eine erstmalige Pause behebt die folgenden Probleme in Android 11 oder niedriger, bei denen das Gerät vom vorhandenen WLAN getrennt werden muss, bevor eine Verbindung zu einem neuen Netzwerk hergestellt werden kann (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 Internetzugriff hat. Dadurch wird das Gerät gezwungen, zum alten Netzwerk zurückzukehren, was zu einer erheblichen Zeitspanne ohne WLAN-Verbindung führt.
Das alte Netzwerk wird abrupt getrennt, was bedeutet, dass alle Sockets geschlossen werden. Apps reagieren oft nicht gut auf einen plötzlichen Verbindungsabbruch. Dies kann dazu führen, dass der Nutzer einige Sekunden lang keine Internetverbindung hat, 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 doppelt auf Netzwerkänderungen. Das Gerät muss außerdem kurz mobile Daten nutzen.
Der Make-Before-Break-Vorgang wird nur für automatische WLAN-Netzwerkübergänge verwendet, die vom Betriebssystem initiiert werden. Bei von Nutzern initiierten Netzwerkübergängen wird der alte Break-Before-Make-Vorgang 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-Vorgang auch bei automatischen Umschaltungen verwendet, die vom Betriebssystem initiiert werden, z. B. beim Wechsel zwischen zwei Netzwerken, die beide für die Verwendung der MAC-Adresse der Werkseinstellungen 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“-Prüfung
Um Ihre Implementierung zu validieren, lösen Sie einen automatischen Wechsel des WLANs 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 beibehält, während es eine Verbindung zum neuen Netzwerk herstellt. 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 vorhandenen Netzwerk aufrechterhalten wird. Der Versuch wird abgebrochen, wenn erkannt wird, dass das neue Netzwerk kein Internet hat. Das Gerät verwendet dann weiterhin die vorhandene Verbindung als primäres WLAN.
Gleichzeitige lokale und Internetverbindung
Die Funktion Gleichzeitige Verbindungen (Local-only) und Internet (Internetverbindung) ermöglicht es Geräten, gleichzeitig mit dem primären Netzwerk, das das Internet bereitstellt, eine Verbindung zu einer reinen lokalen Verbindung herzustellen, z. B. zu einem IoT-Gerät. Diese Funktion verbessert die Nutzerfreundlichkeit bei der direkten Verbindung mit IoT-Geräten wie Kameras. Dies ist über die WifiNetworkSpecifier
API möglich, die in Android 10 hinzugefügt wurde.
Unter Android 11 und niedriger werden Geräte vom primären WLAN getrennt, wenn sie eine Verbindung zu einem IoT-Gerät herstellen. Dies führt zu einem Verlust der Internetverbindung, es sei denn, auf dem Gerät ist ein anderer Transporttyp verfügbar, z. B. Mobilfunkdaten.
Apps können mithilfe der WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
API prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
Weitere Informationen zu den Änderungen an der Funktion für gleichzeitige lokale und Internetverbindungen in Android 12 finden Sie unter Wi‑Fi Network Request API für Peer-to-Peer-Verbindungen.
Lokale und Internetverbindung prüfen
Verwenden Sie den MultiStaConcurrencyWifiNetworkSpecifierTest
-CTS-Test, 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 einem eingeschränkten WLAN herstellen, das nur für ausgewählte Apps verfügbar ist.
Mit der WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
API können Apps 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 WLAN-Netzwerken herzustellen:
Fügen Sie WLAN-Vorschläge hinzu, wobei
setOemPaid
odersetOemPrivate
auf „true“ gesetzt ist.Reichen Sie in
ConnectivityManager
eineNetworkRequest
mit den entsprechenden Funktionen ein:NET_CAPABILITY_OEM_PAID
fürsetOemPaid
NET_CAPABILITY_OEM_PRIVATE
fürsetOemPrivate
Wenn das Gerät Scanergebnisse bei einem Netzwerk erkennt, das dem bezahlten OEM oder dem privaten Vorschlag des OEMs entspricht, stellt es automatisch eine Verbindung zu diesem als sekundäres Netzwerk her.
Gleichzeitige eingeschränkte und Internetverbindung prüfen
Verwenden Sie den MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
-CTS-Test, um diese Funktion zu validieren.
Mehrere Netzwerke mit Internetverbindung gleichzeitig
Die Funktion Gleichzeitige Verbindung mit mehreren Netzwerken mit Internetverbindung ist für Android 13 und höher verfügbar. Damit kann das Gerät gleichzeitig eine Verbindung zu zwei Netzwerken (Zugangspunkten) herstellen, die beide uneingeschränkt sind (alle Apps haben Zugriff) und Internetzugang bieten.
Apps können mithilfe der Methode WifiManager#isStaConcurrencyForMultiInternetSupported()
prüfen, ob diese Funktion auf dem Gerät unterstützt wird.
Wenn die Funktion unterstützt wird, können Apps mit Berechtigungen sie mit der Methode WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
aktivieren. Das Feature hat die folgenden Modi:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Schränkt duale Verbindungen auf die Dualbands eines DBS-ZP ein.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Verbindet sich mit beliebigen ZPs, bei denen die einzelnen Verbindungen unterschiedliche Bänder verwenden.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Deaktiviert die Funktion.
Verwenden Sie die Methode WifiManager#getStaConcurrencyForMultiInternetMode()
, um den derzeit aktiven Feature-Modus abzufragen.
Wenn die Funktion aktiviert ist, können Sie mit den folgenden Schritten ein zusätzliches WLAN mit Internetzugang anfordern.
Erstellen Sie mit
WifiNetworkSpecifier.Builder
eine WLAN-Spezifikation. Wählen Sie mit der MethodesetBand()
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
einenNetworkRequest
mit der FunktionNET_CAPABILITY_INTERNET
.Fügen Sie der Netzwerkanfrage die Angabe 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 hergestellt wurde, wirdNetworkCallback.onAvailable()
auf dem Callback-Objekt aufgerufen.
Mehrere Netzwerke mit Internetverbindung gleichzeitig 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 müssen die folgenden Richtlinien einhalten, um die gleichzeitige Nutzung von STA und 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 einen eindeutigen MAC, der 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 innerhalb desselben oder in einem anderen Band).
- Jede STA kann mit derselben SSID verbunden werden (entweder innerhalb desselben oder in einem anderen Band). Die beiden STAs dürfen nie mit derselben BSSID verbunden sein.
Wichtige Funktionen müssen pro Schnittstelle ausgeführt werden 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 (festgelegt mit
IWifiChip.setMultiStaPrimaryConnection()
) unterstützt werden. Wenn Roaming auf beiden Schnittstellen unterstützt wird, dürfen Entscheidungen über eine Verbindung nicht mit der zweiten gleichzeitigen Verbindung in Konflikt stehen. 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, die mit
IWifiChip.setMultiStaPrimaryConnection()
festgelegt wird.Statistiken der Sicherungsschicht müssen pro Schnittstelle erfolgen.
Im Folgenden finden Sie empfohlene Implementierungen von WLAN-Chips für verschiedene Szenarien der Nebenläufigkeit:
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 Vorrang vor der sekundären Verbindung haben.DUAL_STA_NON_TRANSIENT_UNBIASED
: Gibt die Funktion für die gleichzeitige lokale und Internetverbindung oder die gleichzeitige eingeschränkte und Internetverbindung an. Die Qualität beider Verbindungen muss gleich priorisiert werden.
Da zwei gleichzeitige Standardvertragsklauseln zu den Betriebsmodi Kundencenter, SCC und DBS führen können, muss die Anbieterimplementierung die beste Funkkonfiguration auswählen, wenn das Framework
IWifiChip.setMultiStaUseCase()
aufruft, um die Funktion anzugeben. Im Folgenden finden Sie allgemeine Richtlinien:- 2 × 2 + 2 × 2 DBS wird bevorzugt, sofern verfügbar.
- Vermeiden Sie nach Möglichkeit 1x1 + 1x1 DBS, da dies die Verbindungsqualität stark beeinträchtigt. Verwenden Sie stattdessen den Kundencenter-Kontakt.
- Der MCC-Taktzyklus muss vom Treiber oder der Firmware für die verschiedenen Funktionen konfigurierbar sein. Das Framework legt den MCC-Taktzyklus nicht direkt fest, sondern fragt diese Informationen mit
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
ab. Bei der Verwendung von MCC empfehlen wir die folgenden Taktzyklen 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.