[Android] Alarm をNotificationManager で通知する

前回は AlarmManger タイマー機能 でアラームを発生し BroadcastReceiver で受け取りました。今回は、その受け取ったアラームを NotificationManager を使って通知してみたいと思います。
 
1x1.trans - [Android] Alarm をNotificationManager で通知する


Android Studio
2021.2.1

 




NotificationChannel

 

Notification、通知のことですが「時間になりました。」などの通知がStatus barや通知ドロワーに表示されるものです。
 
1x1.trans - [Android] Alarm をNotificationManager で通知する


 
1x1.trans - [Android] Alarm をNotificationManager で通知する
 
同時に通知音やバイブレータでユーザーにお知らせする機能です。
 
API level 26からは NotificationChannel が追加されました。アプリの通知のプライオリティを設定することができます。

また、アイコンに通知があった場合に通知ドットをつけることができます。いわゆるバッジです。また長押しするとメッセージをダイアログで出したりと色々とChannelで設定することができます。
 
1x1.trans - [Android] Alarm をNotificationManager で通知する


 
 

NotificationManager

 

BroadcastReceiverを継承したクラスの onReceive() でアラームを受け取り通知する設定です。
 
NotificationManager:
インスタンスは getSystemService() を使って以下のように生成

 

NotificationChannel: 

NotificationCompat.Builder:
channel IDを引数として

 
例えばこのように設定します。

 
notify() が最終的に表示させる設定です。
notify(int id, Notification notification)

 

Alarm を PendingIntent で設定

 

10秒後のアラームを設定してみます。以前このページで繰り返しをやっていましたがDoze モードの対応が必要なので簡略化のため単発アラームにしました。(Dozeモードでもアラームを使う場合は以下のように色々と設定する必要があります。)
 

setexact 01b 100x100 - [Android] Alarm をNotificationManager で通知する
AlarmManagerで繰り返しのアラーム機能を実装したいのですが、バックグラウンド実行制限があります。本来の機能として定期的なバックグラ...

 
BroadcastReceiver でそれぞれを区別するために受け取るためにgetBroadcast() 第二引数、requestCode を設定して Intent に追加して送ります。
 

 

アラームをキャンセル

 

単発アラームですが一応cancel の設定もしておきます。
登録したものと同じIntentとPendingIntentからAlarmManagerを設定して
cancel(pending)を呼び出して解除します。
 

 

サンプルコード

 

コードをまとめてみます
 
AndroidManifest.xml

 
MainActivity.java

 
AlarmNotification.java

 
一応レイアウトも
activity_main.xml

 
リソースです
strings.xml

 
これで10秒後に以下の変化が現れます

  • アラーム音
  • 通知ドロワーを引き出すとメッセージ
  • ステータスバーにアラームアイコンが表示
  • アプリのアイコンに通知ドット(バッジ)が現れ、長押しするとメッセージが出ます
  • アラームが発砲しない場合:「設定」「通知」で通知を許可しているか確認!

1x1.trans - [Android] Alarm をNotificationManager で通知する

  

関連:

 

References:
通知を作成する – Android Developers
NotificationChannel | Android Developers
GitHub – googlesamples/android-NotificationChannels
Notification.Builder | Android Developers

シェアする

  • このエントリーをはてなブックマークに追加

フォローする