5G を検出して接続タイプを特定する 【NR NSA/SA/MMWAVE】

Androidで、どの5Gが掴めているか確認します。

 

条件

1. Android11 (OS)
2. 5G対応デバイス (端末)
3. SIMカード (通信)

手元にある Pixel5 (Android11) + docomo ahamo SIM で挑みます。

 

5G を検出する

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

LISTEN_DISPLAY_INFO_CHANGEDからPhoneStateListenerイベントをPhoneStateListenerし、 onDisplayInfoChanged()メソッドをオーバーライドすることにより、5G検出をサポートします。

5G検出

👉 アプリに 5G 機能を追加する  |  Android デベロッパー 

ここらは、callbackFlow を使うと掴んでいるネットワークの種類が変化するたびにUIを変化させることができますね!

ここで気になっていたのが、すでに一部キャリアから公開が始まってる NR_SA (5G スタンドアロン) の戻り値が掲載されてないことでした。

ちなみに、USモデルでは以下のような記事で、直近のパッチで対応など書かれてる。

👉 Pixel 5 and 4a 5G don't support 5G SA right now, but they will next year 
👉 Pixel 5, 4a 5G adds Standalone (SA) on T-Mobile, Google Fi - 9to5Google 

 

接続タイプを特定する

次の値を使用して、5GのNSA(非スタンドアロン)、mmWave(ミリ波)、およびSA(スタンドアロン)接続タイプを区別します。

5GのNSA(非スタンドアロン)、mmWave(ミリ波)、およびSA(スタンドアロン)接続タイプを区別します

👉 5Gテスト  |  Android オープンソース プロジェクト 

どうやら NR_SA (5G スタンドアロン) は、2つのクラスから取得できる3つの値の組み合わせで判定できるようです。

NR NSA/SA/MMWAVE



 

結果

確認しやすいように基準となる値の3つを並べて表示するようにしておいて、いざ5Gエリアへ。

ahamo 5G NR_NSA NR_SA
👉 Test 5G - Google Play のアプリ 


[設定]

  |

[デバイス情報]

  |

[SIMのステータス]

5G NR_NSA
私は、5Gは、

「NR_NSA (5G非スタンドアロン)」

しか掴んだことがありません!

「NR_SA (5Gスタンドアロン)」は

どこに行けばつかめるのでしょうか、

いや、今は待つしかないのでしょうか?

👉 Pixel5 で ahamo を使いながら書くページ 
👉 Pixel5 / Pixel4a (5G) で「ミリ波」は使えたのか。【ahamo】 
👉 なぜ ahamo は 5Gエリアで4G通信に切り替わるのか。 
👉 ドコモ 5G 通信速度 どれぐらい? 
👉 Test 5G - Google Play のアプリ 

👉 「0001docomo」は 誰でも 無料 で 自動接続 できますので設定方法を hatena-bookmark


Error: Please specify Xcode project location in xcodeproj property of gradle.properties

KMMで作ってみるかとドキュメント通りにやってみました。

👉 Getting started—Kotlin Multiplatform Mobile Docs 

iosApp の Run/Debug Configuration が自動で作られへん!

なんでや。

仕方なく手動で作って見ました。

scheme が読み込まれへん!

なんでや。

Fix ボタンで自動追記されましたが、明らかにおかしい。

なんでやねんな。

調べてみると、コマンドラインのツール選択ができてないとかなんとか。

👉 KMM plugin can't grab Xcode schemes : KT-41691 

再度、Run/Debug。

動かんやないか、なんでやの?

 

まとめ

プラグインのバグやないか。

It was fixed with ...

Situation is as follows.
If xcodeproj is not defined -- no iOS run configuration will be created.
If xcodeproj is defined then an iOS run configuration is created, but it is invalid and the reason is reported to user. This seems very logical: user deliberately targeted a Xcode project -- KMM tried it and reported back.

The fix is expected to be delivered in the next KMM plugin release (0.2.1).

👉 KMM plugin: Native run configuration is created for irrelevant (non-iOS) Native targets : KT-43792 


👉 KMM plugin releases—Kotlin Multiplatform Mobile Docs 

なんやこれ、待つしかないんか?

👉 Kotlin Multiplatform Mobile - Android Studio | JetBrains 


【Android Studio】矢印キー(カーソルキー) を使わない排除したキーマップ【macOS】

できれば、カスタムせずにデフォルトのままで自分側を対応させたかったmacOSキーマップ。

コロナの影響かなんとなくショートカットでイライラしすぎなので、少し考えて整理してみようと思いました。


👉 キーボード ショートカット  |  Android デベロッパー  |  Android Developers 


👉 Android Studio/IDEA Default Keymap 

 

カーソルキーが問題では?

きっとこれです。どの指で触るかさえ悩んでしまうカーソルキー。

小指以外で触れば、ホームポジションから指が離れてしまう。

👉 スラドに聞け:矢印キーの押し方は | スラド Slashdotに聞け 

カーソルキーを使うショートカットを眺めます。

Android Studio - macOS keymap

うーん、カーソルキーを使うショートカット自体は少ないが...

 

カーソルキーを使う操作

実際のカーソルキーを使う操作を考えてみると、以下の3つ。


- カーソルの移動

- テキストの選択/解除

- カーソルキーを利用したショートカット

それぞれ見ていきます。

 

カーソルの移動

EmacsやMac上のアプリでは、カーソルキーを利用することなくカーソル位置を自在に動かすことができます。


⌃(Control) + p : 1行上に移動 (↑)

⌃(Control) + n : 1行下に移動 (↓)

⌃(Control) + f : 1文字前に移動 (→)

⌃(Control) + b : 1文字後に移動 (←)

また、テキストの選択に非常に便利な、以下の2つのショートカットもデフォルトですぐに利用することができます。


⌃(Control) + a : 行の先頭に移動

⌃(Control) + e : 行の末尾に移動

👉 Mac のキーボードショートカット - Apple サポート 

 

テキストの選択/解除

Emacs でいうところの「Mark-Set」、AndroidStudio 上での macOS キーマップでいうところのアクション「Toggle Sticky Selection」を使うことで選択範囲の開始です。ショートカットの「⌃(Control) + space」に上書きして使います。

選択範囲を開始したら、前述のカーソルキーの移動を使って範囲を調整します。

選択の解除は、Android Studio macOSキーマップでいうところの「Escape」が該当します。

これらの操作は、Emacs のデフォルトキーバインドと同じ操作となっています。Mac の標準的なソフトウエアでも利用できるものが少なくありませんので覚えておくといいと思います。

 

カーソルキーを利用したショートカット

前述のキーマップPDFに記載のように、macOSキーマップにはカーソルキーを利用したショートカットが登録されています。

「Shrink/Extend Selection」などは、あちこちの記事で便利で使えると言われていることが多いです。

その他、お好みで多用するショートカットが使いづらいようであれば、利用していないショートカットキーに登録するのも良いでしょう。

 

まとめ

私の感覚で言うと、カーソルキーを使わず Emacs/Mac 系ショートカットたちをエディタで使うには、あといくつかのショートカットを登録しておくとストレスが少ない。

👉 To keep on your keyboard home position for Android Studio 

macOS 上で、コーディングを含むテキストの編集なら、ホームポジションを考慮した emacs/mac 系ショートカット操作が最強に思っていますが、マウスやトラックパッドも触るっちゃあ触ってるけども、これがスッキリする。

実際は、以下、キーリマップ を使ったほうが早い気もする。


👉 MacBook Proの「バタフライキーボード」補足。困った矢印キーと適切な修飾キー刻印。: パワーリンゴ 
👉 Controlキーで自由自在にカーソルをコントロール!テキスト入力が超捗るショートカットキーまとめ|スーログ 
👉 keymaps at master · JetBrains / intellij-community 
👉 Configure TAB to indent current line? – IDEs Support (IntelliJ Platform) | JetBrains 
👉 AndroidStudioをemacsのキーバインドにしよう - Qiita 
👉 Mac のキーボードショートカット - Apple サポート