Wi-Fi STA/STA 并发

Android 12 引入了 Wi-Fi STA/STA 并发功能,该功能允许设备同时连接到两个 Wi-Fi 网络。此可选功能支持以下功能。

  • 先连接后断开:设备先连接到新的 Wi-Fi 网络,然后再断开现有连接。这样可以在 Wi-Fi 网络之间切换时实现更平滑的过渡
  • 并发本地专用和互联网连接:设备连接到仅限本地的网络,而不会中断设备提供主要互联网的连接。
  • 并发受限和互联网连接:设备连接到受限网络(仅对某些特权应用可用),而不会中断设备提供主要互联网的连接。
  • (Android 13 或更高版本) 并发多网络互联网连接:设备连接到两个网络,这两个网络都是不受限制且对所有应用可用,并提供互联网连接。

本页面介绍启用此功能时的设备行为,以及设备制造商和供应商的实施细节。

实现

设备必须支持以下各项才能实施 Wi-Fi STA/STA 并发

  • Wi-Fi 芯片或固件必须支持两个并发 STA 连接。固件必须支持两个连接的所有信道和频段组合。为了避免性能问题,我们建议使用支持 2x2+2x2 DBS 的 Wi-Fi 芯片。

  • 设备必须在 IWifiChip 的 AIDL 或 HIDL 实现中支持以下 API。

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • HAL Wi-Fi 接口组合必须具有两个并发 STA 接口,并使用诸如 [{STA} <= 2, ...] 的规范格式公开。有关详细信息,请参阅 Wi-Fi 多接口并发

如果满足这些先决条件,请通过执行以下操作来实施 Wi-Fi STA/STA 并发

  1. 使用 运行时资源叠加 单独启用一个或多个功能(默认情况下禁用)。

    • 先建立后拆除config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • 并发本地专用和互联网连接config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • 并发受限和互联网连接config_wifiMultiStaRestrictedConcurrencyEnabled
    • 并发多网络互联网连接config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. 按照各自的部分中的描述验证每个实现。

为了更好地支持 Wi-Fi STA/STA 并发,我们建议 OEM 自定义的框架和应用使用 NetworkCallback#onCapabilitiesChanged() 方法,而不是 WifiManager#getConnectionInfo(),后者仅返回单个网络的 WifiInfo,并且已在 Android 12 中弃用。有关详细信息,请参阅 用于对等连接的 Wi-Fi 网络请求 API

先建立后拆除

先建立后拆除 功能允许设备在保持现有 Wi-Fi 网络连接的同时连接到新的 Wi-Fi 网络,仅在新 Wi-Fi 网络成功连接并具有互联网访问权限时才断开与旧网络的连接。

先建立后拆除用例解决了 Android 11 或更低版本中的以下问题,在这些版本中,设备必须先断开与现有 Wi-Fi 网络的连接,然后才能连接到新网络(先拆除后建立)。

  • 连接到新网络时,设备可能会发现它保存了不正确的 Wi-Fi 密码,或者新网络没有互联网访问权限。这迫使设备切换回旧网络,导致在没有 Wi-Fi 连接的情况下花费大量时间。

  • 旧网络突然断开连接,这意味着所有套接字都将关闭。应用通常对连接的突然丢失反应不佳,这可能会导致用户在几秒钟内没有互联网连接,直到新连接完全建立。

  • 默认网络更改两次,从旧 Wi-Fi 网络更改为蜂窝网络,然后从蜂窝网络更改为新 Wi-Fi 网络。这会导致应用对网络更改做出两次反应。设备还必须花费少量时间使用蜂窝数据。

先建立后拆除流程仅用于操作系统发起的自动 Wi-Fi 网络切换。用户发起的网络切换使用传统的先拆除后建立流程,其中先完全断开与先前网络的连接,然后再连接到新网络。在某些情况下,即使在操作系统发起的自动切换中也使用先拆除后建立流程,例如,在两个配置为使用出厂 MAC 地址的网络之间切换时。

应用可以使用 WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API 检查设备是否支持此用例。

验证先建立后拆除

要验证您的实现,请触发自动 Wi-Fi 网络切换(通过确保信号强度强于已连接网络的网络可用),并验证设备在连接到新网络时是否保持现有连接。要查看两个 Wi-Fi 接口的状态并验证两者都已连接,请使用以下命令。

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

如果新网络没有连接,设备会尝试连接到该网络,同时保持与现有网络的连接,并在检测到新网络没有互联网时中止尝试。然后,设备继续使用现有连接作为主要 Wi-Fi 网络。

并发本地专用和互联网连接

并发本地专用和互联网连接 功能允许设备在与提供主要互联网的网络并发的情况下连接到仅限本地的连接,例如与 IoT 设备的连接。此功能改进了直接连接到 IoT 设备(例如摄像头)的用户体验,这可以通过 Android 10 中添加的 WifiNetworkSpecifier API 实现。

在 Android 11 及更低版本中,设备在连接到 IoT 设备时会断开与主要 Wi-Fi 网络的连接,从而导致互联网连接丢失(除非设备有另一种可用的传输类型,例如蜂窝数据)。

应用可以使用 WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API 检查设备是否支持此功能。

有关 Android 12 中并发本地专用和互联网连接功能的更改的详细信息,请参阅 用于对等连接的 Wi-Fi 网络请求 API

验证本地专用和互联网连接

要验证此功能,请使用 MultiStaConcurrencyWifiNetworkSpecifierTest CTS 测试。

并发受限和互联网连接

并发受限和互联网连接 功能允许设备并发连接到用户的首要 Wi-Fi 网络和仅对选定应用可用的受限 Wi-Fi 网络。

应用可以使用 WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API 检查设备是否支持此功能。

要使设备能够连接到辅助受限 Wi-Fi 网络,请按照以下步骤操作

  1. 添加 Wi-Fi 网络建议,并将 setOemPaidsetOemPrivate 设置为 true。

  2. ConnectivityManager 中,使用相应的能力文件 NetworkRequest

当设备检测到扫描结果中存在与 OEM 付费或 OEM 专用建议匹配的网络时,它会自动连接到该网络作为辅助网络。

验证并发受限和互联网连接

要验证此功能,请使用 MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS 测试。

并发多网络互联网连接

并发多网络互联网连接 功能适用于 Android 13 或更高版本,允许设备并发连接到两个网络 (AP),这两个网络都是不受限制的(所有应用都可以访问)并提供互联网访问。

应用可以使用 WifiManager#isStaConcurrencyForMultiInternetSupported() 方法检查设备是否支持此功能。

如果支持该功能,特权应用可以使用 WifiManager#setStaConcurrencyForMultiInternetMode(int mode) 方法启用该功能。该功能具有以下模式

要查询当前活动的特性模式,请使用 WifiManager#getStaConcurrencyForMultiInternetMode() 方法。

启用该功能后,请使用以下步骤请求额外的提供互联网的 Wi-Fi 网络。

  1. 使用 WifiNetworkSpecifier.Builder 创建 Wi-Fi 网络指定器。使用 setBand() 方法为指定器选择频段。不要指定 SSID 或 BSSID,因为指定频段的附加网络由 Wi-Fi 框架选择。

  2. 使用 ConnectivityManager,使用 NET_CAPABILITY_INTERNET 功能创建 NetworkRequest

  3. 将指定器添加到网络请求,以及 NetworkCallback 实例以跟踪请求的状态,并将请求发布到 ConnectivityManager。如果扫描结果中存在具有请求频段的已保存网络,并且与网络的连接成功,则会在回调对象上调用 NetworkCallback.onAvailable()

验证并发多网络互联网连接

要验证此功能,请使用以下 CTS 测试

  • CTS:MultiStaConcurrencyMultiInternetWifiNetworkTest

供应商 Wi-Fi 芯片指南

对于 Wi-Fi 芯片供应商,请使用以下指南来支持 Wi-Fi STA/STA 并发。

Wi-Fi 芯片必须支持双并发 STA 连接。这意味着它支持以下各项

  • 每个 STA 接口都有一个唯一的 MAC 地址,可以由框架编程。
  • 辅助 STA 接口可以动态创建和销毁。
  • 每个 STA 都可以连接到不同的 SSID(在同一频段内或不同频段)。
  • 每个 STA 都可以连接到相同的 SSID(在同一频段内或不同频段)。两个 STA 绝不能连接到相同的 BSSID。

关键功能必须在每个接口的基础上运行,并且它们必须在主接口上可用。以下是这些关键功能的列表

  • 必须在至少主接口(使用 IWifiChip.setMultiStaPrimaryConnection() 设置)上支持漫游。如果在两个接口上都支持漫游,则一个连接上的决策不得与第二个并发连接冲突。例如,一个接口不得漫游到另一个连接的 BSSID。

  • APF(和其他卸载,例如 ARP 和 NS)必须在至少主接口(使用 IWifiChip.setMultiStaPrimaryConnection() 设置)上支持。

  • 链路层统计信息必须在每个接口的基础上运行。

以下是针对不同并发场景的推荐 Wi-Fi 芯片实现

  • Wi-Fi 芯片必须允许框架使用以下常量之一调用 IWifiChip.setMultiStaUseCase() 以指定当前功能

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY:指定先建立后拆除功能。主要连接的质量必须优先于辅助连接。
    • DUAL_STA_NON_TRANSIENT_UNBIASED:指定并发本地专用和互联网连接并发受限和互联网连接功能。两个连接的质量必须同等优先。
  • 由于双并发 STA 可能导致 MCC、SCC 和 DBS 运行模式,因此当框架调用 IWifiChip.setMultiStaUseCase() 以指示功能时,供应商实现必须选择最佳无线电配置。以下是一般准则

    • 如果可用,则首选 2x2+2x2 DBS。
    • 如果可能,请避免 1x1+1x1 DBS,因为它对连接质量的影响过大。而是首选 MCC。
    • MCC 占空比必须可由驱动程序或固件针对各种功能进行配置。框架不直接设置 MCC 占空比,而是使用 StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent 查询此信息。
    • 如果使用 MCC,我们建议在主连接和辅助连接之间使用以下占空比

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY:70% 主连接,30% 辅助连接。
      • DUAL_STA_NON_TRANSIENT_UNBIASED:50% 主连接,50% 辅助连接。