在應用程式中加入 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 變更時獲知。如要偵測 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 進階 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() 的頻寬估算方法的可靠性和正確性有所改善。

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