はじめに

5G(第5世代移動通信システム)は、2020年3月から都市部を中心とした一部エリアでサービスが開始されました。

対応機種も続々と発売されていますが、エリアがまだまだ限定的ですしNSAでの構成(後述します)なので、5G全ての恩恵を受けている人は少ないと思います。(表参道にある弊社の場所も、各キャリアともまだ未対応エリア…)
全国的に広範囲でサポートされるのはもう少しかかりそうですね。

今回は、その5GについてGoogle公式ドキュメントやGoogle公式 Android developer ブログで触れているのものがあったので、それについて書いていこうと思います。

環境

AndroidStudio 4.1.1
Kotlin 1.4.10
Emulator 30.2.6
Pixel5 (Android11)

5Gで実現する新しい体験

まずはGoogle公式の Android developer ブログで「Androidで5Gの準備をする」と題して書かれた記事から見ていきましょう。そちらではこのように書かれています。(翻訳はDeepLを使用しています)

5G isn’t just about faster connectivity: it’s about unlocking transformative new experiences, and we want to see how you continue to push the bar.

5Gは単に接続の高速化だけではありません。変革的な新しい体験を実現するためのものです。

Android Developers Blog : Getting ready for 5G on Android

そして、新しい体験の具体例がいくつか挙げられています。

Turn indoor use cases into outdoor use cases: Suddenly, everything you could only do indoors comes alive outside, like high-quality video chat and playing multiplayer games wherever you happen to be.

屋内でのユースケースを屋外でのユースケースに変える。高品質のビデオチャットやマルチプレイヤーゲームのプレイなど、屋内でしかできなかったことが屋外でも生き生きとしたものになります。

Turn photo-centric UX into video-centric or AR-centric UX: Upgrade your users’ experience by replacing photos with videos and by incorporating augmented reality into your UX.

写真中心のUXをビデオ中心またはAR中心のUXに変える: 写真をビデオに置き換えたり、UXに拡張現実を取り入れることで、ユーザーの体験をアップグレードしましょう。

Prefetch helpfully, delight rather than buffer: Use the increased bandwidth to prefetch content, further enhancing the responsiveness of your app or game.

役に立つプリフェッチを行い、バッファリングするのではなく喜ばせる。増加した帯域幅を使用してコンテンツをプリフェッチし、アプリやゲームの応答性をさらに向上させます。

Turn niche use cases into mainstream use cases: Streaming content on older networks was the exception. Make streaming content the new mainstream with 5G.

ニッチなユースケースを主流のユースケースに変える。旧来のネットワーク上でのコンテンツのストリーミングは例外でした。ストリーミング・コンテンツを 5G で新たな主流にしましょう。

Android Developers Blog : Getting ready for 5G on Android

なるほど確かに、5Gの超高速回線によってよりリッチな体験をユーザーに提供できる選択肢が増えそうです。

コード上での5G検出

とはいえ、当然4Gなどそれ以外の状態の時も考慮しないと問題になりそうです。
ここからはコード上で5Gを判別する方法をみていきます。

Android11 以降で、端末が5Gに接続されているかを検出することができます。

5Gに接続しているか判別

端末情報にアクセスするので、Manifestに下記を追加します。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

そして TelephonyManager.listen() を呼び出します。
オーバーライドした onDisplayInfoChanged() で接続されているネットワークの種類がわかるので、そこで5Gかどうかを判別することができます。

val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
tm.listen(object : PhoneStateListener() {
    override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
        if (ActivityCompat.checkSelfPermission(
                applicationContext,
                android.Manifest.permission.READ_PHONE_STATE
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            return
        }
        super.onDisplayInfoChanged(telephonyDisplayInfo)

        val scope = CoroutineScope(Job() + Dispatchers.Main)
        scope.launch {
            // 5Gネットワークに接続しているか判別
            network_type_label.text = when (telephonyDisplayInfo.overrideNetworkType) {
                OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> "LTE Advanced Pro (5Ge)"
                OVERRIDE_NETWORK_TYPE_NR_NSA -> "5G NR(Sub-6)network"
                OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> "5G mmWave(5G+ / 5G UW)network"
                OVERRIDE_NETWORK_TYPE_LTE_CA -> "LTE"
                else -> "other:${telephonyDisplayInfo.overrideNetworkType}"
            }
        }
    }
}, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
ラベル名ネットワークの種類
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PROLTE Advanced Pro(5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA5G NR(Sub-6)ネットワーク
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE5G mmWave(5G+ / 5G UW)ネットワーク

ラベル内に出てきた単語で、気になったものを調べてみました。

LTE Advanced Proとは?

4Gの最後の拡張規格。4.5Gと呼ばれることもある。
4Gと5Gのスペック差が大きく開くと、サービス展開が制約されることになるので、その差をフォローするための橋渡し役。

参考HP:LTE-Advanced Proを徹底解説――5Gへの橋渡し役を担う4Gの進化系

NRとは?

New Radio(新しい無線)という意味。
4G = LTE と言われるように、5G = NR と思っておけば良さそう👀

参考HP:
第799回:5G NRとは
商用サービス開始予定まで2年を切った「5G NR」の最新動向

NSAとは?

5Gのネットワーク構成のこと。
NSA 非スタンドアローン(Non-StandAlone)と、SA スタンドアローン(Stand Alone)がある。

5Gの恩恵(超高速・多数同時接続・超低遅延)を全て受けるには SA が必要だが、新しくそれ専用に基地局を作る必要があり、時間・費用がかかる。
それに比べ NSA では、既存の 4G/LTE の基地局を活用して、開設まで速く比較的簡単にサービス提供することができる。ただ SA に比べ通信速度は遅い。
現在日本で提供されている5Gは NSA で、順次 SA に移行する計画。

参考HP:
国が認めた「なんちゃって5G」一気に5G通信網拡大となるか?
・「5Gスタンドアロン/ノンスタンドアロン」とは? – いまさら聞けないスマートフォン用語
・フル5Gとは。使い方や5G、4Gとの違いを把握しよう

Sub-6、MMWAVEとは?

使用する周波数帯のこと。

  • Sub-6
    • 6GHz 未満の比較的低い周波数帯
    • 4Gで使用していた周波数と近く、広いエリアをカバーするのに適している
    • MMWAVE(ミリ波)に比べ、速度・同時接続が大きく劣る
  • MMWAVE (ミリ波)
    • 30~300GHz の周波数帯
    • 雨や水蒸気にも影響を受けるほど、遮蔽物に非常に弱い
    • 日本で対応している端末はまだ少数(日本国内で販売された iPhone 12 も非対応でしたね)

参考HP:
5G時代の新キーワード「Sub6」「ミリ波」を詳しく解説。
2種類の5G──「ミリ波」「Sub6」って何? Xperia 1 IIは後者のみ

料金プランが従量制 / 定額制かの判別

現在キャリアによっては5G定額制の料金プランもあるようですが(docomo の終了時期未定のデータ量無制限キャンペーンなど) もし従量制だった場合、今まで通りの挙動にしたいという事もあるかと思います。

こちらもコード上で判別できるので、その方法をみていきましょう。

ネットワークに関する情報にアクセスするので、Manifestに下記を追加します。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

ConnectivityManager::registerDefaultNetworkCallback() で現在のネットワークの状態について取得できます。
onCapabilitiesChanged をオーバーライドして、以下のフラグを||演算子で判定します。
・NET_CAPABILITY_TEMPORARILY_NOT_METERED
・NET_CAPABILITY_NOT_METERED

これが真であれば定額制ということになります。

val cm = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
cm.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {
    override fun onCapabilitiesChanged(
        network: Network,
        networkCapabilities: NetworkCapabilities
    ) {
        super.onCapabilitiesChanged(network, networkCapabilities)

        // 定額制か
        val isNotMetered =
            networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) || networkCapabilities.hasCapability(
                NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED
            )

        val scope = CoroutineScope(Job() + Dispatchers.Main)
        scope.launch {
            network_not_metered_label.text = if (isNotMetered) {
                "定額制"
            } else {
                "従量制"
            }
        }
    }
})

フラグの意味については以下のとおりです。

  • NET_CAPABILITY_TEMPORARILY_NOT_METERED
    • 携帯通信会社が提供する情報に基づいて、使用しているネットワークが定額制かどうかを示す
  • NET_CAPABILITY_NOT_METERED
    • Wi-Fiとモバイル接続の両方を対象として、常時定額制かどうかを示す
    • NET_CAPABILITY_TEMPORARILY_NOT_METERED と一緒に使用する

参考HP:従量制の確認

Emulator での5G設定方法

手元に5G対応端末を持っていなくても、Emulator の Extended controls で以下のように簡単に5G、また料金プランの従量制・定額制を切り替える事ができます。

端末右上の表示も LTE から 5G に変わりました。

5Gが選択肢にない
選択項目に 5G がない場合は、エミュレータのバージョンが 30.0.17 未満だと思うので、確認してみてください。

参考HP:Emulator 30.0.17 Canary

5Gに切り替わらない端末がある
上記の手順で5Gに設定しても反映されないということが何度かありました。
その場合は、端末設定の以下の箇所を確認してください。

設定 > ネットワークとインターネット > モバイルネットワーク > 優先ネットワークの種類

おそらくここが 5G以外 になっていると思うので、5Gに設定すると反映されました。

まとめ

いかがだったでしょうか?
5Gの判別自体は比較的簡単にできそうですね。
あとはここから、どうユーザに対して魅力的な体験を提供できるかだと思います。

5G SAで、さらに全国展開となると、まだまだ数年先になりそうですが、今のうちから試行錯誤して備えておくのも良いのではないでしょうか。

参考HP

・Google公式:アプリに 5G 機能を追加する
Googleの公式Android developer ブログ:Getting ready for 5G on Android

LTE-Advanced Proを徹底解説――5Gへの橋渡し役を担う4Gの進化系
第799回:5G NRとは
・商用サービス開始予定まで2年を切った「5G NR」の最新動向
国が認めた「なんちゃって5G」一気に5G通信網拡大となるか?
「5Gスタンドアロン/ノンスタンドアロン」とは? – いまさら聞けないスマートフォン用語
・フル5Gとは。使い方や5G、4Gとの違いを把握しよう
5G時代の新キーワード「Sub6」「ミリ波」を詳しく解説。
2種類の5G──「ミリ波」「Sub6」って何? Xperia 1 IIは後者のみ



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる