Gleichzeitigkeit von STA/STA für WLAN

Android 12 führt die parallele Verwendung von Wi-Fi STA/STA ein, wodurch Geräte gleichzeitig eine Verbindung zu zwei WLAN-Netzwerken herstellen können. Diese optionale Funktion aktiviert die folgenden Funktionen.

  • Make-before-Break: Das Gerät stellt eine Verbindung zu einem neuen WLAN her, bevor die bestehende Verbindung unterbrochen wird. Das sorgt für reibungslose Übergänge beim Wechsel zwischen
  • Gleichzeitige nur lokale Verbindung und Internetverbindung: Das Gerät stellt eine Verbindung zu einem nur lokalen Netzwerk her, ohne die primäre Internetverbindung des Geräts zu unterbrechen.
  • Gleichzeitige eingeschränkte 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 Verbindung des Geräts, die das Internet bereitstellt, zu unterbrechen.
  • Android 13 oder höher: Gleichzeitige mehrere Netzwerke mit Internetverbindung: Das Gerät stellt eine Internetverbindung her. Beide Netzwerke sind uneingeschränkt und für alle Apps verfügbar.

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

Implementierung

Geräte müssen Folgendes unterstützen, um die gleichzeitige Verwendung von STA/STA über WLAN 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. 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, ...] verfügbar gemacht werden. Weitere Informationen finden Sie unter Gleichzeitigkeit von WLAN-Multi-Schnittstellen.

Wenn diese Voraussetzungen erfüllt sind, implementieren Sie die gleichzeitige Verwendung von STA/STA für WLAN. Gehen Sie dazu so vor:

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

    • Make-before-Break: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Gleichzeitige, reine lokale Verbindung und Internetverbindung: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Gleichzeitig eingeschränkte Internetverbindung: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Gleichzeitig mehrere Netzwerke mit Internetverbindung: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Validieren Sie jede Implementierung wie in den entsprechenden Abschnitten beschrieben.

Zur besseren Unterstützung der Gleichzeitigkeit von STA/STA für WLAN empfehlen wir, dass OEM-benutzerdefinierte 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 eingestellt. Weitere Informationen finden Sie unter Wi-Fi Network Request API für Peer-to-Peer-Verbindungen.

Vor der Pause

Mit der Funktion make-before-break können Geräte unter Beibehaltung der bestehenden WLAN-Verbindung eine Verbindung zu einem neuen WLAN herstellen. Die Verbindung zum alten Netzwerk wird nur dann getrennt, wenn eine erfolgreiche Verbindung zum neuen WLAN hergestellt wurde und Internetzugriff vorhanden ist.

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).

  • 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 Internetzugriff hat. Dadurch wird das Gerät gezwungen, zum alten Netzwerk zurückzuwechseln, was zu einer erheblichen Zeit ohne WLAN-Verbindung führt.

  • Das alte Netzwerk wird abrupt getrennt, was bedeutet, dass alle Sockets geschlossen werden. Anwendungen reagieren oft nicht gut auf einen plötzlichen Verbindungsverlust. 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 zum neuen WLAN. Das führt dazu, dass Apps zweimal auf Netzwerkänderungen reagieren. Das Gerät muss außerdem kurz mobile Daten nutzen.

Dieser Ablauf wird nur für automatische WLAN-Wechsel verwendet, die vom Betriebssystem initiiert werden. Vom Nutzer initiierte Netzwerk-Switches verwenden den Legacy-Ablauf, bei dem das vorherige Netzwerk vollständig getrennt wird, bevor es mit dem neuen verbunden wird. In bestimmten Fällen wird der Ablauf „Unterbrechung vor dem Schließen“ auch bei automatischen Switches 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 mithilfe der WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API prüfen, ob dieser Anwendungsfall auf dem Gerät unterstützt wird.

Vorhergehende Pausen validieren

Um Ihre Implementierung zu überprüfen, lösen Sie einen automatischen WLAN-Switch aus. Stellen Sie dabei sicher, dass ein Netzwerk mit einer stärkeren Signalstärke als das verbundene Netzwerk verfügbar ist. Prüfen Sie dann, ob das Gerät die bestehende Verbindung aufrechterhä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. Wenn das neue Netzwerk keinen Internetzugriff hat, wird der Versuch abgebrochen. Das Gerät verwendet dann die bestehende Verbindung weiterhin als primäres WLAN.

Gleichzeitige lokale Verbindung 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 beim direkten Herstellen einer Verbindung zu IoT-Geräten wie Kameras. Dies ist über die in Android 10 hinzugefügte WifiNetworkSpecifier API möglich.

In Android 11 und niedriger wird die Verbindung von Geräten zum primären WLAN beim Herstellen einer Verbindung zu einem IoT-Gerät getrennt, was zu einem Verlust der Internetverbindung führt (es sei denn, für das Gerät ist ein anderer Transporttyp verfügbar, z. B. mobile Daten).

Apps können mithilfe 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 Verbindungen und Internetverbindungen in Android 12 finden Sie unter Wi-Fi Network Request API für Peer-to-Peer-Verbindungen.

Nur lokale Verbindung und Internetverbindung validieren

Verwenden Sie den CTS-Test MultiStaConcurrencyWifiNetworkSpecifierTest, um diese Funktion zu validieren.

Gleichzeitige eingeschränkte und Internetverbindung

Die Funktion Gleichzeitig eingeschränkte und Internetverbindungen ermöglicht es dem Gerät, sich gleichzeitig mit einem primären WLAN für den Nutzer und einem eingeschränkten WLAN zu verbinden, das nur für ausgewählte Apps verfügbar ist.

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

So aktivieren Sie ein Gerät, um eine Verbindung zu sekundären eingeschränkten WLAN-Netzwerken herzustellen:

  1. Fügen Sie WLAN-Vorschlä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 bei einem Netzwerk erkennt, das dem bezahlten OEM oder dem privaten OEM-Vorschlag entspricht, stellt es automatisch eine Verbindung zu diesem als sekundäres Netzwerk her.

Gleichzeitige eingeschränkte Verbindung und Internetverbindung validieren

Verwenden Sie den CTS-Test MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest, um diese Funktion zu validieren.

Gleichzeitige Verwendung mehrerer Netzwerke mit Internetverbindung

Die Funktion Gleichzeitige mehrere Netzwerke mit Internetverbindung ist ab Android 13 verfügbar. Sie ermöglicht es dem Gerät, sich gleichzeitig mit zwei Netzwerken (APs) zu verbinden, die uneingeschränkt sind (alle Apps haben Zugriff) und Internetzugriff bieten.

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

Wenn das Feature unterstützt wird, können privilegierte Apps die Funktion mithilfe der Methode WifiManager#setStaConcurrencyForMultiInternetMode(int mode) aktivieren. Das Feature hat die folgenden Modi:

Verwenden Sie die Methode WifiManager#getStaConcurrencyForMultiInternetMode(), um den derzeit aktiven Feature-Modus abzufragen.

Wenn die Funktion aktiviert ist, kannst du mit den folgenden Schritten ein zusätzliches WLAN anfordern, das das Internet bereitstellt.

  1. Erstellen Sie mit WifiNetworkSpecifier.Builder einen WLAN-Spezifizierer. Wählen Sie mit der Methode setBand() ein Band für den Spezifizierer aus. Geben Sie keine SSID oder BSSID an, da das WLAN-Framework das zusätzliche Netzwerk für das angegebene Band auswählt.

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

  3. 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 an ConnectivityManager. Wenn ein gespeichertes Netzwerk mit dem angeforderten Band im Scanergebnis verfügbar ist und die Verbindung zum Netzwerk erfolgreich ist, wird NetworkCallback.onAvailable() für das Callback-Objekt aufgerufen.

Gleichzeitige Verwendung 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

Anbieter von WLAN-Chips können die folgenden Richtlinien beachten, um die parallele Verwendung von STA/STA für WLAN zu unterstützen.

Der WLAN-Chip muss zwei gleichzeitige STA-Verbindungen unterstützen. Das bedeutet, dass sie Folgendes unterstützt:

  • 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 Standardtextanzeigen dürfen nie mit derselben BSSID verbunden sein.

Kritische Features müssen pro Schnittstelle ausgeführt werden und über die primäre Schnittstelle verfügbar sein. Im Folgenden finden Sie eine Liste dieser kritischen Features:

  • 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 kein Roaming zur BSSID der anderen Verbindung ausführen.

  • APF (und andere Auslagerungen wie ARP und NS) müssen mindestens auf der primären Schnittstelle unterstützt werden, die mit IWifiChip.setMultiStaPrimaryConnection() festgelegt wird.

  • Die Statistiken der Linkebene müssen für die jeweilige Schnittstelle verwendet werden.

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 gegenüber der sekundären Verbindung priorisiert werden.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: gibt die gleichzeitige lokale Verbindung und die Internetverbindung oder die Funktion Gleichzeitige eingeschränkte und Internetverbindungen 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 x 2 + 2 x 2 DBS wird bevorzugt, falls verfügbar.
    • Vermeiden Sie nach Möglichkeit 1 x 1 + 1 x 1 DBS, da die Verbindungsqualität stark beeinträchtigt ist. Verwenden Sie stattdessen Verwaltungskonten.
    • Der Kundencenter-Arbeitszyklus muss für die verschiedenen Funktionen über den Treiber oder die Firmware konfiguriert werden. Das Framework legt den Kundencenter-Arbeitszyklus nicht direkt fest, fragt diese Informationen aber mithilfe von StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent ab.
    • Wenn Sie Kundencenter verwenden, empfehlen wir die folgenden Arbeitszyklen zwischen den primären und sekundären Verbindungen:

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