在應用程式中加入 5G 功能

Android 11 新增了支援應用程式 5G 功能。本主題將介紹這項功能,並概述在應用程式中加入 5G 專屬功能,如何提升使用者體驗。

專為 5G 所建構

決定如何運用 5G 時,請先思考您想打造哪種體驗。5G 技術可透過以下方式強化應用程式:

  • 5G 的速度更快,延遲時間也更短,因此能自動提升目前的體驗。
  • 提升使用者體驗,例如顯示 4K 影片或下載高解析度遊戲資產。
  • 確認增加數據用量不會產生費用後,請提供通常只透過 Wi-Fi 提供的體驗,例如主動下載通常保留給無限量 Wi-Fi 的內容。
  • 提供 5G 專屬體驗,僅適用於高速和低延遲網路。

5G 功能

Android 11 導入下列功能變更和強化項目:

檢查計量付費狀態

Android 11 新增了 NET_CAPABILITY_TEMPORARILY_NOT_METERED 功能,可根據行動網路業者提供的資訊,判斷目前使用的網路是否為免付費網路。

新旗標會與 NET_CAPABILITY_NOT_METERED 一併使用。現有標記會指出網路是否一律為非計量付費,並適用於 Wi-Fi 和行動網路連線。

這兩個標記的差異在於,NET_CAPABILITY_TEMPORARILY_NOT_METERED 可能會變更,但網路類型不會變更。指定 Android 11 的應用程式可以使用 NET_CAPABILITY_TEMPORARILY_NOT_METERED 標記。在搭載 Android 9 以下版本的裝置上,作業系統不會回報這個標記。如果應用程式在 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_METEREDNET_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 適用於 5G Sub-6 網路的 NR (5G)
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE (5G+/5G UW) 適用於 5G mmWave 網路

頻寬估算

頻寬估算會使用您判斷是否為計量付費時所用的 NetworkCapabilities 物件。您可以使用該物件取得頻寬估算值。

Android 11 升級了架構支援,並修正平台/數據機錯誤,以因應 5G 需求,因此頻寬估算方法的可靠性和準確度有所提升。getLinkDownstreamBandwidthKbps() getLinkUpstreamBandwidthKbps()

頻寬預設值僅提供應用程式啟動指引。這應該有助於解決「閒置時啟動」情境的問題。應用程式應在使用者開始與應用程式互動後,測量所看到的內容,並動態調整串流行為。舉例來說,您可以根據啟動時的頻寬估算值,選擇要提供的影片解析度。請在使用者使用應用程式時持續檢查預估值,並根據連線類型和訊號強度變化,相應調整應用程式的行為。