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