Android 12 推出 Wi-Fi STA/STA 並行功能,可讓裝置同時連線至兩個 Wi-Fi 網路。這項選用功能可啟用下列功能。
- 先連線再中斷:裝置會先連上新的 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 介面,並使用
[{STA} <= 2, ...]
等規格格式公開。詳情請參閱「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()
。後者只會針對單一網路傳回 WifiInfo
,且已在 Android 12 中淘汰。詳情請參閱「用於點對點連線的 Wi-Fi Network Request API」。
先接後斷
先連線再中斷功能可讓裝置連線至新的 Wi-Fi 網路,同時維持現有的 Wi-Fi 網路連線,只有在成功連線至新的 Wi-Fi 網路並可存取網際網路時,才會中斷與舊網路的連線。
在 Android 11 以下版本中,裝置必須先中斷與現有 Wi-Fi 網路的連線,才能連上新網路 (先中斷再連線),而「先連線再中斷」的使用情境可解決下列問題。
連線到新網路時,裝置可能會發現儲存的 Wi-Fi 密碼有誤,或是新網路無法存取網際網路。這會強制裝置切換回舊網路,導致 Wi-Fi 連線中斷很長一段時間。
舊網路突然中斷連線,表示所有通訊端都會關閉。應用程式通常無法妥善應對連線突然中斷的情況,因此使用者可能會在建立新連線之前,經歷幾秒鐘的網路連線中斷。
預設網路會變更兩次,先從舊 Wi-Fi 網路變更為行動網路,再從行動網路變更為新 Wi-Fi 網路。這會導致應用程式對網路變更做出兩次反應。裝置也必須使用行動數據一段時間。
只有在作業系統啟動自動 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 裝置) 和提供網際網路的主要網路。這項功能可直接連線至攝影機等物聯網裝置,提升使用者體驗。這項功能是透過 Android 10 新增的 WifiNetworkSpecifier
API 實現。
在 Android 11 以下版本中,裝置連線至 IoT 裝置時會與主要 Wi-Fi 網路中斷連線,導致網際網路連線中斷 (除非裝置有其他可用的傳輸類型,例如行動數據)。
應用程式可以使用 WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
API 檢查裝置是否支援這項功能。
如要進一步瞭解 Android 12 中並行本機專用和網際網路連線功能的變更,請參閱「用於點對點連線的 Wi-Fi Network Request API」。
驗證僅限本機連線和網際網路連線
如要驗證這項函式,請使用 CTS 測試。MultiStaConcurrencyWifiNetworkSpecifierTest
同時使用受限連線和網際網路連線
同時限制連線和網際網路連線功能可讓裝置同時連線至主要 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 私人建議相符的網路時,就會自動連線至該網路做為次要網路。
驗證並行受限和網際網路連線
如要驗證這項函式,請使用 CTS 測試。MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
同時使用多個網路連線至網際網路
這項可同時連上多個網路並存取網際網路的功能適用於 Android 13 以上版本,可讓裝置同時連上兩個不受限制 (所有應用程式都能存取) 且可存取網際網路的網路 (存取點)。
應用程式可以使用 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
:指定先接後斷函式。主要連線的品質必須優先於次要連線。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% 次要。