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 elementów:
- 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 randomizacji 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 wprowadza 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.
Pamiętaj, że niektóre interfejsy API są interfejsami systemowymi i są ograniczone przez uprawnienia, tak aby tylko aplikacja Ustawienia systemu mogła mieć do nich dostęp.
Tworzenie aplikacji za pomocą interfejsów API hotspotu
Domyślna implementacja tetheringu Wi-Fi jest dostępna w aplikacji Ustawienia AOSP, ale nie korzysta ze wszystkich interfejsów API do konfiguracji Soft AP.
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#registerSoftApCallback
w przypadku tetheringu lubWifiManager#registerLocalOnlyHotspotSoftApCallback
w przypadku hotspota lokalnego.Wywołanie zwrotne
SoftApCallback
udostę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 autoryzowany 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#setSoftApConfiguration
i podając instancjęSoftApConfiguration
. Utwórz obiektSoftApConfiguration
za pomocą klasySoftApConfiguration.Builder
. - Rozpocznij tethering, wywołując metodę tetheringu w
TetheringManager#startTethering
.
W przypadku hotspota dostępnego tylko lokalnie:
- Uruchom hotspota tylko lokalnego z określoną konfiguracją punktu dostępu programowego, wywołując metodę
WifiManager#startLocalOnlyHotspot
.
Wdrażanie list dozwolonych i zablokowanych
Typowym wymaganiem operatora jest zapewnienie użytkownikowi kontroli nad 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ć wSoftApCapability#getMaxSupportedClients
. Zapewnij dynamiczną kontrolę za pomocą list dozwolonych i zablokowanych:
- Domyślna konfiguracja punktu dostępu umożliwia łączenie się z nim wszystkim urządzeniom z wyjątkiem tych, 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 te, 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
, która 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 łączenie się z nim wszystkim urządzeniom z wyjątkiem tych, których adresy MAC zostały dodane do
Implementacja
Aby obsługiwać tethering przez hotspot lub hotspot tylko lokalny, producenci urządzeń muszą zapewnić obsługę aplikacji Ustawienia, platformy oraz HAL/oprogramowania układowego:
Aplikacja Ustawienia: aplikacja Ustawienia AOSP zapewnia podstawowe możliwości konfigurowania hotspotu tetheringu za pomocą identyfikatora SSID i danych logowania. 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 użyciem interfejsów API hotspotu.
HAL/oprogramowanie układowe dla hotspotu: HIDL
IHostapd.hal
w wersji 1.2 lub nowszej albo AIDLIHostapd.aidl
.
Dostosowywanie
Aby dostosować implementację, producenci urządzeń powinni skonfigurować te nakładki i konfiguracje 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_wifiSoftap6gChannelList
iconfig_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_supported
config_wifi_softap_sae_supported
- (Dostępne od wersji 13)
config_wifiSoftapOweTransitionSupported
- (Dostępne od wersji 13)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (Dostępne od wersji 13)
config_wifiSoftapIeee80211beSupported
config_wifiSoftapMacAddressCustomizationSupported
config_wifiSoftapHeSuBeamformerSupported
config_wifiSoftapHeSuBeamformeeSupported
config_wifiSoftapHeMuBeamformerSupported
config_wifiSoftapHeTwtSupported
config_wifiSoftap24ghzSupported
config_wifiSoftap5ghzSupported
config_wifiSoftap6ghzSupported
config_wifiSoftap60ghzSupported
config_wifiSoftapAcsIncludeDfs
Weryfikacja
Android udostępnia zestaw testów jednostkowych i testów pakietu CTS (Compatibility Test Suite) do weryfikacji funkcji hotspotu. 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 Compatibility Test Suite (CTS)
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.WifiManagerTest
Vendor Test Suite (VTS)
Jeśli interfejs HIDL jest zaimplementowany, uruchom to polecenie:
atest VtsHalWifiHostapdV1_2Target
Jeśli interfejs AIDL jest zaimplementowany, uruchom:
atest VtsHalHostapdTargetTest