Równoczesne korzystanie z Wi-Fi STA/STA

Android 12 wprowadza współbieżność Wi-Fi STA/STA, która umożliwia urządzeniom łączenie się z 2 sieciami Wi-Fi jednocześnie. Ta opcjonalna funkcja umożliwia korzystanie z tych funkcji:

  • Make-before-break: urządzenie nawiązuje połączenie z nową siecią Wi-Fi, zanim przerwie dotychczasowe połączenie. Dzięki temu przełączanie między sieciami Wi-Fi jest płynniejsze.
  • Jednoczesne połączenie tylko z siecią lokalną i z internetem: urządzenie łączy się z siecią tylko lokalną bez przerywania głównego połączenia urządzenia z internetem.
  • Jednoczesne połączenie z siecią o ograniczonym dostępie i internetem: urządzenie łączy się z siecią o ograniczonym dostępie (dostępną tylko dla niektórych uprzywilejowanych aplikacji) bez zakłócania podstawowego połączenia urządzenia z internetem.
  • (Android 13 lub nowszy) Jednoczesne korzystanie z wielu sieci z dostępem do internetu: urządzenie łączy się z 2 sieciami, które nie są ograniczone i są dostępne dla wszystkich aplikacji oraz zapewniają połączenie z internetem.

Na tej stronie opisujemy zachowanie urządzenia, gdy ta funkcja jest włączona, oraz szczegóły implementacji dla producentów i dostawców urządzeń.

Implementacja

Aby wdrożyć współbieżność Wi-Fi STA/STA, urządzenia muszą obsługiwać te funkcje:

  • Chip Wi-Fi lub oprogramowanie układowe musi obsługiwać 2 jednoczesne połączenia STA. Oprogramowanie musi obsługiwać wszystkie kombinacje kanałów i pasm w przypadku obu połączeń. Aby uniknąć problemów z wydajnością, zalecamy używanie układu Wi-Fi obsługującego DBS w konfiguracji 2x2+2x2.

  • Urządzenie musi obsługiwać te interfejsy API w implementacji IWifiChip w języku AIDL lub HIDL.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Kombinacja interfejsów Wi-Fi HAL musi mieć 2 równoczesne interfejsy STA udostępniane w formacie specyfikacji, np. [{STA} <= 2, ...]. Więcej informacji znajdziesz w artykule Współbieżność wielu interfejsów Wi-Fi.

Jeśli te wymagania wstępne są spełnione, zaimplementuj współbieżność Wi-Fi STA/STA, wykonując te czynności:

  1. Włącz co najmniej 1 funkcję indywidualnie za pomocą nakładek na zasoby środowiska wykonawczego (domyślnie wyłączone).

    • Make-before-break: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Jednoczesne połączenie lokalne i internetowe: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Jednoczesne połączenie z internetem i ograniczone połączenie: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Jednoczesne korzystanie z wielu sieci z połączeniem z internetem: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Sprawdź poprawność każdej implementacji zgodnie z opisem w odpowiednich sekcjach.

Aby lepiej obsługiwać współbieżność Wi-Fi STA/STA, zalecamy, aby dostosowane przez producenta OEM platformy i aplikacje korzystały z metody NetworkCallback#onCapabilitiesChanged() zamiast WifiManager#getConnectionInfo(), która zwraca tylko WifiInfo w przypadku pojedynczej sieci i została wycofana w Androidzie 12. Więcej informacji znajdziesz w artykule Interfejs Wi-Fi Network Request API do połączeń peer-to-peer.

Make-before-break

Funkcja make-before-break umożliwia urządzeniom łączenie się z nową siecią Wi-Fi przy jednoczesnym utrzymaniu połączenia z dotychczasową siecią Wi-Fi. Rozłączenie z dotychczasową siecią następuje dopiero po pomyślnym połączeniu z nową siecią Wi-Fi i uzyskaniu dostępu do internetu.

Przypadek użycia „make-before-break” rozwiązuje te problemy w Androidzie 11 lub starszym, gdzie urządzenie musi odłączyć się od istniejącej sieci Wi-Fi przed połączeniem się z nową siecią (break-before-make).

  • Podczas łączenia się z nową siecią urządzenie może wykryć, że zapisane hasło do Wi-Fi jest nieprawidłowe lub że nowa sieć nie ma dostępu do internetu. Wymusza to powrót urządzenia do starej sieci, co powoduje długi czas bez połączenia z Wi-Fi.

  • Stara sieć jest nagle odłączana, co oznacza, że wszystkie gniazda zostają zamknięte. Aplikacje często źle reagują na nagłą utratę łączności, co może powodować, że użytkownik przez kilka sekund nie będzie mieć dostępu do internetu, dopóki nowe połączenie nie zostanie w pełni nawiązane.

  • Domyślna sieć zmienia się 2 razy: ze starej sieci Wi-Fi na sieć komórkową, a potem z sieci komórkowej na nową sieć Wi-Fi. Powoduje to, że aplikacje reagują na zmiany sieci dwukrotnie. Urządzenie musi też przez krótki czas korzystać z komórkowej transmisji danych.

Proces „make-before-break” jest używany tylko w przypadku automatycznego przełączania sieci Wi-Fi inicjowanego przez system operacyjny. Przełączanie sieci inicjowane przez użytkownika odbywa się w ramach starszego procesu „rozłącz przed połączeniem”, w którym poprzednia sieć jest całkowicie odłączana przed połączeniem z nową siecią. W niektórych przypadkach proces „przerwa przed połączeniem” jest używany nawet w przypadku automatycznego przełączania inicjowanego przez system operacyjny, np. podczas przełączania między dwiema sieciami skonfigurowanymi do używania fabrycznego adresu MAC.

Aplikacje mogą sprawdzać, czy ten przypadek użycia jest obsługiwany na urządzeniu, za pomocą interfejsu WifiManager#isMakeBeforeBreakWifiSwitchingSupported()API.

Weryfikacja działania „make-before-break”

Aby sprawdzić wdrożenie, wywołaj automatyczne przełączenie sieci Wi-Fi (upewnij się, że dostępna jest sieć o sile sygnału większej niż połączona sieć) i sprawdź, czy urządzenie utrzymuje istniejące połączenie podczas łączenia się z nową siecią. Aby wyświetlić stan obu interfejsów Wi-Fi i sprawdzić, czy oba są połączone, użyj tego polecenia:

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

Jeśli nowa sieć nie ma połączenia, urządzenie próbuje się z nią połączyć, utrzymując jednocześnie połączenie z dotychczasową siecią. Próba zostaje przerwana, gdy urządzenie wykryje, że nowa sieć nie ma dostępu do internetu. Urządzenie nadal będzie używać dotychczasowego połączenia jako głównej sieci Wi-Fi.

Równoczesne połączenie lokalne i internetowe

Funkcja jednoczesnego połączenia lokalnego i z internetem umożliwia urządzeniom łączenie się z połączeniem lokalnym, np. z urządzeniem IoT, jednocześnie z główną siecią zapewniającą dostęp do internetu. Ta funkcja zwiększa wygodę użytkowników podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak kamery, co jest możliwe dzięki interfejsowi WifiNetworkSpecifier API dodanemu w Androidzie 10.

W Androidzie 11 i starszych wersjach urządzenia odłączają się od głównej sieci Wi-Fi podczas łączenia się z urządzeniem IoT, co powoduje utratę połączenia z internetem (chyba że urządzenie ma dostępny inny typ transmisji, np. mobilną transmisję danych).

Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, za pomocą interfejsu WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()API.

Więcej informacji o zmianach w funkcji jednoczesnego połączenia lokalnego i internetowego w Androidzie 12 znajdziesz w artykule Interfejs Wi-Fi Network Request API do połączeń peer-to-peer.

Sprawdzanie połączenia lokalnego i z internetem

Aby sprawdzić tę funkcję, użyj MultiStaConcurrencyWifiNetworkSpecifierTesttestu CTS.

Jednoczesne połączenie z siecią ograniczoną i internetem

Funkcja jednoczesnego połączenia z siecią ograniczoną i internetem umożliwia urządzeniu jednoczesne łączenie się z główną siecią Wi-Fi użytkownika i siecią Wi-Fi o ograniczonym dostępie, która jest dostępna tylko dla wybranych aplikacji.

Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, za pomocą interfejsu WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()API.

Aby umożliwić urządzeniu łączenie się z dodatkowymi sieciami Wi-Fi z ograniczeniami, wykonaj te czynności:

  1. Dodaj sugestie sieci Wi-Fi z wartością setOemPaid lub setOemPrivate ustawioną na true.

  2. W pliku ConnectivityManager utwórz NetworkRequest z odpowiednimi możliwościami:

Gdy urządzenie wykryje wyniki skanowania z siecią pasującą do płatnej lub prywatnej sugestii OEM, automatycznie połączy się z nią jako siecią dodatkową.

Sprawdzanie jednoczesnego połączenia z siecią ograniczoną i internetem

Aby sprawdzić tę funkcję, użyj MultiStaConcurrencyRestrictedWifiNetworkSuggestionTesttestu CTS.

Równoczesne korzystanie z wielu sieci z połączeniem internetowym

Funkcja jednoczesnego korzystania z wielu sieci z połączeniem internetowym, dostępna na urządzeniach z Androidem 13 lub nowszym, umożliwia jednoczesne łączenie się z 2 sieciami (punktami dostępu), które nie mają ograniczeń (wszystkie aplikacje mają do nich dostęp) i zapewniają dostęp do internetu.

Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, za pomocą metody WifiManager#isStaConcurrencyForMultiInternetSupported().

Jeśli funkcja jest obsługiwana, uprzywilejowane aplikacje mogą ją włączyć za pomocą metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Ta funkcja ma te tryby:

Aby wysłać zapytanie o obecnie aktywny tryb funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode().

Gdy ta funkcja jest włączona, wykonaj te czynności, aby poprosić o dodatkową sieć Wi-Fi zapewniającą dostęp do internetu.

  1. Utwórz specyfikator sieci Wi-Fi za pomocą elementu WifiNetworkSpecifier.Builder. Wybierz pasmo dla specyfikatora za pomocą metody setBand(). Nie podawaj identyfikatora SSID ani BSSID, ponieważ dodatkowa sieć dla określonego pasma jest wybierana przez platformę Wi-Fi.

  2. Za pomocą ConnectivityManager utwórz NetworkRequest z funkcją NET_CAPABILITY_INTERNET.

  3. Dodaj specyfikator do żądania sieciowego wraz z instancją NetworkCallback, aby śledzić stan żądania, i wyślij żądanie do ConnectivityManager. Jeśli w wyniku skanowania dostępna jest zapisana sieć z żądanym pasmem, a połączenie z nią zostanie nawiązane, w obiekcie wywołania zwrotnego wywoływana jest funkcja NetworkCallback.onAvailable().

Sprawdzanie wielu sieci jednocześnie z połączeniem z internetem

Aby sprawdzić tę funkcję, użyj tego testu CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Wskazówki dotyczące chipów Wi-Fi dostawców

Dostawcy układów Wi-Fi powinni postępować zgodnie z tymi wytycznymi, aby obsługiwać jednoczesne połączenie Wi-Fi STA/STA.

Chip Wi-Fi musi obsługiwać 2 jednoczesne połączenia STA. Oznacza to, że obsługuje:

  • Każdy interfejs STA ma unikalny adres MAC, który można zaprogramować w ramach platformy.
  • Pomocniczy interfejs STA można tworzyć i usuwać dynamicznie.
  • Każda stacja STA może być połączona z innym identyfikatorem SSID (w tym samym lub innym paśmie).
  • Każda stacja STA może być połączona z tym samym identyfikatorem SSID (w tym samym lub innym paśmie). Dwa urządzenia STA nigdy nie mogą być połączone z tym samym identyfikatorem BSSID.

Krytyczne funkcje muszą działać na poziomie interfejsu i muszą być dostępne w interfejsie podstawowym. Oto lista najważniejszych funkcji:

  • Roaming musi być obsługiwany co najmniej na interfejsie podstawowym (ustawionym za pomocą parametru IWifiChip.setMultiStaPrimaryConnection()). Jeśli roaming jest obsługiwany na obu interfejsach, decyzje dotyczące jednego połączenia nie mogą kolidować z drugim połączeniem równoczesnym. Na przykład jeden interfejs nie może przełączać się na identyfikator BSSID innego połączenia.

  • APF (i inne funkcje odciążania, takie jak ARP i NS) musi być obsługiwany co najmniej na interfejsie podstawowym (ustawianym za pomocą IWifiChip.setMultiStaPrimaryConnection()).

  • Statystyki warstwy łącza muszą być obliczane dla każdego interfejsu.

Oto zalecane implementacje układów Wi-Fi w różnych scenariuszach współbieżności:

  • Chip Wi-Fi musi umożliwiać wywoływanie przez platformę funkcji IWifiChip.setMultiStaUseCase() z jedną z tych stałych, aby określić bieżącą funkcję:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: określa funkcję Make-Before-Break. Jakość połączenia podstawowego musi mieć wyższy priorytet niż jakość połączenia dodatkowego.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: określa funkcję jednoczesnego połączenia lokalnego i internetowego lub jednoczesnego połączenia ograniczonego i internetowego. Jakość obu połączeń musi być traktowana priorytetowo w równym stopniu.
  • Ponieważ podwójne jednoczesne STA mogą prowadzić do trybów działania MCK, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy platforma wywołuje funkcję IWifiChip.setMultiStaUseCase(), aby wskazać tę funkcję. Oto ogólne wskazówki:

    • Jeśli jest dostępny, preferowany jest 2x2+2x2 DBS.
    • W miarę możliwości unikaj DBS 1x1+1x1, ponieważ ma ona zbyt duży wpływ na jakość połączenia. Zamiast tego używaj konta MCK.
    • Cykl pracy MCC musi być konfigurowany przez sterownik lub oprogramowanie sprzętowe dla różnych funkcji. Platforma nie ustawia bezpośrednio cyklu pracy MCC, ale wysyła zapytania o te informacje za pomocą funkcji StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Jeśli używasz MCC, zalecamy te cykle pracy między połączeniami podstawowymi a dodatkowymi:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% – podstawowe, 30% – dodatkowe.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% – podstawowy, 50% – dodatkowy.