Android 11 新增了在應用程式中支援 5G 的功能。本主題將介紹這項功能,並概略說明在應用程式中加入 5G 專屬功能,如何改善使用者體驗。
專為 5G 建構
決定如何與 5G 互動時,請思考您想打造哪種類型的體驗。5G 可透過以下方式強化應用程式:
- 5G 提升速度並降低延遲,自動加快並改善現有體驗。
- 提升使用者體驗,例如顯示 4K 影片或下載高解析度遊戲素材資源。
- 確認增加的數據用量不會向使用者收費後,請加入通常僅透過 Wi-Fi 提供的體驗,例如主動下載通常保留給非計量付費 Wi-Fi 的內容。
- 提供 5G 獨有的體驗,只有在高速和低延遲的情況下才能運作。
5G 功能
Android 11 導入下列功能異動和強化功能:
檢查計量狀態
NET_CAPABILITY_TEMPORARILY_NOT_METERED 是 Android 11 新增的功能,可根據行動電信業者提供的資訊,判斷您使用的網路是否為非計量付費。
新旗標會與 NET_CAPABILITY_NOT_METERED 搭配使用。現有標記會指出網路是否「一律」為非計量付費,並適用於 Wi-Fi 和行動網路連線。
這兩個旗標的差異在於,NET_CAPABILITY_TEMPORARILY_NOT_METERED 可能會在網路類型未變更的情況下變更。指定 Android 11 為目標版本的應用程式可以使用 NET_CAPABILITY_TEMPORARILY_NOT_METERED 旗標。在搭載 Android 9 以下版本的裝置上,OS 不會回報旗標。對於在 Android 10 上執行的應用程式,此標記可能可用,具體取決於其執行的裝置。
確定目前網路暫時或永久非計量付費後,您就可以顯示解析度較高的內容 (例如 4k 影片)、上傳記錄、備份檔案,以及主動下載內容。
以下各節將說明在應用程式中新增計量檢查的步驟。
註冊網路回呼
使用 ConnectivityManager.registerDefaultNetworkCallback() 註冊網路回呼,以便在 NetworkCapabilities 變更時收到通知。如要偵測 NetworkCapabilities 的變更,請覆寫 NetworkCallback 中的 onCapabilitiesChanged() 方法。
registerDefaultNetworkCallback() 會在註冊時立即觸發已註冊的回呼,提供應用程式目前狀態的相關資訊。當狀態從非計量付費變更為計量付費,或反之亦然時,未來回呼對於應用程式採取適當動作至關重要。
檢查是否為計量付費
使用在網路回呼中收到的 NetworkCapabilites 物件,檢查下列程式碼的輸出內容:
Kotlin
NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) || NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)
Java
NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) || NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)
如果值為 true,則可將網路視為非計量付費。
其他注意事項
使用這項功能時,請注意下列事項:
如要使用
NET_CAPABILITY_TEMPORARILY_NOT_METERED旗標,您必須針對 Android 11 SDK 編譯應用程式。網路的
NET_CAPABILITY_NOT_METERED功能一經設定即無法變更。如果網路失去這項功能 (變成計量付費),就會自動中斷連線。相較之下,
NET_CAPABILITY_TEMPORARILY_NOT_METERED可能會在網路未中斷連線的情況下變更。因此,應用程式必須監聽onCapabilitiesChanged()回呼,以便在網路恢復計量付費狀態 (失去NET_CAPABILITY_TEMPORARILY_NOT_METERED功能) 時進行處理。網路不能同時具有
NET_CAPABILITY_NOT_METERED和NET_CAPABILITY_TEMPORARILY_NOT_METERED。
5G 偵測
從 Android 11 開始,您可以使用回呼式 API 呼叫,偵測裝置是否連上 5G 網路。您可以檢查連線是否為 5G NR (獨立) 或 NSA (非獨立) 網路。
這個 API 呼叫的用途包括:
在應用程式中顯示 5G 品牌,強調您提供獨特的 5G 體驗。
只有在 5G 網路中,才能在應用程式中啟用獨特的 5G 體驗。建議您將這項狀態檢查與檢查計量付費搭配使用。
追蹤 5G 連線,以便進行數據分析。
如要在沒有 5G 裝置的情況下測試 5G 偵測功能,可以使用 Android SDK 模擬器新增的功能。
偵測 5G
呼叫 TelephonyManager.listen(),傳入 LISTEN_DISPLAY_INFO_CHANGED,判斷使用者是否連上 5G 網路連線。覆寫 onDisplayInfoChanged() 方法,判斷用於顯示的網路類型。例外狀況是,如果電信業者選擇將 5G 顯示為 mmWave 網路的 RAT,則會傳回 OVERRIDE_NETWORK_TYPE_NR_NSA。
下表列出與這些值對應的聯播網:
| 傳回類型 | 網路 |
|---|---|
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO |
Advanced Pro LTE (5Ge) |
OVERRIDE_NETWORK_TYPE_NR_NSA |
NR (5G) 適用於 5G Sub-6 網路 |
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE |
(5G+/5G UW) 代表 5G mmWave 網路 |
頻寬估算
頻寬估算會使用您在判斷是否為計量付費時使用的 NetworkCapabilities 物件。您可以使用該物件取得頻寬估計值。
由於升級了架構支援,以及修正平台/數據機錯誤以支援 5G,頻寬估算方法 getLinkDownstreamBandwidthKbps() 和 getLinkUpstreamBandwidthKbps() 的可靠性和準確性在 Android 11 中有所提升。
頻寬預設值僅提供應用程式啟動時的指引。這應該有助於您處理「閒置時啟動」的情境。應用程式應在使用者開始與應用程式互動後,測量所看到的內容,並動態調整串流行為。舉例來說,您可以根據啟動時的頻寬估算值,選擇要提供的影片解析度。在使用者使用應用程式時,持續檢查預估值;隨著連線類型和強度變化,相應調整應用程式的行為。