W Androidzie 12 wprowadzono współbieżność Wi-Fi STA/STA, która pozwala urządzeniom łączyć się jednocześnie z dwiema sieciami Wi-Fi. Ta opcjonalna funkcja umożliwia korzystanie z następujących funkcji.
- Make-before-break : urządzenie nawiązuje połączenie z nową siecią Wi-Fi przed zerwaniem istniejącego połączenia. Dzięki temu przejścia między sieciami Wi-Fi są płynniejsze
- Jednoczesne połączenie lokalne i internetowe : urządzenie łączy się z siecią lokalną, nie zakłócając głównego połączenia internetowego urządzenia.
- Jednoczesne połączenie z ograniczeniami i połączenie z Internetem : urządzenie łączy się z siecią z ograniczeniami (dostępną tylko dla niektórych uprzywilejowanych aplikacji) bez zakłócania głównego połączenia internetowego urządzenia.
- (Android 13 lub nowszy) Jednoczesna praca z wieloma sieciami z połączeniem internetowym : urządzenie łączy się z dwiema sieciami, z których obie są nieograniczone i dostępne dla wszystkich aplikacji oraz zapewniają łączność z Internetem.
Na tej stronie opisano zachowanie urządzenia, gdy ta funkcja jest włączona, oraz szczegóły implementacji dla producentów i dostawców urządzeń.
Realizacja
Aby możliwe było wdrożenie współbieżności Wi-Fi STA/STA, urządzenia muszą obsługiwać następujące elementy:
Układ Wi-Fi lub oprogramowanie sprzętowe muszą obsługiwać dwa jednoczesne połączenia STA. Oprogramowanie sprzętowe musi obsługiwać wszystkie kombinacje kanałów i pasm dla obu połączeń. Aby uniknąć problemów z wydajnością, zalecamy użycie chipa Wi-Fi obsługującego 2x2+2x2 DBS.
Urządzenie musi obsługiwać następujące interfejsy API w implementacji AIDL lub HIDL
IWifiChip
.-
IWifiChip.setMultiStaPrimaryConnection(String ifName)
-
IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
-
Kombinacja interfejsów HAL Wi-Fi musi mieć dwa współbieżne interfejsy STA wyeksponowane przy użyciu formatu specyfikacji, takiego jak
[{STA} <= 2, ...]
. Aby uzyskać więcej informacji, zobacz temat 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 następujące czynności:
Włącz jedną lub więcej funkcji indywidualnie, korzystając z nakładek zasobów środowiska wykonawczego (domyślnie wyłączone).
- Utwórz przed przerwaniem :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- Jednoczesne połączenie lokalne i internetowe :
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- Jednoczesne połączenie ograniczone i internetowe :
config_wifiMultiStaRestrictedConcurrencyEnabled
- Jednoczesne wiele sieci z połączeniem internetowym :
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Utwórz przed przerwaniem :
Zweryfikuj każdą implementację zgodnie z opisem w odpowiednich sekcjach poniżej.
Aby lepiej obsługiwać współbieżność Wi-Fi STA/STA, zalecamy, aby platformy i aplikacje dostosowane przez OEM korzystały z metody NetworkCallback#onCapabilitiesChanged()
zamiast metody WifiManager#getConnectionInfo()
, która zwraca WifiInfo
tylko dla pojedynczej sieci i jest przestarzała w systemie Android 12 Aby uzyskać więcej informacji, zobacz Interfejs API żądań sieci Wi-Fi dla połączeń peer-to-peer .
Zrób przed przerwą
Funkcja make-before-break umożliwia urządzeniom połączenie się z nową siecią Wi-Fi przy zachowaniu istniejącego połączenia sieci Wi-Fi, rozłączenie się ze starą siecią dopiero wtedy, gdy pomyślnie połączy się z nową siecią Wi-Fi i będzie miało dostęp do Internetu.
Przypadek użycia funkcji „make-before-break” rozwiązuje następujące problemy w systemie Android 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 odkryć, że zapisane zostało nieprawidłowe hasło Wi-Fi lub że nowa sieć nie ma dostępu do Internetu. Zmusza to urządzenie do ponownego przełączenia się na starą sieć, co skutkuje znaczną ilością czasu bez łączności Wi-Fi.
Stara sieć zostaje nagle odłączona, co oznacza, że wszystkie gniazda zostają zamknięte. Aplikacje często nie reagują dobrze na nagłą utratę połączenia, co może spowodować, że użytkownik przez kilka sekund nie będzie miał 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 komórkową, a następnie z komórkowej na nową sieć Wi-Fi. Powoduje to, że aplikacje dwukrotnie reagują na zmiany w sieci. Urządzenie musi także spędzać krótką ilość czasu na korzystaniu z danych komórkowych.
Przepływ „make-before-break” jest używany tylko w przypadku automatycznych przełączników sieci Wi-Fi inicjowanych przez system operacyjny. Przełączniki sieciowe inicjowane przez użytkownika korzystają ze starszego przepływu przed uruchomieniem, w którym poprzednia sieć jest całkowicie odłączona przed podłączeniem nowej sieci. W niektórych przypadkach przepływ przed wykonaniem jest używany nawet w automatycznych przełącznikach inicjowanych przez system operacyjny, na przykład podczas przełączania między dwiema sieciami, obie skonfigurowane do korzystania z fabrycznego adresu MAC.
Aplikacje mogą sprawdzić, czy ten przypadek użycia jest obsługiwany na urządzeniu, korzystając z interfejsu API WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
.
Sprawdzanie poprawności wykonania przed przerwą
Aby zweryfikować wdrożenie, uruchom automatyczne przełączanie sieci Wi-Fi (poprzez zapewnienie dostępności sieci o silniejszym sygnale niż aktualnie podłą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 następującego 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 połączyć się z siecią, utrzymując połączenie z istniejącą siecią, i przerywa tę próbę, gdy wykryje, że w nowej sieci nie ma Internetu. Urządzenie będzie następnie nadal korzystać z istniejącego połączenia jako podstawowej sieci Wi-Fi.
Jednoczesne połączenie lokalne i internetowe
Funkcja jednoczesnego połączenia lokalnego i połączenia internetowego umożliwia urządzeniom łączenie się z połączeniem lokalnym, takim jak połączenie z urządzeniem IoT, jednocześnie z podstawową siecią dostarczającą internet. Ta funkcja poprawia wygodę użytkownika podczas bezpośredniego łączenia się z urządzeniami IoT, takimi jak kamery, co jest możliwe dzięki API WifiNetworkSpecifier
dodanemu w systemie Android 10.
W systemie Android 11 i starszym urządzenia rozłączają się z podstawową 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 rodzaj transportu, na przykład komórkową transmisję danych).
Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, korzystając z interfejsu API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
.
Aby uzyskać więcej informacji na temat zmian w funkcji jednoczesnego połączenia lokalnego i połączenia internetowego w systemie Android 12, zobacz interfejs API żądania sieci Wi-Fi dla połączeń peer-to-peer .
Sprawdzanie poprawności połączenia lokalnego i internetowego
Aby sprawdzić tę funkcję, użyj następujących testów CTS i ACTS:
- CTS:
MultiStaConcurrencyWifiNetworkSpecifierTest
- AKTY:
WifiStaConcurrencyNetworkRequestTest
Jednoczesne ograniczone połączenie internetowe
Funkcja jednoczesnego ograniczonego połączenia i połączenia internetowego umożliwia jednoczesne połączenie urządzenia z podstawową siecią Wi-Fi użytkownika i siecią Wi-Fi z ograniczeniami, która jest dostępna tylko dla wybranych aplikacji.
Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, korzystając z interfejsu API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
.
Aby umożliwić urządzeniu łączenie się z dodatkowymi sieciami Wi-Fi z ograniczeniami, wykonaj następujące kroki:
Dodaj sugestie sieci Wi-Fi , ustawiając
setOemPaid
lubsetOemPrivate
na wartość true.W
ConnectivityManager
złóżNetworkRequest
z odpowiednimi możliwościami:-
NET_CAPABILITY_OEM_PAID
dlasetOemPaid
-
NET_CAPABILITY_OEM_PRIVATE
dlasetOemPrivate
-
Gdy urządzenie wykryje wyniki skanowania z siecią odpowiadającą płatnej lub prywatnej sugestii OEM, automatycznie połączy się z nią jako siecią dodatkową.
Sprawdzanie równoczesnego połączenia ograniczonego i połączenia internetowego
Aby sprawdzić tę funkcję, użyj następujących testów CTS i ACTS:
- CTS:
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
- AKTY:
WifiStaConcurrencyNetworkRequestTest
Jednoczesne działanie wielu sieci z połączeniem internetowym
Dostępna dla systemu Android 13 lub nowszego, funkcja jednoczesnego korzystania z wielu sieci z funkcją połączenia z Internetem umożliwia urządzeniu jednoczesne łączenie się z dwiema sieciami (AP), z których obie są nieograniczone (wszystkie aplikacje mają dostęp) i zapewniają dostęp do Internetu.
Aplikacje mogą sprawdzić, czy ta funkcja jest obsługiwana na urządzeniu, korzystając z metody WifiManager#isStaConcurrencyForMultiInternetSupported()
.
Jeśli ta funkcja jest obsługiwana, aplikacje uprzywilejowane mogą ją włączyć przy użyciu metody WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
. Funkcja ma następujące tryby:
-
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
: Ogranicza podwójne połączenia do dwóch pasm punktu dostępowego DBS. -
WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
: Łączy się z dowolnymi punktami dostępowymi, w których poszczególne połączenia korzystają z różnych pasm. -
WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
: Wyłącza tę funkcję.
Aby wysłać zapytanie do aktualnie aktywnego trybu funkcji, użyj metody WifiManager#getStaConcurrencyForMultiInternetMode()
.
Gdy ta funkcja jest włączona, wykonaj poniższe kroki, aby poprosić o dodatkową sieć Wi-Fi zapewniającą dostęp do Internetu.
Utwórz specyfikator sieci Wi-Fi przy użyciu
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 strukturę Wi-Fi.Za pomocą
ConnectivityManager
utwórzNetworkRequest
z możliwościąNET_CAPABILITY_INTERNET
.Dodaj specyfikator do żądania sieciowego wraz z instancją
NetworkCallback
, aby śledzić status żądania i wyślij żądanie doConnectivityManager
. Jeśli w wyniku skanowania dostępna jest zapisana sieć o żądanym paśmie, a połączenie z siecią powiodło się, na obiekcie wywołania zwrotnego wywoływana jest funkcjaNetworkCallback.onAvailable()
.
Sprawdzanie jednoczesnych wielu sieci z połączeniem internetowym
Aby sprawdzić tę funkcję, użyj następującego testu CTS:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
Wytyczne dostawcy dotyczące chipów Wi-Fi
W przypadku dostawców chipów Wi-Fi postępuj zgodnie z poniższymi wskazówkami, aby obsługiwać współbieżność Wi-Fi STA/STA.
Układ Wi-Fi musi obsługiwać podwójne, jednoczesne połączenia STA. Oznacza to, że obsługuje następujące elementy:
- Każdy interfejs STA ma unikalny adres MAC programowany przez platformę.
- Dodatkowy interfejs STA można dynamicznie tworzyć i niszczyć.
- Każda stacja STA może być podłączona do innego identyfikatora SSID (w tym samym paśmie lub w innym paśmie).
- Każda stacja STA może być podłączona do tego samego SSID (w tym samym lub innym paśmie). Obie stacje STA nie mogą być nigdy połączone z tym samym BSSID.
Funkcje krytyczne muszą działać dla poszczególnych interfejsów i muszą być dostępne w interfejsie głównym. Poniżej znajduje się lista tych krytycznych funkcji:
Roaming musi być obsługiwany przynajmniej na głównym interfejsie (ustawionym za pomocą
IWifiChip.setMultiStaPrimaryConnection()
). Jeżeli oba interfejsy obsługują roaming, decyzje dotyczące jednego połączenia nie mogą kolidować z drugim, równoczesnym połączeniem. Na przykład jeden interfejs nie może wędrować do identyfikatora BSSID drugiego połączenia.APF (i inne odciążenia, takie jak ARP i NS) muszą być obsługiwane przynajmniej na podstawowym interfejsie (ustawionym za pomocą
IWifiChip.setMultiStaPrimaryConnection()
).Statystyki warstwy łącza muszą działać dla każdego interfejsu.
Poniżej przedstawiono zalecane implementacje chipów Wi-Fi dla różnych scenariuszy współbieżności:
Układ Wi-Fi musi umożliwiać frameworkowi wywołanie funkcji
IWifiChip.setMultiStaUseCase()
z jedną z następujących stałych w celu określenia bieżącej funkcji:-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: Określa funkcję Make-Before-Break. Jakość połączenia głównego musi być traktowana priorytetowo w stosunku do połączenia wtórnego. -
DUAL_STA_NON_TRANSIENT_UNBIASED
: Określa równoczesne połączenie lokalne i internetowe lub funkcję jednoczesnego ograniczonego połączenia internetowego . Jakość obu połączeń musi być traktowana jednakowo.
-
Ponieważ dwie współbieżne stacje STA mogą prowadzić do trybów działania MCC, SCC i DBS, implementacja dostawcy musi wybrać najlepszą konfigurację radiową, gdy struktura wywołuje
IWifiChip.setMultiStaUseCase()
w celu wskazania funkcji. Poniżej znajdują się ogólne wytyczne:- Jeśli jest dostępny, preferowany jest 2x2+2x2 DBS.
- Jeśli to możliwe, unikaj 1x1+1x1 DBS 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 sprzętowe dla różnych funkcji. Struktura nie ustawia bezpośrednio cyklu pracy MCC, ale wysyła zapytania o te informacje za pomocą
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
. W przypadku korzystania z MCC zalecamy następujące cykle pracy pomiędzy połączeniami pierwotnym i wtórnym:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
: 70% pierwotne, 30% wtórne. -
DUAL_STA_NON_TRANSIENT_UNBIASED
: 50% pierwotne, 50% wtórne.
-