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

  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 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 zwrotnego TetheringEventCallback#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:

  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 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ć w SoftApCapability#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.

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

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:

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 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 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 i config_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 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 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