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 並行:
使用執行階段資源疊加層 (預設為停用) 個別啟用一或多個函式。
- 休息前:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- 同時本機僅限本機和網際網路連線:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- 並行受限並連上網際網路:
config_wifiMultiStaRestrictedConcurrencyEnabled
- 透過網際網路連線同時有多個網路:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- 休息前:
按照各自的部分說明驗證每項導入作業。
為了更妥善支援 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 網路,請按照下列步驟操作:
新增 Wi-Fi 網路建議,並將
setOemPaid
或setOemPrivate
設為 true。在
ConnectivityManager
中,提交具備對應功能的NetworkRequest
:setOemPaid
的NET_CAPABILITY_OEM_PAID
setOemPrivate
的NET_CAPABILITY_OEM_PRIVATE
當裝置偵測到掃描結果的網路與原始設備製造商 (OEM) 的付費建議或原始設備製造商 (OEM) 私人建議內容相符時,就會自動連線至該網路做為次要網路。
驗證並行受限的網際網路連線
如要驗證這個函式,請使用 MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
CTS 測試。
透過網際網路連線同時處理多個網路
適用於 Android 13 以上版本。並行多個網路與網際網路連線功能可讓裝置同時連線至兩個網路 (AP) 和兩個網路,這兩種網路都不受限 (所有應用程式都擁有存取權) 並提供網際網路連線。
應用程式可使用 WifiManager#isStaConcurrencyForMultiInternetSupported()
方法,檢查裝置是否支援這項功能。
如果支援這項功能,具有特殊權限的應用程式即可使用 WifiManager#setStaConcurrencyForMultiInternetMode(int mode)
方法啟用這項功能。此功能具有以下模式:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP
:限制與 DBS AP 雙頻的雙連線。WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP
:連線至個別連線使用不同頻帶的任意 AP。WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED
:停用此功能。
如要查詢目前啟用的功能模式,請使用 WifiManager#getStaConcurrencyForMultiInternetMode()
方法。
啟用這項功能後,請使用下列步驟要求其他透過網際網路提供的 Wi-Fi 網路。
使用
WifiNetworkSpecifier.Builder
建立 Wi-Fi 網路指定碼。使用setBand()
方法選擇指定碼的頻帶。請勿指定 SSID 或 BSSID,做為 Wi-Fi 架構為指定頻帶的其他網路。使用
ConnectivityManager
,建立具有NET_CAPABILITY_INTERNET
功能的NetworkRequest
。將指定碼和
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% 次要。