Równoczesne korzystanie z Wi-Fi STA/STA

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

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

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:

  • Układ lub oprogramowanie układowe Wi-Fi musi obsługiwać 2 jednoczesne połączenia STA. Oprogramowanie układowe 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 z obsługą DBS 2x2+2x2.

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

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Kombinacja interfejsów HAL Wi-Fi musi mieć 2 jednoczesne 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ę osobno za pomocą nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).

    • Make-before-break: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Jednoczesne połączenie z siecią lokalną i internetem: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Jednoczesne połączenie z siecią ograniczoną i internetem: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Jednoczesne połączenie z wieloma sieciami i internetem: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Sprawdź każdą implementację 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 używały metody NetworkCallback#onCapabilitiesChanged() zamiast WifiManager#getConnectionInfo(), która zwraca tylko WifiInfo dla 1 sieci i została wycofana w Androidzie 12. Więcej informacji znajdziesz w artykule Interfejs Wi-Fi Network Request API do obsługi łączności peer-to-peer.

Make-before-break

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

Funkcja make-before-break rozwiązuje te problemy w Androidzie 11 lub starszym, gdzie urządzenie musi odłączyć się od dotychczasowej sieci Wi-Fi, zanim połączy się z nową siecią (break-before-make).

  • 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. Wymusza to przełączenie urządzenia z powrotem na starą sieć, co powoduje znaczny czas bez łączności Wi-Fi.

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

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

Przepływ make-before-break jest używany tylko w przypadku automatycznych przełączeń sieci Wi-Fi inicjowanych przez system operacyjny. Przełączenia sieci inicjowane przez użytkownika korzystają z dotychczasowego przepływu break-before-make, w którym poprzednia sieć jest całkowicie odłączana, zanim zostanie nawiązane połączenie z nową siecią. W niektórych przypadkach przepływ break-before-make jest używany nawet w przypadku automatycznych przełączeń inicjowanych przez system operacyjny, np. podczas przełączania się między 2 sieciami skonfigurowanymi do używania fabrycznego adresu MAC.

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

Sprawdzanie funkcji make-before-break

Aby sprawdzić implementację, wywołaj automatyczne przełączenie sieci Wi-Fi (sprawdzając, czy dostępna jest sieć o silniejszym sygnale niż sieć, z którą jest połączone urządzenie) 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 tego polecenia:

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

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

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

Funkcja jednoczesne połączenie z siecią lokalną i 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 poprawia wygodę użytkowników podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak kamery, co jest możliwe dzięki interfejsowi API WifiNetworkSpecifier dodanemu w Androidzie 10.

W Androidzie 11 i starszych urządzenie odłącza się od głównej sieci Wi-Fi podczas łączenia się z urządzeniem IoT, co powoduje utratę dostępu do internetu (chyba że urządzenie ma dostępny inny typ transportu, np. 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 Wi-Fi Network Request API do obsługi łączności peer-to-peer.

Sprawdzanie połączenia z siecią lokalną i internetem

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

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

Funkcja jednoczesne połączenie z siecią ograniczoną i internetem umożliwia urządzeniu jednoczesne łączenie się z główną siecią Wi-Fi dla użytkownika i 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 łączenie się z dodatkowymi ograniczonymi sieciami Wi-Fi, wykonaj te czynności:

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

  2. W ConnectivityManager prześlij NetworkRequest z odpowiednimi możliwościami:

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

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

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

Jednoczesne połączenie z wieloma sieciami i internetem

Funkcja jednoczesne połączenie z wieloma sieciami i internetem jest dostępna w Androidzie 13 lub nowszym i umożliwia urządzeniu jednoczesne łączenie się z 2 sieciami (punktami dostępu), które nie są ograniczone (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, aplikacje z uprawnieniami mogą ją włączyć za pomocą metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode). Ta funkcja ma te tryby:

Aby sprawdzić aktywny tryb funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode().

Gdy 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ą WifiNetworkSpecifier.Builder. Wybierz pasmo dla specyfikatora za pomocą metody setBand(). Nie określaj 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 możliwością NET_CAPABILITY_INTERNET.

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

Sprawdzanie jednoczesnego połączenia z wieloma sieciami i internetem

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

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Wytyczne dla dostawców układów Wi-Fi

Aby obsługiwać współbieżność Wi-Fi STA/STA, dostawcy układów Wi-Fi powinni przestrzegać tych wytycznych.

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 programować za pomocą platformy.
  • Dodatkowy interfejs STA można dynamicznie tworzyć i usuwać.
  • Każdy interfejs STA może być połączony z innym identyfikatorem SSID (w tym samym lub innym paśmie).
  • Każdy interfejs STA może być połączony z tym samym identyfikatorem SSID (w tym samym lub innym paśmie). 2 interfejsy 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 głównym. Oto lista tych krytycznych funkcji:

  • Roaming musi być obsługiwany co najmniej w interfejsie głównym (ustawianym za pomocą IWifiChip.setMultiStaPrimaryConnection()). Jeśli roaming jest obsługiwany w obu interfejsach, decyzje dotyczące 1 połączenia nie mogą kolidować z drugim jednoczesnym połączeniem. Na przykład 1 interfejs nie może przełączać się na identyfikator BSSID drugiego połączenia.

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

  • Statystyki warstwy łącza muszą działać na poziomie interfejsu.

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

  • Układ Wi-Fi musi umożliwiać platformie wywoływanie 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 głównego musi mieć priorytet przed połączeniem dodatkowym.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: określa funkcję jednoczesne połączenie z siecią lokalną i internetem lub jednoczesne połączenie z siecią ograniczoną i internetem. Jakość obu połączeń musi mieć taki sam priorytet.
  • Ponieważ 2 jednoczesne interfejsy STA mogą prowadzić do trybów działania MCC, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy platforma wywoła IWifiChip.setMultiStaUseCase() w celu wskazania funkcji. Oto ogólne wytyczne:

    • Jeśli jest dostępny, preferowany jest DBS 2x2+2x2.
    • Jeśli to możliwe, unikaj DBS 1x1+1x1 ze względu na nadmierny wpływ na jakość połączenia. Zamiast tego preferuj MCC.
    • Cykl pracy MCC musi być konfigurowalny przez sterownik lub oprogramowanie układowe w przypadku różnych funkcji. Platforma nie ustawia bezpośrednio cyklu pracy MCC, ale wysyła zapytanie o te informacje za pomocą StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Jeśli używasz MCC, zalecamy te cykle pracy między połączeniami głównym i dodatkowym:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% główne, 30% dodatkowe.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% główne, 50% dodatkowe.