どうもこんばんわ。
ウチはもう、延期できない。 攻略しました。
http://www.cuffs.co.jp/products/enking/
みんな可愛かったです。
シナリオなら未来ちゃんかなー
でもやっぱ千紗さんが可愛かったです。
とりあえずオープニング見てほしい、テンポ良くて良き
本題
Pixel 6 Pro を更新したらついにdocomoの5Gを掴むようになった。いえーい
(ちなみに12月のパッチ、モバイルデータ通信に問題があるみたいで配信止まってるみたいですね。いまから適用するのは辞めて1月のパッチまで待ったほうがいいと思います。)
そーす:https://9to5google.com/2021/12/30/pixel-6-december-update-delay/
というわけで、Android 11から追加された 5G(NR / New Radio)向けのAPIを試してみる
https://developer.android.com/about/versions/11/features/5g
(正直私もよくわかってない)
環境
なまえ | あたい |
---|
端末 | Google Pixel 6 Pro |
Android | 12 |
キャリア | docomo (ギガホプレミア契約してきた) |
その前に:5G来た!通信始めたろw→4Gに切り替わる
仕様です。
https://www.nttdocomo.co.jp/area/5g/notice.html
5Gなのに4Gに切り替わるのはなぜ?
5Gの展開では、スタンドアローン (SA)
方式と、ノンスタンドアローン (NSA)
方式があって、現状普及してる5GはNSA方式
です。
前者のSA方式
では、5G基地局単体で動くことができますが、
後者のNSA方式
では従来の4G基地局設備(eNB)に5G基地局(gNB)を導入した物で、制御信号(C-Plane)に4Gの電波を利用し実際のデータ転送(U-Plane)では5Gの電波を利用します。
4Gと5Gを同時に利用するEN-DC
って言う技術を採用しているそうです。この場合では4Gをマスターノード
、5Gをセカンダリノード
と呼んでいるようです。
流れとしては、
- 4G基地局へ導入した5G基地局(NSA方式)があって、
- その4G基地局の圏内に入った場合に、5G基地局の存在が4Gの制御信号で送られて来る。
- セカンダリノードの5G基地局は自分の存在を送出しないらしい?(3GPP TS 37.340 7.1 System information handling)
- でも実際は5G基地局の圏内には入っていない。しかし4G(と5Gの制御信号)は届くのでアンテナピクトの隣のアイコン(RAT表示)が5Gになる。
- 5G圏内にいれば4Gの制御信号をもとに接続してくれる模様(要調査)
詳しく知りたい場合はEN-DC (E-UTRA-NR Dual Connectivity)
とかアンカーバンド
とか5G NR NSA Call Flow
で検索して下さい。
3GPPの資料が見たい場合はこちらです
TS 37.340
https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3198
Versions
タブへ移動してVersion
のところのリンクを押すとDLできます。
Google翻訳にドキュメントファイルを投げれば翻訳してくれます。(なお理解できるとは言っていない)
そういうことなので
5G対応端末をSIMロックフリーで買う際は、5Gの対応バンド以外にも4Gのバンドを確認しないといけません。
EN-DC組み合わせ
とかで検索すれば4Gのバンドと5Gのバンドの組み合わせが出てくるのでいいと思います。
(どうでもいいんだけどdocomoの5G Sub-6で使ってるn79
ってSIMフリー端末だと全然対応してなくない?)
適当にアプリを作る
使うメソッド
ConnectivityManager#registerDefaultNetworkCallback()
- どうやらこれで
従量制 or 定額制
ネットワークの検出ができるらしい(無理じゃね?)
TelephonyManager#listen()
とonDisplayInfoChanged()
- これで5Gが
Sub-6 or ミリ波
のどっちなのかが検出できるみたい。
- アンテナピクト📶の隣の
5G
、4G+
と同じのが取れるっぽい
TelephonyManager#listen()
とonDisplayInfoChanged()
app/build.gradle
Activity Result API
を使いたいのでActivityとFragmentのバージョンをあげます。
あとViewBinding
も使いたいので有効にします。
AndroidManifest.xml
電波状態にアクセスするために位置情報とか発信権限とか余計なもん付いてきますが仕方ない。
activity_main.xml
MainActivity.kt
結果
寒い中ドコモショップの近くをフラフラして5Gの電波を感じてきました。(ドコモショップには貴重な5Gミリ波アンテナがある。すべての店舗には無いっぽい?)
ConnectivityManager#registerDefaultNetworkCallback()
- モバイルデータ接続中は常に従量制ネットワーク判定だった
TelephonyManager#listen()
とonDisplayInfoChanged()
ミリ波
でも変わらず、Sub-6
判定だった。
アンカーバンド圏内
の場合でもSub-6
判定だった。
TelephonyManager#listen()
とonDisplayInfoChanged()
- アンカーバンド時は
CellInfoLte
、5G(Sub-6/NR)の場合はCellIdentityNr
が貰える
- よって
Sub-6
orミリ波
orアンカーバンド
の検出にはこっちを利用する必要があるってことですね!
Sub-6 か ミリ波 か判定する方法
NRARFCN
の数字が2054166
以上の場合は多分ミリ波です(5Gバンドn257
以上)
というわけで、startListen 関数
を書き換えれば5G ミリ波、5G Sub-6の検知も出来るはずです。
アンカーバンドかどうかを判断する方法
CellInfo
とTelephonyDisplayInfo
から判断できます
関数を呼ぶ側はこんな風に
ソースコード
どうぞ~
https://github.com/takusan23/NewRadioAPIChecker
終わりに
アンカーバンドチェッカー作りました。作ったんだけどなんかdocomoなのにバンド:n77
とか表示するしなんか強制終了するして適当だけどどうぞ。
(PlayStoreって年末年始も審査してるんか・・・?お疲れ様です)
そういえばdocomoもなんちゃって5G(4G周波数を転用)の姿勢を見せたみたいですよ。docomoはやらない雰囲気(なぜか変換できない)出してたのに・・・