Wi-Fi STA/STA 並發

Android 12 引入了 Wi-Fi STA/STA 並發,讓裝置同時連接到兩個 Wi-Fi 網路。此選用功能可實現以下功能。

  • Make-before-break :裝置在中斷現有連線之前先連接到新的 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} <= 2, ...]等規範格式公開的兩個並發 STA 介面。更多信息,請參見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

如果新網路沒有連接,裝置會嘗試連接到該網絡,同時保持與現有網路的連接,並在偵測到新網路沒有 Internet 時中止嘗試。然後,裝置繼續使用現有連線作為主要 Wi-Fi 網路。

並發本地連接和互聯網連接

並發的僅限本地和互聯網連接功能允許設備與主要提供互聯網的網路同時連接到僅限本地的連接,例如連接到物聯網設備。此功能改善了直接連接相機等物聯網設備時的使用者體驗,這可以透過 Android 10 中新增的WifiNetworkSpecifier API 實現。

在 Android 11 及更低版本中,裝置在連接到 IoT 裝置時會中斷與主 Wi-Fi 網路的連接,導致網路連線遺失(除非裝置有其他可用的傳輸類型,例如蜂巢式資料)。

應用程式可以使用WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API 檢查裝置是否支援此功能。

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

驗證僅限本地和互聯網連接

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

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • 行為: WifiStaConcurrencyNetworkRequestTest

並發限制和互聯網連接

並發受限和網際網路連線功能可讓裝置同時連接到使用者的主 Wi-Fi 網路和僅對選定應用程式可用的受限 Wi-Fi 網路。

應用程式可以使用WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API 檢查裝置是否支援此功能。

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

  1. 新增Wi-Fi 網路建議,並將setOemPaidsetOemPrivate設為 true。

  2. ConnectivityManager中,提交具有對應功能的NetworkRequest

當裝置偵測到掃描結果與 OEM 付費或 OEM 私人建議相符的網路時,它會自動連接到該網路作為輔助網路。

驗證並發受限連接和互聯網連接

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

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • 行為: WifiStaConcurrencyNetworkRequestTest

具有互聯網連接的並發多個網絡

具有互聯網連接功能的並發多個網路適用於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()

驗證具有 Internet 連接的並發多個網絡

若要驗證此功能,請使用下列 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% 次要。