2026/10/17

Androidの「緊急速報メールの履歴」で表示される情報をコマンドラインで取得してみる

2026年10月16日にドコモ回線で緊急地震速報が受信できなかったというのがありましたが(参考: ドコモ回線で「緊急地震速報」配信されず、16日昼)、自分のPixel 6aにはIIJmio (ドコモ網)、povoのSIMが入っていて、受信したのでpovoの方で受信したのだろう、と。
しかし確認しようにも方法が分からない。以前のバージョンのAndroidでは

$ adb logcat -b radio

でGsmCellBroadcastHandlerが出力したログを見ればlocationに44010, 44051などのPLMNが含まれていました。
Android 17で確認する方法は無いかと検索してみたところ

$ adb shell content query --uri content://cellbroadcasts

で、緊急速報メールの履歴 (設定 > 安全性と緊急情報 > 緊急速報メール > 緊急速報メールの履歴) で表示される情報が取得できると。
出力結果にはPLMNも含まれていてpovo側で受信していることが確認できました。その他に携帯電話基地局の情報 (LAC, CID) などもあるのでどっかに貼る時は気を付けましょう。

各項目の意味は Telephony.java を見てください。

2025/12/30

Android 16で通知を自動的にグループ化されないようにする (アプリ開発者側での話)

この記事を書いている時点ではAndroid 16においてユーザー側で通知のグループ化を無効にする方法はありません。アプリ開発者側での話になります。


Android 13~15までは、通知を作成する時にNotification.Builder#setGroup(java.lang.String)でグループキーを設定しておけばグループ化されず、個別に通知が表示されていました。しかしAndroid 16からこの回避策が効かなくなり、通知を2つ以上出すと自動的にグループ化されるようになってしまいました。

参照: Android 16 が登場

Android パブリックトラッカーでAndroid 16での通知のグループ化をアプリごとでオプトアウトできるようにと要望も上がっていましたが、今のところGoogleはやらないようです。

参照: Per-app setting to opt-out of Android 16 notification grouping


Androidアプリの開発者向けのページの 通知の動作 によるとAndroid 16.0 (API レベル 36) では

次の通知は自動的にグループ化されます。

  • 要約のない通知
  • 子通知のない通知
  • 子通知が 1 つまたは少ない通知

となっています。つまり要約(Summary)があればグループ化されなさそうです。

で、ボタンをタップして通知を出すサンプルコード。


    button.setOnClickListener { v ->
val notification = Notification.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_android)
.setGroup("group-$count")
.setContentText("count=$count")
.build()

notificationManager.notify(count, notification)

val notificationSummary = Notification.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_android)
.setGroup("group-$count")
.setGroupSummary(true)
.build()

notificationManager.notify(Integer.MAX_VALUE - count, notificationSummary)

count++
}

1つの通知につき1つの要約と通知ごとにグループキーを変更する必要があるのでで、少し手間ではありますがこれでグループ化を回避できます。こんな感じになります(エミュレータでやってるので動作が遅いです)。


上の動画でも分かるのですが、いくつも通知を出せるわけではなく6つになるとグループ化されてしまいます。

ソース https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-16.0.0_r4/services/core/java/com/android/server/notification/NotificationManagerService.java#672 を見てみると6個以上になった時にグループ化するように設定されていてこの値は変更できないので6個以上出すのは諦めましょう。


2025/11/17

Android Studioから起動するエミュレータにコマンドラインオプションを設定する

Android Studioから起動するエミュレータにコマンドラインオプションを設定できないかと検索していたら

How to pass command line options to the emulator in Android Studio? - Stack Overflow

に答えがあったので。


起動オプションを設定するには環境変数「studio.emu.params」に値を設定します。注意点としてはスペースを使用せず、「,」 (カンマ)で繋いでいきます。

例えばタイムゾーンを東京にする場合コマンドラインオプションでは

-timezone Asia/Tokyo

と「-timezone」と「Asia/Tokyo」の間にスペースありますが、環境変数で設定する場合、スペースをカンマで置換した形

$ set studio.emu.params=-timezone,Asia/Tokyo

にします。


Android Studio Otter | 2025.2.1 では https://android.googlesource.com/platform/tools/adt/idea/+/refs/tags/studio-2025.2.1/android/src/com/android/tools/idea/avdmanager/AvdManagerConnection.kt#308

で環境変数を取得して設定していました。コミットログを見ると7年以上前からあったらしい。

Diff - dd839c9436e425381256cb2e984305c09a7fbbd9^! - platform/tools/adt/idea - Git at Google

もっと早く知りたかった