Wi-Fi STA/STA-Parallelität

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Android 12 führt Wi-Fi STA/STA-Parallelität ein, die es Geräten ermöglicht, sich gleichzeitig mit zwei Wi-Fi-Netzwerken zu verbinden. 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 trennt. Dies führt zu reibungsloseren Übergängen beim Wechseln zwischen Wi-Fi-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.
  • Gleichzeitig 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) Gleichzeitig mehrere Netzwerke mit Internetverbindung : Das Gerät verbindet sich mit zwei Netzwerken, die beide uneingeschränkt und für alle Apps verfügbar sind und eine Internetverbindung bieten.

Diese Seite beschreibt das Geräteverhalten, wenn diese Funktion aktiviert ist, und die Implementierungsdetails für Gerätehersteller und Anbieter.

Implementierung

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

  • Der Wi-Fi-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 Wi-Fi-Chips.

  • Das Gerät muss die folgenden APIs in der Anbieter-HAL-Version 1.5 unterstützen

    • IWifiChip.setMultiStaPrimaryConnection()
    • IWifiChip.setMultiStaUseCase()
  • Die HAL-Wi-Fi-Schnittstellenkombination muss über zwei gleichzeitige STA-Schnittstellen verfügen, die mit einem Spezifikationsformat 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 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
    • Gleichzeitig eingeschränkte und Internetverbindung : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Mehrere Netzwerke gleichzeitig mit Internetverbindung : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Validieren Sie jede Implementierung wie in den jeweiligen Abschnitten unten beschrieben.

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

Make-before-break

Die Make-Before-Break- Funktion ermöglicht es Geräten, sich mit einem neuen Wi-Fi-Netzwerk zu verbinden, während die bestehende Wi-Fi-Netzwerkverbindung beibehalten wird, und nur dann vom alten Netzwerk getrennt wird, wenn es sich erfolgreich mit dem neuen Wi-Fi-Netzwerk verbindet und Internetzugang hat.

Der Make-before-Break-Anwendungsfall adressiert die folgenden Probleme in Android 11 oder niedriger, bei denen das Gerät die Verbindung zum bestehenden Wi-Fi-Netzwerk trennen muss, bevor es sich mit einem neuen Netzwerk verbindet (Break-before-Make).

  • Beim Verbinden mit 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, zum alten Netzwerk zurückzukehren, was zu einer erheblichen Zeitspanne ohne Wi-Fi-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 ohne Internetverbindung erlebt, bis die neue Verbindung vollständig hergestellt ist.

  • Das Standardnetzwerk ändert sich zweimal, vom alten WLAN-Netzwerk zum Mobilfunknetz und dann vom Mobilfunknetz zum neuen WLAN-Netzwerk. Dies führt dazu, dass Apps zweimal auf Netzwerkänderungen reagieren. Das Gerät muss auch eine kurze Zeit mit der Nutzung von Mobilfunkdaten verbringen.

Der Make-before-Break-Flow wird nur für automatische Wi-Fi-Netzwerkwechsel verwendet, die vom Betriebssystem initiiert werden. Benutzerinitiierte Netzwerk-Switches verwenden den alten Break-before-Make-Flow, 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 Umschaltungen verwendet, die vom Betriebssystem initiiert werden, beispielsweise wenn zwischen zwei Netzwerken umgeschaltet wird, die beide für die Verwendung der werkseitigen MAC-Adresse konfiguriert sind.

Apps können mithilfe 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 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. Verwenden Sie den folgenden Befehl, um den Status beider Wi-Fi-Schnittstellen anzuzeigen und zu überprü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 Konnektivität hat, versucht das Gerät, sich mit dem Netzwerk zu verbinden, während es die Verbindung mit dem bestehenden Netzwerk aufrechterhält, und bricht den Versuch ab, wenn es erkennt, dass das neue Netzwerk kein Internet hat. Das Gerät verwendet dann weiterhin die bestehende Verbindung als primäres WLAN-Netzwerk.

Gleichzeitige Nur-Lokal- und Internetverbindung

Die gleichzeitige Nur-Lokal- und Internet-Verbindungsfunktion ermöglicht es Geräten, sich gleichzeitig mit dem primären Internet-bereitstellenden Netzwerk mit einer Nur-Lokal-Verbindung zu verbinden, wie z. B. einer Verbindung zu einem IoT-Gerät. Diese Funktion verbessert die Benutzererfahrung beim direkten Verbinden mit IoT-Geräten wie Kameras, was durch die in Android 10 hinzugefügte WifiNetworkSpecifier API möglich ist.

In Android 11 und niedriger trennen sich Geräte vom primären Wi-Fi-Netzwerk, wenn sie sich mit einem IoT-Gerät verbinden, was zu einem Verlust der Internetverbindung führt (es sei denn, das Gerät verfügt über einen anderen Übertragungstyp, z. B. Mobilfunkdaten).

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 gleichzeitigen Nur-Lokal- und Internetverbindungsfunktion in Android 12 finden Sie unter Wi-Fi-Netzwerkanforderungs-API für Peer-to-Peer-Konnektivität .

Validierung der rein lokalen und Internetverbindung

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

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

Gleichzeitige eingeschränkte und Internetverbindung

Die gleichzeitig eingeschränkte und Internetverbindungsfunktion ermöglicht es dem Gerät, sich gleichzeitig mit einem primären Wi-Fi-Netzwerk für den Benutzer und einem eingeschränkten Wi-Fi-Netzwerk zu verbinden, das nur ausgewählten Apps zur Verfügung steht.

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

Führen Sie die folgenden Schritte aus, um einem Gerät die Verbindung mit sekundären eingeschränkten Wi-Fi-Netzwerken zu ermöglichen:

  1. Fügen Sie Vorschläge für WLAN-Netzwerke hinzu, indem setOemPaid oder setOemPrivate auf true setzen.

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

Wenn das Gerät Scanergebnisse mit einem Netzwerk erkennt, das mit dem bezahlten oder privaten OEM-Vorschlag übereinstimmt, stellt es automatisch eine Verbindung als sekundäres Netzwerk her.

Validierung gleichzeitiger eingeschränkter und Internetverbindung

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

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

Gleichzeitig mehrere Netzwerke mit Internetverbindung

Die für Android 13 oder höher verfügbare Funktion für gleichzeitig mehrere Netzwerke mit Internetverbindung ermöglicht es dem Gerät, sich gleichzeitig mit zwei Netzwerken (APs) zu verbinden, die beide uneingeschränkt sind (alle Apps haben Zugriff) und Internetzugang bereitzustellen.

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 WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . Die Funktion hat 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 WLAN-Netzwerk anzufordern, das das Internet bereitstellt.

  1. Erstellen Sie mit WifiNetworkSpecifier.Builder einen Wi-Fi-Netzwerkbezeichner. Wählen Sie mit der Methode setBand() ein Band für den Bezeichner aus. Geben Sie die SSID oder BSSID nicht 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 der Netzwerkanforderung den Bezeichner zusammen mit einer NetworkCallback -Instanz hinzu, um den Status der Anforderung nachzuverfolgen, und senden Sie die Anforderung an ConnectivityManager . Wenn ein gespeichertes Netzwerk mit dem angeforderten Band im Scan-Ergebnis verfügbar ist und die Verbindung zum Netzwerk erfolgreich ist, wird NetworkCallback.onAvailable() für das Callback-Objekt aufgerufen.

Validierung mehrerer gleichzeitiger Netzwerke mit Internetverbindung

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

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Richtlinien für WLAN-Chips des Anbieters

Verwenden Sie für Anbieter von Wi-Fi-Chips die folgenden Richtlinien, um Wi-Fi STA/STA-Parallelität zu unterstützen.

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

  • Jede STA-Schnittstelle hat einen eindeutigen MAC, der durch das Framework programmierbar ist.
  • Die sekundäre STA-Schnittstelle kann dynamisch erstellt und zerstört werden.
  • Jede STA kann mit einer anderen SSID verbunden werden (entweder innerhalb desselben Bands oder eines anderen Bands).
  • Jede STA kann mit derselben SSID verbunden werden (entweder innerhalb desselben Bands oder eines anderen Bands). 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 kritischen Merkmale:

  • Roaming muss zumindest auf der primären Schnittstelle unterstützt werden (festgelegt mit IWifiChip.setMultiStaPrimaryConnection() ). Wenn Roaming auf beiden Schnittstellen unterstützt wird, dürfen Entscheidungen über 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() ).

  • Link-Layer-Statistiken müssen pro Schnittstelle funktionieren.

Im Folgenden finden Sie empfohlene Wi-Fi-Chip-Implementierungen für verschiedene Gleichzeitigkeitsszenarien:

  • 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 gegenüber der sekundären Verbindung priorisiert werden.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Gibt die gleichzeitige Nur-Lokal- und Internetverbindung oder die gleichzeitige eingeschränkte und Internetverbindungsfunktion an. Die Qualität beider Verbindungen muss gleichermaßen priorisiert werden.
  • Da duale 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() , um die Funktion anzugeben. Im Folgenden finden Sie allgemeine Richtlinien:

    • 2x2+2x2 DBS wird bevorzugt, falls verfügbar.
    • Vermeiden Sie nach Möglichkeit 1x1+1x1 DBS, da dies die Verbindungsqualität übermäßig beeinträchtigt. Bevorzugen Sie stattdessen MCC.
    • Das MCC-Tastverhältnis 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 .
    • 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.