Android 支持通過 Wi-Fi 熱點(軟 AP)進行網絡共享。從 Android 11 開始,設備製造商可用的 Soft AP 配置支持更多運營商用例和自定義,包括以下配置:
- SSID 和 BSSID
- 安全類型(包括 WPA3)
- 隱藏的 SSID
- 工作頻段和頻道(包括 ACS)
- 允許的最大客戶端數
- 自動關機超時值
- 允許用戶控制關聯設備的允許列表和阻止列表
設備功能決定了這些控件的可用性。 Android 11 引入了 API 來獲取這些功能。設備製造商還可以使用覆蓋指定基本設備功能。
請注意,其中一些 API 是系統 API,並通過權限進行限制,因此只有系統的設置應用程序才能訪問它們。
示例和來源
AOSP 設置應用程序提供了一個默認實現,但它並未使用所有用於軟 AP 配置的 API。調用應用程序必須執行以下三個功能:
使用
WifiManager#registerSoftApCallback
註冊回調以獲取設備功能。SoftApCallback
回調提供了幾種方法:-
SoftApCallback#onCapabilityChanged
:提供有關設備功能的信息,包括支持的客戶端的最大數量,以及是否支持 SAE 或 ACS。 -
SoftApCallback#onInfoChanged
:提供有關正在運行的 Soft AP 的信息(僅在啟動後有效),包括頻段和頻率信息。 -
SoftApCallback#onConnectedClientsChanged
:提供已連接客戶端的列表。對於每個客戶端,您可以獲得 MAC 地址。要獲取 IP 信息,請使用TetheringEventCallback#onClientsChanged
回調。 -
SoftApCallback#onStateChanged
:在啟用和禁用軟 AP 時提供有關其狀態的更新。 -
SoftApCallback#onBlockedClientConnecting
:提供被阻止的客戶端信息以及以下阻止原因之一:設備達到了它可以支持的最大客戶端數量,或者客戶端沒有被明確授權連接。
-
通過調用
WifiManager#setSoftApConfiguration
方法並提供SoftApConfiguration
實例來配置要用於網絡共享的軟 AP 配置。您可以使用SoftApConfiguration.Builder
類構造SoftApConfiguration
。通過在
TetheringManager#startTethering
調用網絡共享方法開始網絡共享。
實施允許和阻止列表
典型的運營商要求是為用戶提供對允許關聯到軟 AP 的設備的控制。有幾種機制可以做到這一點:
- 使用
SoftApConfiguration.Builder#setMaxNumberOfClients
限制可以關聯到軟 AP 的最大設備數量。確保指定的數字低於設備支持的最大客戶端數。您可以從SoftApCapability#getMaxSupportedClients
獲得最大數量。 使用允許和阻止列表提供動態控制:
- 軟 AP 的默認配置允許所有設備關聯到軟 AP,但 MAC 地址添加到
SoftApConfiguration.Builder#setBlockedClientList
的設備除外。 如果使用
SoftApConfiguration.Builder#setClientControlByUserEnabled( true )
配置軟 AP,則使用允許列表。- MAC 地址在
SoftApConfiguration.Builder#setBlockedClientList
中的所有設備都被阻止關聯。 - MAC 地址在
SoftApConfiguration.Builder#setAllowedClientList
中的所有設備都允許關聯。 - 所有其他設備(即 MAC 地址不在允許或阻止列表中的設備)都將被阻止關聯,但會調用
SoftApCallback#onBlockedClientConnecting
,從而允許控制應用程序(即設置應用程序)採取行動,例如例如,要求用戶確認,然後根據用戶的行為將設備添加到允許列表或阻止列表。
- MAC 地址在
請注意,設備只有在設備支持的情況下才能使用允許列表功能。您可以使用
SoftApCapability#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT )
驗證設備支持。- 軟 AP 的默認配置允許所有設備關聯到軟 AP,但 MAC 地址添加到
執行
要支持通過 Wi-Fi 熱點(軟 AP)進行網絡共享,設備製造商必須提供設置應用程序、框架和 HAL/固件支持:
設置應用程序: AOSP 設置應用程序為使用 SSID 和安全憑據配置網絡共享熱點提供了基準。此代碼可以按原樣使用或修改以提供示例和源代碼中描述的附加功能。
框架: AOSP 框架代碼支持示例和源代碼中描述的所有功能。
熱點的 HAL/固件: IHostapd.HAL 1.2 或更高版本。
定制
要自定義實現,設備製造商應配置以下覆蓋和運營商配置,這些配置記錄在packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
-
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
:默認關機超時間隔。僅在啟用SoftApConfiguration#setAutoShutdownEnabled
時有效。可以使用SoftApConfiguration#setShutdownTimeoutMillis
覆蓋。 -
config_wifiHardwareSoftapMaxClientCount
:支持客戶端的最大數量的硬件限制。設備支持的最大客戶端數量是硬件和運營商限制中的最小值(由CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
指定)。最終結果通過SoftApCapabilities#getMaxSupportedClients
提供給應用程序。 -
config_wifiSofapClientForceDisconnectSupported
:設備是否具有強制斷開客戶端的能力。需要啟用允許和阻止列表。通過SoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT )
與控制應用程序(設置應用程序)通信。 - 頻道支持:
config_wifiSoftap2gChannelList
、config_wifiSoftap5gChannelList
和config_wifiSoftap6gChannelList
。 - 恢復支持指定在將熱點配置恢復到新設備時是否將相應條目重置為默認值:
config_wifiSoftapResetChannelConfig
、config_wifiSoftapResetHiddenConfig
、config_wifiSoftapResetUserControlConfig
、config_wifiSoftapResetAutoShutdownTimerConfig
、config_wifiSoftapResetMaxClientSettingConfig
。請注意,這些默認設置為true
,這意味著這些值已重置。如果新設備不支持該配置,這一點至關重要。 硬件能力:
-
config_wifi_softap_acs_supported
-
config_wifi_softap_sae_supported
-
config_wifi_softap_ieee80211ac_supported
-
config_wifiSoftapIeee80211axSupported
-
config_wifiSoftapHeSuBeamformerSupported
-
config_wifiSoftapHeSuBeamformeeSupported
-
config_wifiSoftapHeMuBeamformerSupported
-
config_wifiSoftapHeTwtSupported
-
config_wifiSoftap6ghzSupported
-
config_wifiSoftapAcsIncludeDfs
-
驗證
Android 提供了一組單元測試、集成測試(Android 連接測試套件或 ACTS)和兼容性測試套件 (CTS) 測試來驗證熱點功能。熱點功能也可以使用供應商測試套件 (VTS) 進行測試。
單元測試
使用以下測試驗證熱點包。
服務測試:
atest packages/modules/Wifi/service/tests/wifitests/
經理測試:
atest packages/modules/Wifi/framework/tests/
集成測試 (ACTS)
位於tools/test/connectivity/acts_tests/tests/google/wifi/WifiSoftApTest.py
的ACTS熱點測試套件實現了熱點功能的功能測試。
兼容性測試套件 (CTS) 測試
使用CTS 測試來驗證熱點功能。 CTS 檢測何時啟用該功能並自動包含相關測試。
要觸發 CTS 測試,請運行:
atest android.net.wifi.cts.WifiManagerTest
供應商測試套件 (VTS)
要運行 VTS 測試,請運行:
atest VtsHalWifiHostapdV1_2Target