Wi-Fi STA/STA-Parallelität

Android 12 führt die Wi-Fi STA/STA-Parallelität ein, die es Geräten ermöglicht, gleichzeitig eine Verbindung zu zwei Wi-Fi-Netzwerken herzustellen. Diese optionale Funktion ermöglicht die folgenden Funktionen.

  • Make-before-break : Das Gerät stellt eine Verbindung zu einem neuen Wi-Fi-Netzwerk her, bevor es die bestehende Verbindung unterbricht. Dies führt zu reibungsloseren Übergängen beim Wechsel zwischen WLAN-Netzwerken
  • Gleichzeitige Nur-Lokal- und Internetverbindung : Das Gerät stellt eine Verbindung zu einem Nur-Lokal-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 Internetkonnektivität bieten.

Auf dieser Seite werden das Geräteverhalten bei aktivierter Funktion sowie die Implementierungsdetails für Gerätehersteller und -anbieter beschrieben.

Implementierung

Geräte müssen Folgendes unterstützen, um die Wi-Fi-STA/STA-Parallelität zu implementieren:

  • Der Wi-Fi-Chip oder die Firmware müssen zwei gleichzeitige STA-Verbindungen unterstützen. Die Firmware muss für beide Verbindungen alle Kanal- und Bandkombinationen 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 IWifiChip unterstützen.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Die HAL-Wi-Fi-Schnittstellenkombination muss über zwei gleichzeitige STA-Schnittstellen verfügen, die unter Verwendung eines Spezifikationsformats wie [{STA} <= 2, ...] verfügbar gemacht werden. Weitere Informationen finden Sie unter Wi-Fi-Multi-Interface-Parallelität .

Wenn diese Voraussetzungen erfüllt sind, implementieren Sie die Wi-Fi STA/STA-Parallelität, indem Sie wie folgt vorgehen:

  1. Aktivieren Sie eine oder mehrere Funktionen einzeln mithilfe von Laufzeitressourcen-Overlays (standardmäßig deaktiviert).

    • Make-before-break : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Gleichzeitige Nur-Lokal- und Internetverbindung : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Gleichzeitige eingeschränkte und Internetverbindung : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Validieren Sie jede Implementierung wie in den jeweiligen Abschnitten unten beschrieben.

Um die Wi-Fi-STA/STA-Parallelität besser zu unterstützen, empfehlen wir, dass OEM-maßgeschneiderte Frameworks und Apps die Methode NetworkCallback#onCapabilitiesChanged() anstelle von WifiManager#getConnectionInfo() verwenden, die nur WifiInfo für ein einzelnes Netzwerk zurückgibt und in Android 12 veraltet war Weitere Informationen finden Sie unter Wi-Fi Network Request API für Peer-to-Peer-Konnektivität .

Machen Sie vor der Pause

Die Make-before-Break- Funktion ermöglicht es Geräten, eine Verbindung zu einem neuen Wi-Fi-Netzwerk herzustellen und dabei die bestehende Wi-Fi-Netzwerkverbindung aufrechtzuerhalten. Die Verbindung zum alten Netzwerk wird erst dann getrennt, wenn eine erfolgreiche Verbindung zum neuen Wi-Fi-Netzwerk hergestellt wurde und über einen Internetzugang verfügt.

Der Anwendungsfall „Make-before-break“ behebt die folgenden Probleme in Android 11 oder niedriger, bei denen das Gerät die Verbindung zum vorhandenen Wi-Fi-Netzwerk trennen muss, bevor es eine Verbindung zu einem neuen Netzwerk herstellt (break-before-make).

  • Beim Herstellen einer Verbindung zu einem neuen Netzwerk 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, wieder auf das alte Netzwerk umzuschalten, was zu einer erheblichen Zeitspanne ohne WLAN-Konnektivität führt.

  • Das alte Netzwerk wird abrupt getrennt, was bedeutet, dass alle Steckdosen geschlossen werden. Apps reagieren oft nicht gut auf einen plötzlichen Verbindungsverlust und dies kann dazu führen, dass der Benutzer einige Sekunden lang keine Internetverbindung hat, bis die neue Verbindung vollständig hergestellt ist.

  • Das Standardnetzwerk wechselt zweimal: vom alten Wi-Fi-Netzwerk zum Mobilfunknetz und dann vom Mobilfunknetz zum neuen Wi-Fi-Netzwerk. Dies führt dazu, dass Apps doppelt auf Netzwerkänderungen reagieren. Das Gerät muss außerdem eine kurze Zeit lang Mobilfunkdaten nutzen.

Der Make-before-Break-Flow wird nur für automatische Wi-Fi-Netzwerkwechsel verwendet, die vom Betriebssystem initiiert werden. Vom Benutzer initiierte Netzwerk-Switches verwenden den alten „Break-before-make“-Ablauf, bei dem das vorherige Netzwerk vollständig getrennt wird, bevor das neue Netzwerk verbunden wird. In bestimmten Fällen wird der Break-before-make-Flow sogar bei automatischen Switches verwendet, die vom Betriebssystem initiiert werden, beispielsweise beim Umschalten zwischen zwei Netzwerken, die beide für die Verwendung der werkseitigen MAC-Adresse konfiguriert sind.

Mithilfe der API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() können Apps prüfen, ob dieser Anwendungsfall auf dem Gerät unterstützt wird.

Validierung von Make-before-Break

Um Ihre Implementierung zu validieren, lösen Sie einen automatischen Wi-Fi-Netzwerkwechsel aus (indem Sie sicherstellen, dass ein Netzwerk mit einer stärkeren Signalstärke als das aktuell verbundene Netzwerk verfügbar ist) und überprüfen Sie, ob das Gerät die bestehende Verbindung beibehält, während es sich mit dem neuen Netzwerk verbindet. Um den Status beider Wi-Fi-Schnittstellen anzuzeigen und zu überprüfen, ob beide verbunden sind, verwenden Sie den folgenden Befehl.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Wenn das neue Netzwerk keine Konnektivität hat, versucht das Gerät, eine Verbindung zum Netzwerk herzustellen, während die Verbindung mit dem vorhandenen Netzwerk aufrechterhalten wird, und bricht den Versuch ab, wenn es erkennt, dass das neue Netzwerk über kein Internet verfügt. Das Gerät nutzt dann weiterhin die bestehende Verbindung als primäres WLAN-Netzwerk.

Gleichzeitige Nur-Lokal- und Internetverbindung

Die Funktion „Nur lokale Verbindung“ und „Internetverbindung“ ermöglicht es Geräten, gleichzeitig mit dem primären Internet-bereitstellenden Netzwerk eine Verbindung zu einer rein lokalen Verbindung herzustellen, beispielsweise einer Verbindung zu einem IoT-Gerät. Diese Funktion verbessert das Benutzererlebnis beim direkten Herstellen einer Verbindung mit IoT-Geräten wie Kameras, was über die in Android 10 hinzugefügte WifiNetworkSpecifier -API möglich ist.

In Android 11 und niedriger trennen Geräte beim Herstellen einer Verbindung mit einem IoT-Gerät die Verbindung zum primären Wi-Fi-Netzwerk, was zu einem Verlust der Internetverbindung führt (es sei denn, das Gerät verfügt über einen anderen Transporttyp, z. B. Mobilfunkdaten).

Apps können mithilfe der API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() prüfen, ob diese Funktion auf dem Gerät unterstützt wird.

Weitere Informationen zu Änderungen an der Funktion „Nur lokale Verbindung“ und „Internetverbindung“ in Android 12 finden Sie unter Wi-Fi Network Request API für Peer-to-Peer-Konnektivität .

Validierung der rein lokalen Verbindung und der Internetverbindung

Um diese Funktion zu validieren, verwenden Sie die folgenden CTS- und ACTS-Tests:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

Gleichzeitige eingeschränkte Internetverbindung

Die gleichzeitige eingeschränkte und Internetverbindungsfunktion ermöglicht es dem Gerät, gleichzeitig eine Verbindung zu einem primären Wi-Fi-Netzwerk für den Benutzer und einem eingeschränkten Wi-Fi-Netzwerk herzustellen, das nur für ausgewählte Apps verfügbar ist.

Apps können mithilfe der API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() prüfen, ob diese Funktion auf dem Gerät unterstützt wird.

Um einem Gerät die Verbindung mit sekundären eingeschränkten WLAN-Netzwerken zu ermöglichen, führen Sie die folgenden Schritte aus:

  1. Fügen Sie Wi-Fi-Netzwerkvorschläge hinzu, wobei setOemPaid oder setOemPrivate auf „true“ gesetzt ist.

  2. Reichen Sie in ConnectivityManager eine NetworkRequest mit den entsprechenden Funktionen ein:

Wenn das Gerät Scanergebnisse mit einem Netzwerk erkennt, das mit dem OEM-bezahlten oder OEM-privaten Vorschlag übereinstimmt, verbindet es sich automatisch mit diesem als sekundäres Netzwerk.

Validierung der gleichzeitigen eingeschränkten Verbindung und Internetverbindung

Um diese Funktion zu validieren, verwenden Sie die folgenden CTS- und ACTS-Tests:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

Gleichzeitige Nutzung mehrerer Netzwerke mit Internetverbindung

Die für Android 13 oder höher verfügbare Funktion zur gleichzeitigen Nutzung mehrerer Netzwerke mit Internetverbindung 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 die Funktion mithilfe der Methode WifiManager#setStaConcurrencyForMultiInternetMode(int mode) aktivieren. Die Funktion verfügt über die folgenden Modi:

Um den aktuell aktiven Funktionsmodus abzufragen, verwenden Sie die Methode WifiManager#getStaConcurrencyForMultiInternetMode() .

Wenn die Funktion aktiviert ist, führen Sie die folgenden Schritte aus, um ein zusätzliches Wi-Fi-Netzwerk mit Internetverbindung anzufordern.

  1. Erstellen Sie mit WifiNetworkSpecifier.Builder einen Wi-Fi-Netzwerkspezifizierer. Wählen Sie mit der Methode setBand() ein Band für den Spezifizierer aus. Geben Sie nicht die SSID oder BSSID an, da das zusätzliche Netzwerk für das angegebene Band vom Wi-Fi-Framework ausgewählt wird.

  2. Erstellen Sie mit ConnectivityManager eine NetworkRequest mit der NET_CAPABILITY_INTERNET -Funktion.

  3. Fügen Sie den Bezeichner zusammen mit einer NetworkCallback Instanz zur Netzwerkanforderung hinzu, um den Status der Anforderung zu verfolgen und die Anforderung an ConnectivityManager auszugeben. Wenn im Scanergebnis ein gespeichertes Netzwerk mit dem angeforderten Band verfügbar ist und die Verbindung zum Netzwerk erfolgreich ist, wird NetworkCallback.onAvailable() für das Callback-Objekt aufgerufen.

Validierung mehrerer Netzwerke gleichzeitig mit Internetverbindung

Um diese Funktion zu validieren, verwenden Sie den folgenden CTS-Test:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Richtlinien für WLAN-Chips des Anbieters

Für Wi-Fi-Chip-Anbieter gelten die folgenden Richtlinien zur Unterstützung der Wi-Fi-STA/STA-Parallelität.

Der Wi-Fi-Chip muss zwei gleichzeitige STA-Verbindungen unterstützen. Dies bedeutet, dass Folgendes unterstützt wird:

  • Jede STA-Schnittstelle verfügt über einen eindeutigen MAC, der vom Framework programmiert werden kann.
  • Die sekundäre STA-Schnittstelle kann dynamisch erstellt und zerstört werden.
  • Jede STA kann mit einer anderen SSID verbunden werden (entweder innerhalb desselben Bandes oder eines anderen Bandes).
  • Jede STA kann mit derselben SSID verbunden sein (entweder innerhalb desselben Bandes oder eines anderen Bandes). Die beiden STAs dürfen niemals mit derselben BSSID verbunden sein.

Kritische Funktionen müssen pro Schnittstelle 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. 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 (festgelegt mit IWifiChip.setMultiStaPrimaryConnection() ).

  • Verbindungsschichtstatistiken müssen pro Schnittstelle funktionieren.

Im Folgenden werden Wi-Fi-Chip-Implementierungen für verschiedene Parallelitätsszenarien empfohlen:

  • Der Wi-Fi-Chip muss dem Framework erlauben 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 gleichzeitige Funktion „nur lokal und Internetverbindung“ oder die Funktion „gleichzeitige eingeschränkte Verbindung und Internetverbindung“ an. Die Qualität beider Verbindungen muss gleichermaßen 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. Im Folgenden finden Sie allgemeine Richtlinien:

    • 2x2+2x2 DBS wird bevorzugt, sofern verfügbar.
    • Vermeiden Sie nach Möglichkeit 1x1+1x1 DBS, da dies die Verbindungsqualität übermäßig beeinträchtigt. Bevorzugen Sie stattdessen MCC.
    • Der MCC-Arbeitszyklus muss durch den Treiber oder die Firmware für die verschiedenen Funktionen konfigurierbar sein. Das Framework legt den MCC-Arbeitszyklus nicht direkt fest, sondern fragt diese Informationen mithilfe von StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent ab.
    • Bei Verwendung von MCC empfehlen wir die folgenden Arbeitszyklen zwischen den primären und sekundären Anschlüssen:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70 % primär, 30 % sekundär.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50 % primär, 50 % sekundär.