Wi-Fi STA/STA 並發

Android 12 引入了 Wi-Fi STA/STA 並發,允許設備同時連接到兩個 Wi-Fi 網絡。此可選功能啟用以下功能。

  • 先合後斷:該設備使得打破了之前的現有連接到一個新的Wi-Fi網絡的連接。這會在 Wi-Fi 網絡之間切換時實現更平滑的轉換
  • 同時僅本地和互聯網連接:將設備連接到僅本地網絡而不破壞設備的主要互聯網提供連接。
  • 並發限制和互聯網連接:將設備連接到受限網絡(僅適用於某些特權的應用程序),而不破壞該設備的初級互聯網提供連接。

此頁面描述啟用此功能時的設備行為以及設備製造商和供應商的實施細節。

執行

設備必須支持以下內容才能實現 Wi-Fi STA/STA 並發:

  • Wi-Fi 芯片或固件必須支持兩個並發 STA 連接。固件必須支持兩種連接的所有通道和頻段組合。為避免性能問題,我們建議使用支持 2x2+2x2 DBS 的 Wi-Fi 芯片。

  • 該設備必須支持下列API供應商HAL 1.5版

    • IWifiChip.setMultiStaPrimaryConnection()
    • IWifiChip.setMultiStaUseCase()
  • 的HAL Wi-Fi接口的組合必須使用specifaction格式露出兩個並發STA接口,如[{STA} <= 2, ...]欲了解更多信息,請參閱無線網絡連接的多接口並發

如果滿足這些先決條件,請通過執行以下操作來實現 Wi-Fi STA/STA 並發:

  1. 啟用一個或多個功能單獨使用運行時資源覆蓋(默認禁用)。

    • 先合後斷config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • 同時僅本地和互聯網連接config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • 並發限制和互聯網連接config_wifiMultiStaRestrictedConcurrencyEnabled
  2. 驗證每個實現,如下面各自的部分所述。

為了更好地支持Wi-Fi STA / STA並發性,我們建議OEM定制框架和應用程序使用NetworkCallback#onCapabilitiesChanged()方法,而不是WifiManager#getConnectionInfo()它只有返回WifiInfo單個網絡和Android的12已被否決有關詳細信息,請參閱為對等網絡連接Wi-Fi網絡請求API

先休息後補

通過Make-before-中斷功能允許設備connnect到一個新的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裝置,如照相機,其可能通過WifiNetworkSpecifier Android中加入10 API。

在 Android 11 及更低版本中,設備在連接到 IoT 設備時會斷開與主要 Wi-Fi 網絡的連接,從而導致互聯網連接中斷(除非設備有其他可用的傳輸類型,例如蜂窩數據)。

應用程序可以檢查此功能是否支持使用所述設備上WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API。

有關更改Android中12並發僅本地和互聯網連接功能的更多信息,請參閱為對等網絡連接Wi-Fi網絡請求API

驗證本地和互聯網連接

要驗證此功能,請使用以下 CTS 和 ACTS 測試:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • 行為: WifiStaConcurrencyNetworkRequestTest

並發受限和互聯網連接

並發限制,互聯網連接功能允許conccurently連接到主Wi-Fi網絡為用戶和受限的Wi-Fi網絡,這是僅適用於選擇的應用程序的設備。

應用程序可以檢查此功能是否支持使用所述設備上WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API。

要使設備能夠連接到二級受限 Wi-Fi 網絡,請執行以下步驟:

  1. 添加Wi-Fi網絡的建議setOemPaidsetOemPrivate設置為true。

  2. ConnectivityManager ,提交NetworkRequest與相應的功能:

當設備檢測到掃描結果與 OEM 付費或 OEM 私有建議匹配的網絡時,它會自動連接到它作為輔助網絡。

驗證並發受限連接和 Internet 連接

要驗證此功能,請使用以下 CTS 和 ACTS 測試:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • 行為: WifiStaConcurrencyNetworkRequestTest

供應商 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%次要的。