LoginSignup
2
0

More than 1 year has passed since last update.

5G対応アプリをつくろうZ!Ⅱ

Last updated at Posted at 2022-12-09

この投稿は、私が所属するKDDIテクノロジーで行っているアドベントカレンダーの9日目の記事となります。
モバイル通信の第5世代目の通信規格「5G」。対応エリアも広がり、5G端末を使っていれば、アンテナ横の「5G」のマークが点いていることも事も多くなりました。
しかし、まだまだ5Gは進化中です。
私の本日のアトレベントカレンダーでは、この「5GのアプリつくろうZ」の続きとして、前回紹介されてもらった機能をアプリ上でどのように実装するのか紹介させて頂きます。

前の記事

「5G対応アプリをつくろうZ!」
https://qiita.com/simdroid/items/4c755cac1357c6afe72c

5Gエクスペリエンス機能を使おう

前回からの続き

前号では5Gの特徴とともに、大容量通信を実現する際に、配慮すべき「5Gエクスベエンス機能」の紹介をさせてもらいました。

 1 5Gエリア判定
 2 5G通信速度の推定
 3 従量課金の判定

これらの判定や推定、従量期間判定を行う理由に対て紹介させてもらいました。
今回は具体的に、どのように設定するのかを紹介させて頂きます。なおこちらの資料は、過去KDDIテクノロジーが運営を行った「5Gエクスペリエンスハッカソン( https://japan-android-group.connpass.com/event/208114/presentation/ )」というイベントで、解説に使った資料をベースに執筆しています。

5Gエリア判定を使うには

Androidの場合

動作条件

項目 必要なもの
API Level 30以上
Device Android 11以降
Permission READ_PHONE_STATE

実装方法

  • TelephonyManager.listen(LISTEN_DISPLAY_INFO_CHANGED)で監視を開始
  • onDisplayInfoChanged() で通知される TelephonyDisplayInfo に対してgetOverrideNetworkInfo() で取得されるデータで判定

アイコンとoverrideNetworkInfoの関係

圏外 4G 5G
OVERRIDE_NETWORK_TYPE_NONE -
OVERRIDE_NETWORK_TYPE_LTE_CA - -
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO - - 〇?
OVERRIDE_NETWORK_TYPE_NR_NSA - -
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE - - 〇?

onDisplayInfoChanged()の通知タイミング

  • TelephonyManager.listen()をコールした直後
  • overrideNetworkInfoの変化時(≒ステータスバーのアイコン変化時)

iOSの場合

実装方法

serviceCurrentRadioAccessTechnology
CTServiceRadioAccessTechnologyDidChanfeNotification
を用いる

5G通信速度の推定を使うには

Androidの場合

動作条件

項目 必要なもの
API Level 30以上
Device Android 11以降
Permission ACCESS_NETWORK_STATE

実装方法

・ConnectivityManager.registerDefaultNetworkCallback() を使用してネットワーク コールバックに登録
・NetworkCallback の onCapabilitiesChanged() で通知される NetworkCapabilities に対して、以下を取得する
 ・下り:getLinkDownstreamBandwidthKbps()
 ・上り:getLinkUpstreamBandwidthKbps()

従量課金の判定を使うには

Androidの場合

動作条件

項目 必要なもの
API Level 30以上
Device Android 11以降、(Android 10の一部?)
Permission ACCESS_NETWORK_STATE

実装方法

・ConnectivityManager.registerNetworkCallback() を使用してネットワークコールバックを登録
・NetworkCallback の onCapabilitiesChanged() で通知される NetworkCapabilities に対して、以下を取得
 ・hasCapability(NET_CAPABILITY_NOT_METERED)
 ・hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

判定結果

接続ネットワーク hasCapability(NET_CAPABILITY_NOT_METERED) hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)
WiFi TRUE FALSE
4G FALSE FALSE
5G(従量制) FALSE FALSE
5G(定額制) FALSE TRUE

備考

  • NET_CAPABILITY_TEMPORARILY_NOT_METEREDの判定には以下が必要
     - 通信事業者とGoogleの連携 (加入者情報の連携のため)
     - GooglePlay開発者サービスの更新
  • 現時点ではベータテスタープログラムに登録し、ベータ版の開発者サービスをインストールする必要あり

iOSの場合

実装方法

isExpensiveを用いる

参考情報

Android 5Gエクスペリエンス開発ページ 

Google公式

Androidのサンプルアプリとソースコード(小野直人作)

Googleのサンプルアプリ

Googleのサンプルソースコード(Kotlin) 

iOS開発ページ

最後に(ちょっと宣伝)

株式会社KDDIテクノロジーでは、AndroidやiOSのアプリを中心に開発を行う仲閒を積極的に募集しています。ともに開発やPMの仕事をしてみませんか? 興味ある方は是非こちらの採用ページからご相談ください。お待ち申し上げています。
→ https://recruit.kddi-tech.com/

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0