Hotspot Wi-Fi (Soft AP)

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 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 za pomocą interfejsów API hotspotu

Domyślna implementacja hotspotu Wi-Fi jest udostępniana przez aplikację Ustawienia w ramach Projektu Android Open Source (AOSP), ale nie korzysta 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:

  1. Zarejestruj wywołanie zwrotne, aby uzyskać informacje o możliwościach urządzenia, używając WifiManager#registerSoftApCallback w przypadku tetheringu lub WifiManager#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 i 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: Zawiera 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 zwrotnego TetheringEventCallback#onClientsChanged.
    • SoftApCallback#onStateChanged: podaje aktualne informacje o stanie punktu dostępu Soft AP, 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: podaje listę odłączonych klientów. W przypadku każdego klienta możesz poznać przyczynę rozłączenia.

W przypadku hotspota tetherowanego:

  1. Skonfiguruj konfigurację punktu dostępu do internetu, wywołując metodę WifiManager#setSoftApConfiguration i podając instancję SoftApConfiguration. Utwórz obiekt SoftApConfiguration za pomocą klasy SoftApConfiguration.Builder.
  2. Rozpocznij tethering, wywołując metodę tetheringu w TetheringManager#startTethering.

W przypadku hotspota dostępnego tylko lokalnie:

  1. 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ą łączyć się z miękkim punktem dostępu. Możesz to zrobić na kilka sposobów:

  • Ogranicz maksymalną liczbę urządzeń, które mogą łączyć się 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 stronie SoftApCapability#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 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.

    Pamiętaj, że urządzenia mogą korzystać z funkcji listy dozwolonych tylko wtedy, gdy jest ona obsługiwana na urządzeniu. Obsługę urządzenia możesz sprawdzić za pomocą SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).

Implementacja

Aby obsługiwać tethering przez hotspot lub hotspot tylko lokalny, producenci urządzeń muszą udostępnić aplikację ustawień, platformę oraz obsługę HAL/oprogramowania układowego:

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 przedział czasu oczekiwania na wyłączenie. Obowiązuje tylko wtedy, gdy włączona jest funkcja SoftApConfiguration#setAutoShutdownEnabled. Można go zastąpić za pomocą atrybutu SoftApConfiguration#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 przez CarrierConfigManager.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 list zablokowanych. Przekazywane do aplikacji sterującej (aplikacji Ustawienia) za pomocą SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).
  • (Dostępne od Androida 13) config_wifiSoftapPassphraseAsciiEncodableCheck: Określa, czy hasło do 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ę usługę automatycznie uaktualniać konfigurację ustawień pasma do pasm podwójnych.
  • (Dostępne od Androida 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 i config_wifiSoftap60gChannelList.
  • Obsługa przywracania, która określa, 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 na true, 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 na Androidzie 13)config_wifiSoftapOweTransitionSupported
    • (Dostępne na Androidzie 13)config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Dostępne na Androidzie 13)config_wifiSoftapIeee80211beSupported
    • config_wifiSoftapMacAddressCustomizationSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap24ghzSupported
    • config_wifiSoftap5ghzSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftap60ghzSupported
    • config_wifiSoftapAcsIncludeDfs

Walidacja

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.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