アプリに 5G 機能を追加する

アプリで 5G をサポートするための機能が Android 11 に追加されています。ここでは、その機能について説明し、アプリに 5G 固有の機能を追加してユーザー エクスペリエンスを改善する方法について概説します。

5G 向けの開発

5G をどのように利用するかを決める際、どのような利便性を構築するかについて検討してください。5G によりアプリは、以下のように拡張できます。

  • 5G の速度とレイテンシの改善によって、応答が早くなり、現在のエクスペリエンスが自動的に向上します。
  • 4K 動画の表示や高解像度のゲームアセットのダウンロードなどによって、ユーザー エクスペリエンスのレベルを上げます。
  • データ使用量が増加してもユーザーにかかる費用が増えないことを確認してから、通常は Wi-Fi 経由でのみ提供している機能を 5G で提供します。たとえば、定額制の Wi-Fi を使用するように通常は予約するコンテンツを、事前にダウンロードします。
  • 高速かつ低レイテンシでのみ動作するような 5G 固有の機能を提供します。

5G 機能

Android 11 では、以下の機能の変更と強化が行われます。

従量制の確認

Android 11 で追加される NET_CAPABILITY_TEMPORARILY_NOT_METERED は、携帯通信会社が提供する情報に基づいて、使用している接続が定額制かどうかを知らせることができます。

この新しいフラグは NET_CAPABILITY_NOT_METERED と一緒に使用します。この既存のフラグは、Wi-Fi 接続とモバイル接続の両方を対象として、ネットワークが「常時」定額制かどうかを示します。

2 つのフラグの違いは、ネットワークの種類が変わらなくても、NET_CAPABILITY_TEMPORARILY_NOT_METERED のほうは値が変わることがある点です。Android 11 をターゲットとするアプリは、NET_CAPABILITY_TEMPORARILY_NOT_METERED フラグを使用できます。Android 9 以下を搭載するデバイスでは、このフラグは機能しません。Android 10 を搭載するアプリの場合、このフラグが使用できるかどうかは、アプリが実行されているデバイスによります。

現在のネットワークが一時的または永続的に定額制であると判断してから、高解像度コンテンツ(4K 動画など)の表示、ログのアップロード、ファイルのバックアップ、コンテンツの事前ダウンロードを行うことができます。

以下のセクションで、従量制の確認機能をアプリに追加する手順について説明します。

ネットワーク コールバックに登録する

ConnectivityManager.registerDefaultNetworkCallback() を使用してネットワーク コールバックに登録し、NetworkCapabilities が変更されたときに通知を受けるようにします。NetworkCallbackonCapabilitiesChanged() メソッドをオーバーライドして、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 の場合は、接続を定額制として扱うことができます。

その他の考慮事項

この機能を使用する際は、以下の点にご注意ください。

  • このフラグを使用するには、Android 11 SDK に対してアプリをコンパイルする必要があります。

  • デフォルトでは従量制の接続が、一時的に定額制になると、NET_CAPABILITY_TEMPORARILY_NOT_METERED が返されます。接続が従量制に戻ったときに対処するために、アプリは onCapabilitiesChanged() コールバックをリッスンする必要があります。

5G の検出

Android 11 以降は、コールバック ベースで API を呼び出して、デバイスが 5G ネットワークに接続されているかどうかを検出できます。接続が 5G NR(スタンドアロン)ネットワークか NSA(非スタンドアロン)ネットワークかを確認できます。

この API 呼び出しには、以下のような使用例が考えられます。

  • 5G ブランドをアプリで表示して、5G 固有の機能を提供中であることをハイライト表示します。

  • 5G ネットワーク上でのみ、アプリで 5G 固有の機能を有効にします。このステータスの確認は、従量制かどうかの確認と組み合わせる必要があります。

  • 分析のために 5G 接続を記録します。

5G を検出する

TelephonyManager.listen() を呼び出して LISTEN_DISPLAY_INFO_CHANGED を渡し、ユーザーが 5G ネットワークに接続しているかどうか判断します。onDisplayInfoChanged() メソッドをオーバーライドして、アプリが接続されているネットワークの種類を判断します。

戻り値の型 ネットワーク
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO LTE Advanced Pro(5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA 5G NR(Sub-6)ネットワーク
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE 5G mmWave(5G+ / 5G UW)ネットワーク

帯域幅の推定

帯域幅の推定には、従量制の判断に使用する NetworkCapabilities オブジェクトを使用します。このオブジェクトを使用して帯域幅の推定値を取得できます。

Android 11 で 5G に対応するために、フレームワークのサポートをアップグレードし、プラットフォームやモデムのバグを修正したことにより、帯域幅推定のメソッド getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps() の信頼性と精度が改善されました。

帯域幅のデフォルトは、アプリの起動時のみの参考にしてください。これは「アイドル状態で起動する」シナリオで参考になります。ユーザーがアプリを利用し始めたら、アプリで状態を確認し、そのストリーミング動作を動的に調整する必要があります。たとえば、起動時に帯域幅の推定値に基づいて、動画の解像度を選択できます。ユーザーによるアプリの使用中に、引き続き推定値を確認し、接続の種類や強度が変わったら、それに応じてアプリの動作を調整してください。