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(),因為 WifiManager#getConnectionInfo() 只會針對單一網路傳回 WifiInfo,且已在 Android 12 中淘汰。詳情請參閱適用於點對點連線的 Wi-Fi Network Request API

Make-before-break

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 網路切換。使用者啟動的網路切換作業會使用舊版的「先中斷再建立」流程,也就是在連線至新網路前,先完全中斷與舊網路的連線。在某些情況下,即使是作業系統啟動的自動切換作業,也會使用「先中斷再建立」流程,例如在兩個網路之間切換時,如果兩者都已設定為使用工廠 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 裝置的連線) 同時連線至主要透過網際網路提供的網路。這項功能可透過 Android 10 新增的 WifiNetworkSpecifier API,直接連線至攝影機等 IoT 裝置,進而改善使用者體驗。

在 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。

  • 至少必須在主要介面 (使用 IWifiChip.setMultiStaPrimaryConnection() 設定) 上支援 APF (以及 ARP 和 NS 等其他卸載)。

  • 連結層統計資料必須依據個別介面運作。

以下是針對不同並行作業情境的建議 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% 次要。