在應用程式中新增 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 以下版本的裝置上,OS 不會回報標記。如果是在 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

呼叫傳入 LISTEN_DISPLAY_INFO_CHANGEDTelephonyManager.listen(),判斷使用者是否使用 5G 網路連線。覆寫 onDisplayInfoChanged() 方法,藉此判斷用於顯示的網路類型。但有一個例外狀況,如果電信業者選擇將 5G 顯示為 mmWave 網路的 RAT,則會傳回 OVERRIDE_NETWORK_TYPE_NR_NSA

下表列出與這些值相對應的網路:

傳回類型 網路
OVERRIDE_NETWORK_TYPE_LTE_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() 的可靠性和準確性也改善了。

頻寬預設值只提供應用程式啟動的指引。這應該有助您進行「閒置時啟動」的情況。應用程式應於使用者開始與應用程式互動後,評估所看到的內容,並動態調整其串流行為。例如,您可以根據啟動時的頻寬估計值選擇影片解析度。在使用者使用應用程式時繼續查看預估值;隨著連線類型和強度改變,請據此調整應用程式行為。