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.
- Make-before-break: 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 podstawowego połączenia z internetem.
- Równoczesne połączenie z internetem i z siecią z ograniczonym dostępem: urządzenie łączy się z siecią z ograniczonym dostępem (dostępnej tylko dla niektórych uprzywilejowanych aplikacji) bez zakłócania podstawowego połączenia z internetem.
- (Android 13 lub nowszy) Jednoczesne połączenie 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.
Na tej stronie opisano zachowanie urządzenia, gdy ta funkcja jest włączona, oraz szczegóły 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ładu 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 interfejsu HAL Wi-Fi musi mieć 2 jednoczesne interfejsy STA udostępniane za pomocą formatu specyfikacji, takiego jak
[{STA} <= 2, ...]
. Więcej informacji znajdziesz w artykule Wi-Fi – równoczesna obsługa wielu interfejsów.
Jeśli te wymagania są spełnione, wdrożenie równoczesnej obsługi STA/STA w sieci Wi-Fi:
Włącz pojedynczą funkcję za pomocą nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Równoczesne połączenie z internetem i siecią lokalną:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Równoczesne połączenie z internetem i z internetem z ograniczonym dostępem:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Równoczesne korzystanie z wielu sieci z połączeniem z internetem:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
Sprawdź każdą implementację zgodnie z opisem w odpowiednich sekcjach.
Aby lepiej obsługiwać równoczesność STA/STA 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 Wi-Fi Network Request API do obsługi połączeń typu peer-to-peer.
Make-before-break
Funkcja make-before-break umożliwia urządzeniom łączenie się z nową siecią Wi-Fi przy jednoczesnym zachowaniu połączenia z obecną siecią Wi-Fi. Urządzenie rozłącza się ze 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. Spowoduje to przywrócenie starej sieci, co spowoduje znaczne wydłużenie czasu bez połączenia z Wi-Fi.
Stara sieć jest gwałtownie odłączana, co oznacza, że wszystkie gniazda są zamykane. Aplikacje często nie reagują dobrze na nagłą utratę połączenia, co może spowodować, że użytkownik na kilka sekund straci połączenie z internetem, dopóki nie zostanie nawiązane nowe połączenie.
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 „make-before-break” jest używany tylko do automatycznego przełączania sieci Wi-Fi inicjowanego 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, za pomocą interfejsu API WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Weryfikacja zasady „zrób albo zniszcz”
Aby sprawdzić implementację, wywołaj automatyczne przełączanie sieci Wi-Fi (zapewnij dostępność sieci o silniejszym sygnale 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 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 połączyć się z nią, zachowując jednocześnie połączenie z dotychczasową siecią. Gdy wykryje, że nowa sieć nie ma dostępu do internetu, przerywa próbę połączenia. Urządzenie będzie nadal używać istniejącego połączenia jako głównej sieci Wi-Fi.
Równoczesne połączenie z internetem i siecią lokalną
Funkcja jednoczesnego połączenia z siecią lokalną i internetem umożliwia urządzeniom nawiązywanie połączenia z siecią lokalną (np. z urządzeniem IoT) jednocześnie z główną siecią internetową. 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 połączenie z internetem i z siecią z ograniczonym dostępem.
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 dla 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:
Dodaj sugestie dotyczące sieci Wi-Fi z
setOemPaid
lubsetOemPrivate
ustawione na wartość true.W pliku
ConnectivityManager
prześlij plikNetworkRequest
z odpowiednimi funkcjami:NET_CAPABILITY_OEM_PAID
dlasetOemPaid
NET_CAPABILITY_OEM_PRIVATE
dlasetOemPrivate
Gdy urządzenie wykryje wyniki skanowania z siecią odpowiadającą płatnej usłudze OEM lub prywatnej usłudze OEM, automatycznie połączy się z nią jako 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 na 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:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Ogranicza podwójne połączenia do podwójnych pasm DBS AP.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: łączy się z dowolnymi punktami dostępu, 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 o obecnie aktywny tryb 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.
Utwórz specyfikator sieci Wi-Fi za pomocą
WifiNetworkSpecifier.Builder
. Wybierz pasmo dla specyfikatora za pomocą metodysetBand()
. Nie określaj identyfikatora SSID ani BSSID, ponieważ sieć dodatkowa dla określonego pasma jest wybierana przez platformę Wi-Fi.Za pomocą aplikacji
ConnectivityManager
utwórz elementNetworkRequest
z opcjąNET_CAPABILITY_INTERNET
.Dodaj do żądania sieciowego parametr specifier wraz z instancją
NetworkCallback
, aby śledzić stan żądania, i prześlij żądanie doConnectivityManager
. Jeśli zapisana sieć z żądanym pasmem jest dostępna w wyniku skanowania i połączenie z nią jest udane, obiekt wywołania zwrotnego wywołuje funkcjęNetworkCallback.onAvailable()
.
Sprawdzanie równoczesnych wielu sieci z połączeniem z internetem
Aby zweryfikować tę funkcję, użyj tego testu CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Zasady dotyczące chipów Wi-Fi
Producenci układów Wi-Fi powinni postępować zgodnie z tymi wytycznymi, aby obsługiwać równoczesność STA/STA w sieci Wi-Fi.
Układ 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ć za pomocą platformy.
- 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 muszą być dostępne w interfejsie głównym. Oto lista tych najważniejszych funkcji:
Roaming musi być obsługiwany co najmniej w interfejsie głównym (ustaw 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 przełączać się na BSSID drugiego połączenia.APF (i inne metody przenoszenia, np. ARP i NS) muszą być obsługiwane co najmniej w głównym interfejsie (ustaw za pomocą
IWifiChip.setMultiStaPrimaryConnection()
).Statystyki warstwy linków muszą działać na poziomie interfejsu.
Oto zalecane implementacje układów Wi-Fi w różnych scenariuszach dotyczących współbieżnoś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 upewnić się, że jakość połączenia podstawowego jest wyższa niż połączenia dodatkowego.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ównoległe STA mogą prowadzić do trybów działania MCC, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy framework wywołuje funkcję
IWifiChip.setMultiStaUseCase()
, aby wskazać funkcję. Oto ogólne wskazówki:- Preferowane są karty 2x2+2x2 DBS, jeśli są 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 użyj konta MCC.
- 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 używasz MCC, zalecamy te cykle 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.