どうもこんばんわ
店員ちゃんのセイイキ、、、どこ?
本題
Androidで接続中バンドを取得するアプリを作りたい。
Band 3とかそういうのがほしい
一筋縄では行かない
getBand()
みたいな関数は無い。じゃあ世の中の電測1アプリはどうやってバンドを取得しているのって話ですが、
EARFCN
という値が取得できるので、EARFCN
の値とバンド一覧
を照らし合わせることでバンドを取得することが出来ます。
周波数もEARFCN
から出すことができるみたいです。
ちなみに3GではUARFCN
、5GではNRARFCN
と呼ばれているそう。
EARFCNからバンドを割り出すサイト→https://www.sqimway.com/lte_band.php
とりあえずEARFCNを取得してみる
app/build.gradle
ViewBinding
、Acitivty Result API
を利用できるようにします
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "io.github.takusan23.connectionband"
minSdkVersion 24
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildFeatures{
viewBinding true
}
// 省略
}
dependencies {
// Activity Result API
implementation 'androidx.activity:activity-ktx:1.3.0-alpha06'
implementation 'androidx.fragment:fragment-ktx:1.3.2'
}
activity_main.xml
TextView
とButton
をおいておきましょう
AndroidManifest.xml
Android 10以降はこの権限が無いと最新の値が取れない。
MainActivity.kt
権限とViewBinding
とりあえず権限もらうのと、ViewBinding
の用意をします。
EARFCNの取得
getEarfcn
関数内に書いていきます。
EARFCNからバンドを割り出す関数
と、その前にEARFCN
の値とバンドの相対表が必要ですので用意しましょう。
多分PDF見るのが早いと思います。
中を見るとこんな感じの表が出てきます。(以下はクソ簡略版)
band | Range of Ndl |
---|
1 | 0 - 599 |
2 | 600 - 1199 |
3 | 1200 - 1949 |
取得したEARFCN
が1850
の場合は、1200 から 1949 まで
のBand 3
が正解!となるわけです。
1500
の場合でも、1200 から 1949 まで
のBand 3
が正解となります。
この表と照らし合わせる処理を書きます。
データクラスを用意
データ3つなのでTriple
でも良かったですね
変換する関数
Kotlinの(0..10)みたいなやつのおかげで楽ですね。
(比較演算子使って範囲内かどうかを調べてもいいけど)
合体
EARFCN取得関数と合体させます。
そして権限コールバックのところとボタン押したところに書いて完成
全部くっつけてこう
動かすとこんなかんじ
番外編:5G(NR)に対応する
New Radioの略らしい。
ここに4Gのときみたいな表があるので
band | Downlink Range of NREF |
---|
n1 | 422000 – 434000 |
n2 | 386000 – 398000 |
n3 | 361000 - 376000 |
これを配列に入れてこんな感じに。
あ、ミリ波の方は、
だと思います。(多分)
作ったのはいいけど5Gエリアに行かないとあってるかどうかわからない。
全部くっつけて
ソースコード
https://github.com/takusan23/ConnectionBand
終わりに
休日終わるの早すぎ。
あと機内モードポチポチしてたら家でも楽天回線掴むようになってた。うれしい