Android 支持 Wi-Fi 热点(软 AP),包括通过 Wi-Fi 热点和仅限本地使用的 Wi-Fi 热点共享网络。
软 AP 功能允许配置以下内容:
- SSID 和 BSSID
- 安全类型(包括 WPA3)
- 隐藏的 SSID
- 操作频段和频道(包括 ACS)
- 允许的客户端数量上限
- 自动关闭超时值
- 使用户能够控制关联设备的许可名单和屏蔽名单
- AP BSSID 的 MAC 地址随机分配级别
- 802.11ax 和 802.11be
设备功能决定了这些控件的可用性。Android 11 引入了可用于获取相应功能的 API。设备制造商还可以使用叠加层指定基础设备功能。
请注意,在这些 API 中,有一些是系统 API,通过各种权限进行了限制,以便只有系统的“设置”应用可以访问它们。
使用热点 API 开发应用
AOSP 的“设置”应用会提供网络共享 Wi-Fi 热点的默认实现,但不会执行用于软 AP 配置的所有 API。
如需支持通过热点或仅限本地使用的热点进行网络共享,应用必须执行以下功能:
注册回调,以使用
WifiManager#registerSoftApCallback
(对于网络共享热点)或WifiManager#registerLocalOnlyHotspotSoftApCallback
(对于仅限本地使用的热点)获取设备功能。SoftApCallback
回调提供以下方法:SoftApCallback#onCapabilityChanged
:提供有关设备功能的信息,包括支持的客户端数量上限以及支持 SAE 还是 ACS。SoftApCallback#onInfoChanged
:提供有关正在运行的软 AP(仅在启动后有效)的信息,包括频段和频率信息。SoftApCallback#onConnectedClientsChanged
:提供连接的客户端列表。对于每个客户端,您都可以获取 MAC 地址。如需获取 IP 信息,请使用TetheringEventCallback#onClientsChanged
回调。SoftApCallback#onStateChanged
:在软 AP 启用和停用时提供相应的状态更新信息。SoftApCallback#onBlockedClientConnecting
:为被屏蔽的客户端信息提供以下某一屏蔽原因:设备已达到可以支持的客户端数量上限,或客户端未获得明确授权,无法连接。
对于网络共享热点:
- 通过调用
WifiManager#setSoftApConfiguration
方法并提供SoftApConfiguration
实例,配置用于网络共享的软 AP 配置。使用SoftApConfiguration.Builder
类构造SoftApConfiguration
。 - 通过调用位于
TetheringManager#startTethering
的网络共享方法,启动网络共享。
对于仅限本地使用的热点:
- 通过调用
WifiManager#startLocalOnlyHotspot
方法,启动采用特定软 AP 配置的仅限本地使用的热点。
实现许可名单和屏蔽名单
典型的运营商要求是,为用户提供用于控制可与软 AP 相关联的设备的控件。多种机制可助您实现此目标:
- 使用
SoftApConfiguration.Builder#setMaxNumberOfClients
限制可与软 AP 相关联的设备数量上限。请确保指定的数值低于设备支持的客户端数量上限。您可以通过SoftApCapability#getMaxSupportedClients
获取数量上限。 使用许可名单和屏蔽名单来提供动态控制:
- 软 AP 的默认配置允许除 MAC 地址添加到
SoftApConfiguration.Builder#setBlockedClientList
的设备以外的所有设备与软 AP 相关联。 如果软 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 的默认配置允许除 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/
Manager 测试:
atest packages/modules/Wifi/framework/tests/
兼容性测试套件 (CTS) 测试
使用 CTS 测试来验证热点功能。CTS 会检测何时启用了这项功能,并会自动包含相关测试。
如需触发 CTS 测试,请运行以下命令:
atest android.net.wifi.cts.WifiManagerTest
供应商测试套件 (VTS)
如果实现了 HIDL 接口,请运行以下命令:
atest VtsHalWifiHostapdV1_2Target
如果实现的是 AIDL 接口,请运行以下命令:
atest VtsHalHostapdTargetTest