Równoczesność Wi-Fi STA/STA

Android 12 wprowadza równoczesną obsługę STA/STA Wi-Fi, która umożliwia urządzeniom jednoczesne połączenie z 2 sieciami Wi-Fi. Ta opcjonalna funkcja umożliwia wykonywanie tych czynności.

  • Utwórz, zanim zerwiesz: urządzenie łączy się z nową siecią Wi-Fi, zanim zerwie istniejące połączenie. Dzięki temu przejścia między sieciami Wi-Fi będą płynniejsze.
  • Równoczesne połączenie z internetem i siecią lokalną: urządzenie łączy się z siecią lokalną bez zakłócania głównego połączenia z internetem.
  • Jednoczesne, ograniczone połączenie i połączenie z internetem: urządzenie łączy się z siecią z ograniczeniami (dostępną tylko w przypadku niektórych aplikacji z takimi uprawnieniami) bez zakłócania jej głównego połączenia z internetem.
  • (Android 13 lub nowszy) Równoczesne połączenia z kilkoma sieciami z dostępem do internetu: urządzenie łączy się z 2 sieciami, które są nieograniczone i dostępne dla wszystkich aplikacji oraz zapewniają połączenie z internetem.

Ta strona opisuje zachowanie urządzenia po włączeniu tej funkcji oraz szczegóły dotyczące jej implementacji dla producentów i sprzedawców urządzeń.

Implementacja

Aby stosować równoczesność STA/STA Wi-Fi, urządzenia muszą obsługiwać:

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

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

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

Jeśli te wymagania są spełnione, wdrożenie równoczesnej obsługi STA/STA w sieci Wi-Fi:

  1. Włącz pojedynczą funkcję za pomocą nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).

    • Zrób przed przerwą: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Równoczesne połączenie z internetem i tylko z sieci lokalnej:config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Równoczesne połączenie z ograniczonym dostępem i internetem:config_wifiMultiStaRestrictedConcurrencyEnabled
    • Równoczesne korzystanie z wielu sieci z połączeniem z internetem:config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Sprawdź każdą implementację zgodnie z opisem w odpowiednich sekcjach.

Aby lepiej obsługiwać równoczesność STA/STA w sieci Wi-Fi, zalecamy, aby frameworki i aplikacje spersonalizowane przez OEM-a używały metody NetworkCallback#onCapabilitiesChanged() zamiast WifiManager#getConnectionInfo(), która zwraca tylko WifiInfo dla jednej sieci i została wycofana w Androidzie 12. Więcej informacji znajdziesz w artykule o interfejsie Wi-Fi Network Request API do połączeń peer-to-peer.

Zrób przed przerwą

Funkcja make-before-break umożliwia urządzeniom łączenie się z nową siecią Wi-Fi przy jednoczesnym zachowaniu dotychczasowego połączenia z tą siecią. Urządzenie odłącza się od starej sieci dopiero wtedy, gdy połączy się z nową siecią Wi-Fi i zyska dostęp do internetu.

Przypadek użycia „ustaw przed odłączeniem” rozwiązuje następujące problemy w Androidzie 11 lub starszym, w których urządzenie musi się odłączyć od istniejącej sieci Wi-Fi, zanim połączy się z nową (ustaw przed odłączeniem).

  • Podczas łączenia się z nową siecią urządzenie może wykryć, że ma zapisane nieprawidłowe hasło do Wi-Fi lub że nowa sieć nie ma dostępu do internetu. Zmusza to urządzenie do przejścia z powrotem do starej sieci, przez co przez dłuższy czas nie będzie można połączyć się z siecią Wi-Fi.

  • Stara sieć jest gwałtownie odłączana, co oznacza, że wszystkie gniazda są zamykane. Aplikacje często źle reagują na nagłą utratę połączenia, przez co użytkownik może przez kilka sekund nie mieć połączenia z internetem, dopóki nowe połączenie nie zostanie w pełni nawiązane.

  • Domyślna sieć zmienia się dwukrotnie: 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 w sieci dwukrotnie. Urządzenie musi też przez krótki czas korzystać z transmisji danych komórkowych.

Proces tworzenia przed przerwą jest używany tylko przy automatycznych przełącznikach sieci Wi-Fi zainicjowanych przez system operacyjny. Przełączanie sieci inicjowane przez użytkownika korzysta z tradycyjnego procesu przerwania połączenia przed utworzeniem nowego, w którym poprzednia sieć jest całkowicie odłączana przed połączeniem nowej sieci. W niektórych przypadkach przepływ „przerwij, zanim wykonasz” jest używany nawet w przypadku automatycznych przełączeń inicjowanych przez system operacyjny, na przykład podczas przełączania się między dwiema sieciami skonfigurowanymi do używania adresu MAC fabrycznego.

Aplikacje mogą sprawdzić, czy to zastosowanie jest obsługiwane na urządzeniu, korzystając z interfejsu API WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Weryfikacja zasady make-before-break

Aby sprawdzić implementację, wywołaj automatyczne przełączanie sieci Wi-Fi (zapewnij dostępność sieci o większej sile sygnału niż sieć połączona) i sprawdź, czy urządzenie utrzymuje dotychczasowe 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 poniższego 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 połączenie z dotychczasową siecią i anuluje próbę, gdy wykryje, że w nowej sieci nie ma internetu. Urządzenie będzie nadal używać istniejącego połączenia jako głównej sieci Wi-Fi.

Równoczesne połączenie lokalne i internetowe

Funkcja jednoczesnego połączenia lokalnego i połączenia z internetem umożliwia urządzeniom łączenie się z połączeniami wyłącznie lokalnymi (np. z urządzeniem IoT) równocześnie z główną siecią udostępniającą internet. Ta funkcja poprawia komfort korzystania z aplikacji podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak kamery. Jest to możliwe dzięki interfejsowi WifiNetworkSpecifier API dodanego w Androidzie 10.

W Androidzie 11 i starszych urządzenia odłączają się od głównej sieci Wi-Fi, gdy łączą się z urządzeniem IoT, co powoduje utratę połączenia z internetem (chyba że urządzenie ma inny typ transportu, na przykład dane komórkowe).

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

Więcej informacji o zmianach w funkcji jednoczesnego połączenia z siecią lokalną i internetem w Androidzie 12 znajdziesz w artykule Interfejs API żądania sieci Wi-Fi do obsługi połączeń typu peer-to-peer.

Weryfikacja połączenia lokalnego i z internetem

Aby zweryfikować tę funkcję, użyj testu MultiStaConcurrencyWifiNetworkSpecifierTest CTS.

Jednoczesne z ograniczeniami i połączenie z internetem

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

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

Aby umożliwić urządzeniu połączenie z dodatkowymi sieciami Wi-Fi z ograniczonym dostępem:

  1. Dodaj sugestie dotyczące sieci Wi-FisetOemPaid lub setOemPrivateustawione na wartość true.

  2. W pliku ConnectivityManager uzupełnij pole NetworkRequest z odpowiednimi uprawnieniami:

Gdy urządzenie wykryje wyniki skanowania z siecią zgodną z płatną sugestią OEM lub prywatną sugestią OEM, automatycznie połączy się z siecią dodatkową.

Sprawdzanie jednoczesnego połączenia z internetem i z siecią ograniczonego dostępu

Aby zweryfikować tę funkcję, użyj testu MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS.

równoczesne korzystanie z kilku sieci z połączeniem z internetem,

Dostępna w Androidzie 13 lub nowszym funkcja jednoczesnego korzystania z wielu sieci z dostępem do internetu pozwala urządzeniu jednoczesne połączenie z 2 sieciami (AP), z których każda jest nieograniczona (wszystkie aplikacje mają dostęp) i zapewnia 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, aplikacje z przywilejami mogą ją włączyć za pomocą metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Ta funkcja ma te tryby:

Aby wysłać zapytanie dotyczące obecnie aktywnego trybu funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode().

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

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

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

  3. Dodaj do żądania sieciowego parametr określający, a także instancję NetworkCallback, aby śledzić stan żądania, i wyślij żądanie do ConnectivityManager. Jeśli w wyniku skanowania dostępna jest zapisana sieć w żądanym paśmie, a połączenie z siecią jest udane, obiekt NetworkCallback.onAvailable() jest wywoływany z obiektu wywołania zwrotnego.

Sprawdzanie równoczesnych wielu sieci z połączeniem internetowym

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

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Zasady dotyczące chipów Wi-Fi

Producenci układów Wi-Fi: aby obsługiwać równoczesność STA/STA Wi-Fi, stosuj te wytyczne.

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

  • Każdy interfejs STA ma unikalny adres MAC, który można zaprogramować za pomocą frameworka.
  • Interfejs STA pomocniczy może być dynamicznie tworzony i niszczony.
  • Każdy STA może być połączony z innym identyfikatorem SSID (w tym samym paśmie lub w innym paśmie).
  • Każdy STA może być połączony z tym samym identyfikatorem SSID (w tym samym paśmie lub w innym paśmie). Te 2 STA nie mogą nigdy być połączone z tym samym BSSID.

Krytyczne funkcje muszą działać w ramach poszczególnych interfejsów i być dostępne w głównym interfejsie. Oto lista tych najważniejszych funkcji:

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

  • APF (i inne odciążenia, takie jak ARP i NS) muszą być obsługiwane co najmniej w interfejsie głównym (ustawionym za pomocą funkcji IWifiChip.setMultiStaPrimaryConnection()).

  • Statystyki warstwy linków muszą działać na poziomie interfejsu.

Poniżej znajdziesz zalecane implementacje układów Wi-Fi w różnych scenariuszach równoczesności:

  • Układ scalony Wi-Fi musi zezwalać frameworkowi na wywołanie funkcji IWifiChip.setMultiStaUseCase() z jedną z tych stałych wartości, aby określić bieżącą funkcję:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: określa funkcję Make-Before-Break. Należy nadać priorytet jakości połączenia podstawowego nad połączeniem dodatkowym.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: określa jednoczesne połączenie lokalne i internetowe lub funkcję jednoczesnego połączenia z internetem i z siecią ograniczonej. Jakość obu połączeń musi być traktowana na równi.
  • Ponieważ podwójne równoczesne funkcje STA mogą prowadzić do trybów działania MCK, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy platforma wywołuje IWifiChip.setMultiStaUseCase(), aby wskazać funkcję. Oto ogólne wskazówki:

    • Preferowane jest użycie 2 x 2 + 2 x 2 DBS, jeśli jest dostępne.
    • Unikaj w miarę możliwości korzystania z 1x1+1x1 DBS, ponieważ ma ono zbyt duży wpływ na jakość połączenia. Zamiast tego wybierz MCK.
    • Cykl pracy MCC musi być konfigurowalny przez sterownik lub oprogramowanie sprzętowe w przypadku różnych funkcji. Framework nie ustawia bezpośrednio cyklu pracy MCC, ale za pomocą StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent wysyła zapytanie o te informacje.
    • Jeśli korzystasz z konta MCC, zalecamy stosowanie tych cykli pracy między połączeniami podstawowymi i dodatkowymi:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% główny, 30% dodatkowy.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% główny, 50% dodatkowy.