Android 提供对 Wi-Fi 热点 (Soft AP) 的支持,包括通过 Wi-Fi 热点和本地专用 Wi-Fi 热点进行网络共享。
Soft AP 功能允许配置以下各项
- SSID 和 BSSID
- 安全类型(包括 WPA3)
- 隐藏 SSID
- 工作频段和信道(包括 ACS)
- 允许的最大客户端数
- 自动关闭超时值
- 允许列表和阻止列表,用于允许用户控制关联设备
- AP BSSID 的 MAC 随机化级别
- 802.11ax 和 802.11be
设备功能决定了这些控件的可用性。Android 11 引入了 API 来获取这些功能。设备制造商还可以使用叠加层指定基本设备功能。
请注意,某些 API 是系统 API,并通过权限进行限制,以便只有系统的“设置”应用可以访问它们。
使用热点 API 开发应用
AOSP “设置”应用提供了网络共享 Wi-Fi 热点的默认实现,但它不使用 Soft AP 配置的所有 API。
为了支持通过热点或本地专用热点进行网络共享,应用必须执行以下功能
注册回调以使用
WifiManager#registerSoftApCallback
获取设备功能(用于网络共享热点),或使用WifiManager#registerLocalOnlyHotspotSoftApCallback
(用于本地专用热点)。SoftApCallback
回调提供以下方法SoftApCallback#onCapabilityChanged
:提供有关设备功能的信息,包括支持的最大客户端数以及是否支持 SAE 或 ACS。SoftApCallback#onInfoChanged
:提供有关正在运行的 Soft AP 的信息(仅在启动后有效),包括频段和频率信息。SoftApCallback#onConnectedClientsChanged
:提供已连接客户端的列表。对于每个客户端,您可以获取 MAC 地址。要获取 IP 信息,请使用TetheringEventCallback#onClientsChanged
回调。SoftApCallback#onStateChanged
:提供关于 Soft AP 状态的更新,因为它被启用和禁用。SoftApCallback#onBlockedClientConnecting
:提供被阻止的客户端信息,以及阻止的原因之一:设备已达到其可以支持的最大客户端数量,或者客户端未明确授权连接。
对于网络共享热点
- 通过调用
WifiManager#setSoftApConfiguration
方法并提供SoftApConfiguration
实例,为网络共享配置软 AP 配置。使用SoftApConfiguration.Builder
类构造SoftApConfiguration
。 - 通过调用
TetheringManager#startTethering
处的网络共享方法来启动网络共享。
对于仅限本地的热点
- 通过调用
WifiManager#startLocalOnlyHotspot
方法,使用特定的软 AP 配置启动仅限本地的热点。
实现允许列表和阻止列表
典型的运营商要求是向用户提供对其 Soft AP 允许关联的设备的控制。有几种机制可以实现此目的
- 使用
SoftApConfiguration.Builder#setMaxNumberOfClients
限制可以关联到软 AP 的设备的最大数量。确保指定的数字低于设备支持的最大客户端数量。您可以从SoftApCapability#getMaxSupportedClients
获取最大数量。 使用允许列表和阻止列表提供动态控制
- 软 AP 的默认配置允许所有设备关联到软 AP,但 MAC 地址添加到
SoftApConfiguration.Builder#setBlockedClientList
的设备除外。 如果软 AP 配置为
SoftApConfiguration.Builder#setClientControlByUserEnabled(true)
,则使用允许列表。- MAC 地址在
SoftApConfiguration.Builder#setBlockedClientList
中的所有设备都将被阻止关联。 - MAC 地址在
SoftApConfiguration.Builder#setAllowedClientList
中的所有设备都允许关联。 - 所有其他设备(即,MAC 地址不在允许列表或阻止列表中的设备)都被阻止关联,但会调用
SoftApCallback#onBlockedClientConnecting
,从而允许控制应用(即“设置”应用)采取操作,例如,请求用户确认,然后根据用户的行为将设备添加到允许列表或阻止列表。
- MAC 地址在
请注意,设备只能在设备支持允许列表功能的情况下使用该功能。您可以使用
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
验证设备是否支持。- 软 AP 的默认配置允许所有设备关联到软 AP,但 MAC 地址添加到
实现
为了支持通过热点进行网络共享或支持仅限本地的热点,设备制造商必须提供“设置”应用、框架和 HAL/固件支持
“设置”应用: AOSP “设置”应用为配置具有 SSID 和安全凭据的网络共享热点提供了基准。此代码可以按原样使用,也可以修改以提供 使用热点 API 开发应用 中描述的其他功能。
框架: AOSP 框架代码支持 使用热点 API 开发应用 中描述的所有功能。
用于热点的 HAL/固件: HIDL IHostapd.hal 版本 1.2 或更高版本,或者 AIDL IHostapd.aidl。
自定义
要自定义实现,设备制造商应配置以下叠加层和运营商配置,这些内容记录在 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)
传达给控制应用(“设置”应用)。- (从 13 开始提供)
config_wifiSoftapPassphraseAsciiEncodableCheck
:是否要求软 AP 密码短语为 ASCII 可编码。 config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
:当新设备受支持时,在云配置恢复期间是否自动将频段设置配置升级为双频段。- (从 13 开始提供)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
:框架是否自动将较低频段附加到频段配置以避免共存处理。 config_wifiSoftApDynamicCountryCodeUpdateSupported
:设备是否支持 AP 模式下的动态国家/地区代码更新- 信道支持:
config_wifiSoftap2gChannelList
、config_wifiSoftap5gChannelList
、config_wifiSoftap6gChannelList
和config_wifiSoftap60gChannelList
。 - 恢复支持,指定在将热点配置恢复到新设备时,是否将相应的条目重置为默认值:
config_wifiSoftapResetChannelConfig
、config_wifiSoftapResetHiddenConfig
、config_wifiSoftapResetUserControlConfig
、config_wifiSoftapResetAutoShutdownTimerConfig
、config_wifiSoftapResetMaxClientSettingConfig
。请注意,这些默认设置为true
,这意味着这些值将被重置。如果新设备不支持该配置,则这一点至关重要。 - 硬件功能
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (从 13 开始提供)
config_wifiSoftapOweTransitionSupported
- (从 13 开始提供)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (从 13 开始提供)
config_wifiSoftapIeee80211beSupported
config_wifiSoftapMacAddressCustomizationSupported
config_wifiSoftapHeSuBeamformerSupported
config_wifiSoftapHeSuBeamformeeSupported
config_wifiSoftapHeMuBeamformerSupported
config_wifiSoftapHeTwtSupported
config_wifiSoftap24ghzSupported
config_wifiSoftap5ghzSupported
config_wifiSoftap6ghzSupported
config_wifiSoftap60ghzSupported
config_wifiSoftapAcsIncludeDfs
验证
Android 提供了一组单元测试和兼容性测试套件 (CTS) 测试,用于验证热点功能。热点功能也可以使用供应商测试套件 (VTS) 进行测试。
单元测试
使用以下测试验证热点软件包。
服务测试
atest packages/modules/Wifi/service/tests/wifitests/
管理器测试
atest packages/modules/Wifi/framework/tests/
兼容性测试套件 (CTS) 测试
使用CTS 测试验证热点功能。当功能启用时,CTS 会检测到并自动包含关联的测试。
要触发 CTS 测试,请运行
atest android.net.wifi.cts.WifiManagerTest
供应商测试套件 (VTS)
如果实现了 HIDL 接口,请运行
atest VtsHalWifiHostapdV1_2Target
如果实现了 AIDL 接口,请运行
atest VtsHalHostapdTargetTest