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

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 以下版本的裝置上,作業系統不會回報標記。對於在 Android 10 上執行的應用程式,這個標記可能會可用,具體取決於執行的裝置。

確定目前的網路暫時或永久不計入用量後,您就可以顯示解析度較高的內容 (例如 4K 影片)、上傳記錄檔、備份檔案,以及主動下載內容。

以下各節將說明如何在應用程式中加入計量功能檢查。

註冊網路回呼

使用 ConnectivityManager.registerDefaultNetworkCallback() 註冊網路回呼,以便在 NetworkCapabilities 變更時收到通知。您可以覆寫 NetworkCallback 中的 onCapabilitiesChanged() 方法,藉此偵測 NetworkCapabilities 的變更。

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 物件。您可以使用該物件取得頻寬預估值。

為了配合 5G 技術,我們升級了架構支援功能,並修正了平台/數據機錯誤,因此在 Android 11 中,getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps() 的頻寬估算方法可提供更可靠且準確的結果。

頻寬預設值僅提供應用程式啟動時的建議。這應該有助於解決「閒置時啟動」的情況。您的應用程式應在使用者開始與應用程式互動後,評估應用程式所看到的內容,並動態調整串流行為。舉例來說,您可以根據啟動時的頻寬估計值,選擇要提供的影片解析度。使用者使用應用程式時,請持續檢查預估值;當使用者的連線類型和強度發生變化時,請據此調整應用程式的行為。