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 晶片。

  • 裝置必須在 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 Network Request API

休息一下

make-before-break 函式可讓裝置連線至新的 Wi-Fi 網路,同時維持現有的 Wi-Fi 網路連線,僅在舊網路成功連線至新的 Wi-Fi 網路且可連上網際網路時中斷舊網路連線。

這個突破性的使用案例可以解決 Android 11 以下版本中的以下問題,其中裝置必須先中斷與現有 Wi-Fi 網路連線,再連線至新網路 (break-before-make)。

  • 連線至新網路時,裝置可能會發現裝置儲存的 Wi-Fi 密碼不正確,或是新網路無法連上網際網路。強制裝置切換回舊版網路,在沒有 Wi-Fi 連線的情況下造成大量時間。

  • 舊網路突然中斷連線,這代表所有通訊端都會關閉。應用程式通常不會對連線突然中斷產生反應,這可能會導致使用者在數秒沒有網際網路連線的情況下,直到新連線建立完畢為止。

  • 預設網路會變更兩次,分別是從舊 Wi-Fi 網路變更為行動數據,以及從行動網路到新的 Wi-Fi 網路。這會導致應用程式回應網路變更兩次。此外,裝置也必須使用行動數據。

破案流程僅適用於 OS 啟動的自動 Wi-Fi 網路切換。使用者啟動的網路切換按鈕採用舊版的中斷流程,也就是先前的網路在連上新網路前已完全中斷連線。在某些情況下,即使是 OS 啟動的自動切換開關,也會使用破壞前製流程,例如在兩個已設定使用原廠 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 Network Request 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:指定 Make-Before-Break 函式。主要連線的品質必須優先於次要連線。
    • 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% 次要。