Android 12 wprowadza równoczesność Wi-Fi STA/STA, która umożliwia urządzeniom łączenie się z 2 sieciami Wi-Fi jednocześnie. Ta opcjonalna funkcja włącza poniższe funkcje.
- Zrób przed przerwą: urządzenie nawiązuje połączenie z nową siecią Wi-Fi przed zerwaniem dotychczasowego połączenia. Dzięki temu przejścia między sieciami Wi-Fi są płynniejsze
- Jednoczesne połączenie tylko lokalne i połączenie z internetem: urządzenie łączy się z siecią lokalną bez zakłócania głównego połączenia z internetem na urządzeniu.
- 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) Jednoczesne połączenie z wieloma sieciami: urządzenie łączy się z 2 sieciami, z których obie są nieograniczone i dostępne dla wszystkich aplikacji oraz zapewniają połączenie z internetem.
Na tej stronie znajdziesz opis działania urządzeń po włączeniu tej funkcji oraz szczegóły implementacji dla producentów i dostawców urządzeń.
Implementacja
Aby można było zaimplementować równoczesność Wi-Fi STA/STA, urządzenia muszą obsługiwać te elementy:
Układ Wi-Fi lub oprogramowanie układowe Wi-Fi musi obsługiwać 2 równoczesne połączenia STA. Oprogramowanie układowe musi obsługiwać wszystkie kombinacje kanałów i pasm dla obu połączeń. Aby uniknąć problemów z wydajnością, zalecamy układ Wi-Fi 2 x 2 + 2 x 2 DBS.
Urządzenie musi obsługiwać poniższe interfejsy API w implementacji AIDL lub HIDL w
IWifiChip
.IWifiChip.setMultiStaPrimaryConnection(String ifName)
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
Kombinacja interfejsu Wi-Fi HAL musi mieć 2 równoczesne interfejsy STA udostępnione przy użyciu formatu specyfikacji, takiego jak
[{STA} <= 2, ...]
. Więcej informacji znajdziesz w artykule o współbieżności wielu interfejsów Wi-Fi.
Jeśli te warunki wstępne są spełnione, zaimplementuj równoczesność Wi-Fi STA/STA w sieci. Aby to zrobić:
Włącz pojedynczo co najmniej 1 funkcję za pomocą nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).
- Zrób przed przerwą:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Jednoczesne połączenie lokalne i połączenie z internetem:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Jednoczesne z ograniczonym dostępem i połączenie z internetem:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Wiele sieci równoczesnych z połączeniem internetowym:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Zrób przed przerwą:
Sprawdź każdą implementację w sposób opisany w odpowiednich sekcjach.
Aby lepiej obsługiwać równoczesność Wi-Fi STA/STA, zalecamy, aby ramki i aplikacje dostosowane do potrzeb OEM korzystały z metody NetworkCallback#onCapabilitiesChanged()
, a nie metody WifiManager#getConnectionInfo()
, która zwraca WifiInfo
tylko w przypadku 1 sieci. Ta funkcja 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-przed-break pozwala urządzeniom połączyć się z nową siecią Wi-Fi, zachowując dotychczasowe połączenie z siecią Wi-Fi. Rozłączanie od starej sieci następuje tylko wtedy, gdy połączy się z nową siecią Wi-Fi i będzie mieć dostęp do internetu.
Ten przypadek użycia dotyczy poniższych problemów w Androidzie 11 i starszych, w których 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. Zmusza to urządzenie do przejścia z powrotem do starej sieci, przez co przez dłuższy czas bez połączenia z Wi-Fi nie będzie można połączyć się z siecią.
Stara sieć zostaje nagle odłączona, co oznacza, że wszystkie gniazdka 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.
Sieć domyślna zmienia się dwukrotnie: ze starej sieci Wi-Fi na komórkową, a następnie z sieci komórkowej na nową. Dzięki temu aplikacje dwukrotnie reagują na zmiany w sieci. Przez krótki czas urządzenie musi też korzystać z komórkowej transmisji danych.
Proces tworzenia przed przerwą jest używany tylko przy automatycznych przełącznikach sieci Wi-Fi zainicjowanych przez system operacyjny. Przełączniki sieci inicjowane przez użytkownika korzystają ze starszego procesu, w którym poprzednia sieć jest całkowicie odłączona przed połączeniem z nową siecią. W niektórych przypadkach procedura przerwa przed wykonaniem jest stosowana nawet w przypadku automatycznych przełączników inicjowanych przez system operacyjny, na przykład przy przełączaniu się między 2 sieciami, w których obie są skonfigurowane pod kątem 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()
.
Zweryfikuj renderowanie przed przerwą
Aby sprawdzić poprawność implementacji, aktywuj automatyczny przełącznik sieci Wi-Fi (zapewniając dostępność sieci o silniejszej sieci) i sprawdź, czy urządzenie zachowuje bieżą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 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 korzystać z istniejącego połączenia jako głównej sieci Wi-Fi.
Równoczesne połączenie lokalne i połączenie z internetem
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 zwiększa wygodę użytkowników podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak aparaty. Jest to możliwe dzięki interfejsowi API WifiNetworkSpecifier
dodanemu w Androidzie 10.
W Androidzie 11 i starszych wersjach urządzenia podczas łączenia się z urządzeniem IoT rozłączają się z podstawową siecią Wi-Fi, co skutkuje utratą połączenia z internetem (chyba że urządzenie ma inny rodzaj transportu, np. komórkową transmisję danych).
Aplikacje mogą sprawdzać, czy ta funkcja jest obsługiwana na urządzeniu za pomocą interfejsu API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Więcej informacji o zmianach w funkcji równoczesnego połączenia lokalnego i połączenia z internetem w Androidzie 12 znajdziesz w artykule o interfejsie Wi-Fi Network Request API na potrzeby połączeń peer-to-peer.
Sprawdź połączenie lokalne i połączenie z internetem
Aby sprawdzić tę funkcję, użyj testu CTS MultiStaConcurrencyWifiNetworkSpecifierTest
.
Jednoczesne z ograniczeniami i połączenie z internetem
Funkcja równoczesnego ograniczonego i połączenia z internetem umożliwia urządzeniu jednoczesne łączenie się z główną siecią Wi-Fi użytkownika i siecią Wi-Fi z ograniczonym dostępem, która jest dostępna tylko dla wybranych aplikacji.
Aplikacje mogą sprawdzać, czy ta funkcja jest obsługiwana na urządzeniu za pomocą interfejsu API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Aby umożliwić urządzeniu łączenie się z dodatkowymi sieciami Wi-Fi z ograniczonym dostępem, wykonaj te czynności:
Dodaj Sugestie dotyczące sieci Wi-Fi z wartością
setOemPaid
lubsetOemPrivate
ustawioną na Prawda.W pliku
ConnectivityManager
uzupełnij poleNetworkRequest
z odpowiednimi uprawnieniami:NET_CAPABILITY_OEM_PAID
przezsetOemPaid
NET_CAPABILITY_OEM_PRIVATE
przezsetOemPrivate
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ą.
Sprawdź, czy jednocześnie z ograniczonym dostępem i połączeniem internetowym
Aby sprawdzić tę funkcję, użyj testu CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
.
Wiele sieci równoczesnych z połączeniem internetowym
Funkcja równoczesnych sieci z połączeniem internetowym, dostępna na Androidzie 13 lub nowszym, umożliwia urządzeniu jednoczesne łączenie się z 2 sieciami. Każda z nich jest nieograniczona (wszystkie aplikacje mają dostęp) i zapewniają dostęp do internetu.
Aplikacje mogą sprawdzać, czy ta funkcja jest obsługiwana na urządzeniu za pomocą metody WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Jeśli funkcja jest obsługiwana, aplikacje z podwyższonymi uprawnieniami mogą ją włączyć przy użyciu metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. Funkcja ta działa w tych trybach:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: ogranicza podwójne połączenia do 2 zakresów punktu dostępu DBS.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: łączy się z wybranymi punktami dostępowymi, w których poszczególne połączenia używają różnych pasm.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: wyłącza funkcję.
Aby wysłać zapytanie dotyczące obecnie aktywnego trybu funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode()
.
Gdy ta funkcja jest włączona, wykonaj poniższe czynności, aby poprosić o dodatkową sieć Wi-Fi korzystającą z internetu.
Utwórz specyfikator sieci Wi-Fi za pomocą narzędzia
WifiNetworkSpecifier.Builder
. Wybierz zakres dla specyfikatora za pomocą metodysetBand()
. Nie określaj identyfikatora SSID ani BSSID, jako dodatkowej sieci dla określonego pasma jest wybierana przez platformę Wi-Fi.Za pomocą polecenia
ConnectivityManager
utwórzNetworkRequest
z możliwościąNET_CAPABILITY_INTERNET
.Dodaj specyfikator do żądania sieciowego wraz z instancją
NetworkCallback
, aby śledzić stan żądania, i wyślij żądanie doConnectivityManager
. Jeśli w wyniku skanowania dostępna jest zapisana sieć w żądanym paśmie, a połączenie z siecią jest udane, obiektNetworkCallback.onAvailable()
jest wywoływany z obiektu wywołania zwrotnego.
Zweryfikuj wiele równoczesnych sieci z połączeniem internetowym
Aby sprawdzić tę funkcję, użyj tego testu CTS:
- punkt CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Wytyczne dotyczące układu Wi-Fi dostawcy
Dostawcy układów scalonych Wi-Fi powinni przestrzegać podanych niżej wytycznych dotyczących obsługi równoczesności Wi-Fi STA/STA.
Układ Wi-Fi musi obsługiwać podwójne równoczesne połączenia STA. Oznacza to, że obsługuje:
- Każdy interfejs STA ma unikalny program MAC, który można zaprogramować przez tę platformę.
- Dodatkowy interfejs STA można dynamicznie tworzyć i niszczyć.
- Każdy punkt STA może być podłączony do innego identyfikatora SSID (w tym samym lub w innym paśmie).
- Każdy punkt STA może być podłączony do tego samego identyfikatora SSID (w tym samym lub w innym paśmie). Oba identyfikatory STA nigdy nie mogą być połączone z tym samym identyfikatorem BSSID.
Kluczowe funkcje muszą działać według interfejsu i muszą być dostępne w interfejsie głównym. Oto lista najważniejszych funkcji:
Roaming musi być obsługiwany przez co najmniej główny interfejs (ustawiony za pomocą
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 korzystać z identyfikatora BSSID drugiego.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ć dla poszczególnych interfejsów.
Poniżej znajdziesz zalecane implementacje układów Wi-Fi w różnych scenariuszach równoczesności:
Układ Wi-Fi musi umożliwiać platformie wywołanie
IWifiChip.setMultiStaUseCase()
z jedną z tych stałych w celu określenia bieżącej funkcji:DUAL_STA_TRANSIENT_PREFER_PRIMARY
: określa funkcję Make-Przed-Przerwą. Jakość połączenia podstawowego musi mieć wyższy priorytet niż połączenie dodatkowe.DUAL_STA_NON_TRANSIENT_UNBIASED
: określa jednoczesne połączenie lokalne i połączenie z internetem lub funkcję równoczesnego ograniczonego połączenia z internetem. Jakość obu połączeń musi mieć taki sam priorytet.
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 dotyczące sposobu postępowania:- Preferowana jest baza danych DBS 2 x 2 + 2 x 2, jeśli jest dostępna.
- W miarę możliwości unikaj DBS 1 x 1 + 1 z powodu nadmiernego wpływu na jakość połączenia. Zamiast tego wybierz MCK.
- Sterownik lub oprogramowanie układowe MCK musi skonfigurować współczynnik wypełnienia MCK dla różnych funkcji. Struktura nie określa bezpośrednio współczynnika wypełnienia MCK, ale odpytuje o tę informację za pomocą funkcji
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. Jeśli korzystasz z MCK, zalecamy stosowanie następujących współczynników wypełnienia między połączeniem głównym i wtórnym:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% podstawowy, 30% dodatkowy.DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% podstawowy, 50% dodatkowy.