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 並行作業:
使用執行階段資源重疊 (預設為停用) 個別啟用一或多個函式。
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- 同時使用僅限本機和網際網路連線:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- 同時限制與網際網路連線:
config_wifiMultiStaRestrictedConcurrencyEnabled
- 同時連上多個網路,並透過這些網路連上網際網路:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
請按照各個章節的說明驗證每項實作方式。
為進一步支援 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 網路中斷連線,才能連線至新的網路 (先中斷再連線),而「先連線再中斷」用途可解決以下問題。
連線至新網路時,裝置可能會發現儲存的 Wi-Fi 密碼不正確,或是新網路無法存取網際網路。這會迫使裝置切換回舊網路,導致裝置長時間無法連上 Wi-Fi。
舊網路突然中斷,這表示所有套接字都會關閉。應用程式通常無法妥善因應突然斷線的情況,這可能會導致使用者在建立新連線之前,有幾秒無法連上網際網路的情況。
預設網路會變更兩次,從舊 Wi-Fi 網路改為行動網路,然後再從行動網路改為新的 Wi-Fi 網路。這會導致應用程式對網路變更做出兩次反應。裝置也必須在短時間內使用行動數據。
建立前中斷流程僅用於作業系統啟動的自動 Wi-Fi 網路切換功能。使用者啟動的網路切換作業會使用舊版的「先中斷再建立」流程,也就是在連線至新網路前,先完全中斷舊網路的連線。在某些情況下,即使是作業系統啟動的自動切換,也會使用 break-before-make 流程,例如在兩個網路之間切換時,如果兩個網路都已設定為使用工廠 MAC 位址,就會使用 break-before-make 流程。
應用程式可以使用 WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
API 檢查裝置是否支援這個用途。
驗證 make-before-break
如要驗證實作方式,請觸發自動 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 網路,請按照下列步驟操作:
將 Wi-Fi 網路建議加入
setOemPaid
或setOemPrivate
並設為 true。在
ConnectivityManager
中,將NetworkRequest
與對應的功能一起提交:NET_CAPABILITY_OEM_PAID
的setOemPaid
NET_CAPABILITY_OEM_PRIVATE
的setOemPrivate
如果裝置偵測到掃描結果中的網路與 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。至少必須在主要介面 (使用
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 占空比,而是使用
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
查詢這項資訊。 如果使用 MCC,建議您在主要和次要連線之間使用下列占空比:
DUAL_STA_TRANSIENT_PREFER_PRIMARY
:70% 主要、30% 次要。DUAL_STA_NON_TRANSIENT_UNBIASED
:50% 主要、50% 次要。