Android obsługuje hotspot Wi-Fi (Soft AP), w tym tethering przez hotspot Wi-Fi i lokalne hotspoty Wi-Fi.
Funkcja soft AP umożliwia skonfigurowanie tych ustawień:
- Identyfikator SSID i BSSID
- Typ zabezpieczeń (w tym WPA3)
- Ukryty identyfikator SSID
- Pasmo i kanał operacyjny (w tym ACS)
- Maksymalna liczba dozwolonych klientów
- Wartość czasu oczekiwania na automatyczne wyłączenie
- Lista dozwolonych i lista zablokowanych, które umożliwiają użytkownikowi kontrolowanie powiązanych urządzeń
- Poziom losowego generowania adresu MAC dla identyfikatora BSSID punktu dostępu
- 802.11ax i 802.11be
Dostępność tych elementów sterujących zależy od możliwości urządzenia. Android 11 udostępnia interfejsy API, które umożliwiają korzystanie z tych funkcji. Producenci urządzeń mogą też określać podstawowe funkcje urządzenia za pomocą nakładek.
Tworzenie aplikacji z interfejsami API hotspotu
Domyślna implementacja hotspotu Wi-Fi jest udostępniana przez aplikację Ustawienia w ramach projektu Android Open Source Project (AOSP), ale nie korzysta ona ze wszystkich interfejsów API do konfiguracji programowego punktu dostępu.
Aby obsługiwać tethering przez hotspot lub lokalny hotspot, aplikacja musi wykonywać te funkcje:
Zarejestruj wywołanie zwrotne, aby uzyskać informacje o możliwościach urządzenia, używając
WifiManager#registerSoftApCallbackw przypadku tetheringu lubWifiManager#registerLocalOnlyHotspotSoftApCallbackw przypadku hotspota lokalnego.Wywołanie zwrotne
SoftApCallbackudostępnia te metody:SoftApCallback#onCapabilityChanged: podaje informacje o możliwościach urządzenia, w tym maksymalną liczbę obsługiwanych klientów oraz to, czy obsługiwane są SAE lub ACS.SoftApCallback#onInfoChanged: podaje informacje o działającym punkcie dostępu (ważne tylko po uruchomieniu), w tym informacje o paśmie i częstotliwości.SoftApCallback#onConnectedClientsChanged: podaje listę połączonych klientów. W przypadku każdego klienta możesz uzyskać adres MAC. Aby uzyskać informacje o adresie IP, użyj wywołania zwrotnegoTetheringEventCallback#onClientsChanged.SoftApCallback#onStateChanged: podaje aktualne informacje o stanie punktu dostępu, gdy jest on włączany i wyłączany.SoftApCallback#onBlockedClientConnecting: podaje informacje o zablokowanym kliencie wraz z jednym z tych powodów blokady: urządzenie osiągnęło maksymalną liczbę klientów, których może obsługiwać, lub klient nie jest wyraźnie upoważniony do nawiązywania połączenia.SoftApCallback#onClientsDisconnected: Zawiera listę odłączonych klientów. W przypadku każdego klienta możesz poznać przyczynę rozłączenia.
W przypadku hotspota tetherowanego:
- Skonfiguruj konfigurację punktu dostępu do internetu, wywołując metodę
WifiManager#setSoftApConfigurationi podając instancjęSoftApConfiguration. Utwórz obiektSoftApConfigurationza pomocą klasySoftApConfiguration.Builder. - Rozpocznij tethering, wywołując metodę tetheringu w
TetheringManager#startTethering.
W przypadku hotspota dostępnego tylko lokalnie:
- Uruchom hotspot tylko lokalny z określoną konfiguracją punktu dostępu programowego, wywołując metodę
WifiManager#startLocalOnlyHotspot.
Wdrażanie list dozwolonych i zablokowanych
Typowym wymaganiem operatora jest udostępnienie użytkownikowi elementów sterujących urządzeniami, które mogą być powiązane z miękkim punktem dostępu. Możesz to zrobić na kilka sposobów:
- Ogranicz maksymalną liczbę urządzeń, które mogą być połączone z miękkim punktem dostępu, za pomocą parametru
SoftApConfiguration.Builder#setMaxNumberOfClients. Pamiętaj, aby podać liczbę mniejszą niż maksymalna liczba klientów obsługiwanych przez urządzenie. Maksymalną liczbę możesz uzyskać na stronieSoftApCapability#getMaxSupportedClients. Zapewnij dynamiczną kontrolę za pomocą list dozwolonych i zablokowanych:
- Domyślna konfiguracja punktu dostępu umożliwia wszystkim urządzeniom łączenie się z nim, z wyjątkiem urządzeń, których adresy MAC zostały dodane do
SoftApConfiguration.Builder#setBlockedClientList. - Jeśli punkt dostępu jest skonfigurowany z
SoftApConfiguration.Builder#setClientControlByUserEnabled(true), używana jest lista dozwolonych.- Wszystkie urządzenia, których adresy MAC znajdują się w
SoftApConfiguration.Builder#setBlockedClientList, są blokowane przed połączeniem. - Wszystkie urządzenia, których adresy MAC znajdują się w
SoftApConfiguration.Builder#setAllowedClientList, mogą nawiązywać połączenie. - Wszystkie inne urządzenia (czyli urządzenia, których adresy MAC nie znajdują się na liście dozwolonych ani zablokowanych) nie mogą się połączyć, ale wywoływana jest funkcja
SoftApCallback#onBlockedClientConnecting, co umożliwia aplikacji sterującej (czyli aplikacji Ustawienia) podjęcie działania, np. poproszenie użytkownika o potwierdzenie, a następnie dodanie urządzenia do listy dozwolonych lub zablokowanych w zależności od zachowania użytkownika.
- Wszystkie urządzenia, których adresy MAC znajdują się w
Pamiętaj, że urządzenia mogą korzystać z funkcji listy dozwolonych tylko wtedy, gdy jest ona obsługiwana na danym urządzeniu. Obsługę urządzenia możesz sprawdzić za pomocą
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).- Domyślna konfiguracja punktu dostępu umożliwia wszystkim urządzeniom łączenie się z nim, z wyjątkiem urządzeń, których adresy MAC zostały dodane do
Implementacja
Aby obsługiwać tethering przez hotspot lub hotspot tylko lokalny, producenci urządzeń muszą udostępnić aplikację do ustawień, platformę oraz obsługę HAL/oprogramowania układowego:
Aplikacja Ustawienia: aplikacja Ustawienia w Android Open Source Project (AOSP) stanowi podstawę do konfigurowania hotspotu tetheringu za pomocą identyfikatora SSID i danych logowania zabezpieczeń. Ten kod można wykorzystać w takiej postaci, w jakiej jest, lub zmodyfikować, aby uzyskać dodatkowe możliwości opisane w artykule Tworzenie aplikacji z interfejsami API hotspotu.
Platforma: kod platformy AOSP obsługuje wszystkie funkcje opisane w artykule Tworzenie aplikacji z interfejsami API hotspotu.
HAL/oprogramowanie układowe hotspotu: HIDL
IHostapd.halw wersji 1.2 lub nowszej albo AIDLIHostapd.aidl.
Dostosowywanie
Aby dostosować wdrożenie, zalecamy producentom urządzeń skonfigurowanie tych nakładek i konfiguracji operatora, które są opisane w packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml:
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds: domyślny interwał limitu czasu wyłączania. Obowiązuje tylko wtedy, gdy włączona jest funkcjaSoftApConfiguration#setAutoShutdownEnabled. Można go zastąpić za pomocą atrybutuSoftApConfiguration#setShutdownTimeoutMillis.config_wifiHardwareSoftapMaxClientCount: ograniczenie sprzętowe dotyczące maksymalnej liczby obsługiwanych klientów. Maksymalna liczba klientów, których obsługuje urządzenie, to minimum ograniczeń sprzętowych i operatora (określonych przezCarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT). Wynik końcowy jest przekazywany do aplikacji za pomocąSoftApCapabilities#getMaxSupportedClients.config_wifiSofapClientForceDisconnectSupported: czy urządzenie może wymusić odłączenie klienta. Wymagane do włączenia list dozwolonych i zablokowanych. Przekazywane do aplikacji sterującej (aplikacji Ustawienia) za pomocąSoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).- (Dostępne od wersji 13)
config_wifiSoftapPassphraseAsciiEncodableCheck: Określa, czy hasło do miękkiego punktu dostępu musi być kodowane w ASCII. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: Czy podczas przywracania konfiguracji z chmury w przypadku nowego urządzenia obsługiwanego przez tę funkcję automatycznie uaktualniać konfigurację ustawień pasma do pasm podwójnych.- (Dostępne od wersji 13)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: Określa, czy platforma automatycznie dołącza niższe pasma do konfiguracji pasma, aby uniknąć obsługi współistnienia. config_wifiSoftApDynamicCountryCodeUpdateSupported: czy urządzenie obsługuje dynamiczną aktualizację kodu kraju w trybie AP- Obsługa kanałów:
config_wifiSoftap2gChannelList,config_wifiSoftap5gChannelList,config_wifiSoftap6gChannelListiconfig_wifiSoftap60gChannelList. - Obsługa przywracania określająca, czy odpowiednie wpisy są resetowane do wartości domyślnych podczas przywracania konfiguracji hotspotu na nowym urządzeniu:
config_wifiSoftapResetChannelConfig,config_wifiSoftapResetHiddenConfig,config_wifiSoftapResetUserControlConfig,config_wifiSoftapResetAutoShutdownTimerConfig,config_wifiSoftapResetMaxClientSettingConfig. Pamiętaj, że domyślnie są one ustawione natrue, co oznacza, że wartości są resetowane. Jest to bardzo ważne, jeśli nowe urządzenie nie obsługuje konfiguracji. - Możliwości sprzętowe:
config_wifi_softap_acs_supportedconfig_wifi_softap_sae_supported- (Dostępne od wersji 13)
config_wifiSoftapOweTransitionSupported - (Dostępne od wersji 13)
config_wifiSoftapOweSupported config_wifi_softap_ieee80211ac_supportedconfig_wifiSoftapIeee80211axSupported- (Dostępne od wersji 13)
config_wifiSoftapIeee80211beSupported config_wifiSoftapMacAddressCustomizationSupportedconfig_wifiSoftapHeSuBeamformerSupportedconfig_wifiSoftapHeSuBeamformeeSupportedconfig_wifiSoftapHeMuBeamformerSupportedconfig_wifiSoftapHeTwtSupportedconfig_wifiSoftap24ghzSupportedconfig_wifiSoftap5ghzSupportedconfig_wifiSoftap6ghzSupportedconfig_wifiSoftap60ghzSupportedconfig_wifiSoftapAcsIncludeDfs
Weryfikacja
Android udostępnia zestaw testów jednostkowych i testów pakietu CTS (Compatibility Test Suite) do weryfikacji funkcji hotspota. Funkcję hotspotu można też przetestować za pomocą pakietu testów dostawcy (VTS).
Testy jednostkowe
Sprawdź pakiet hotspotu za pomocą tych testów.
Testy usług:
atest packages/modules/Wifi/service/tests/wifitests/Testy menedżera:
atest packages/modules/Wifi/framework/tests/
Testy pakietu CTS (Compatibility Test Suite)
Aby sprawdzić funkcję hotspotu, użyj testów CTS. CTS wykrywa, kiedy funkcja jest włączona, i automatycznie uwzględnia powiązane z nią testy.
Aby uruchomić testy CTS, wpisz:
atest android.net.wifi.cts.WifiManagerTestVendor Test Suite (VTS)
Jeśli interfejs HIDL jest zaimplementowany, uruchom to polecenie:
atest VtsHalWifiHostapdV1_2TargetJeśli interfejs AIDL jest zaimplementowany, uruchom:
atest VtsHalHostapdTargetTest