[Android] Alarm をNotificationManager で通知する

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

Android Studio 3.1
Android 8.1.0

 



NotificationChannel

 
Notification、通知のことですが「時間になりました。」などの通知がStatus barや通知ドロワーに表示されるものです。
 
notification 02 - [Android] Alarm をNotificationManager で通知する
 
notification 01 - [Android] Alarm をNotificationManager で通知する
 
同時に通知音やバイブレータでユーザーにお知らせする機能です。
 
API level 26からは NotificationChannel が追加されました。アプリの通知のプライオリティを設定することができます。

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

 

NotificationManager

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

 

NotificationChannel: 

必ずしも全て必要ではありませんので選択できます。

Notification.Builder:
Notification.Builder(Context context)は非推奨になり追加としてchannel IDを引数として使っていきます。

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

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

 

320x480 0107ddd2cbf3fe9b2650df47e5e47ebd d740e - [Android] Alarm をNotificationManager で通知する

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秒後に以下の変化が現れます

  • アラーム音
  • 通知ドロワーを引き出すとメッセージ
  • ステータスバーにアラームアイコンが表示
  • アプリのアイコンに通知ドット(バッジ)が現れ、長押しするとメッセージが出ます

notification 03 - [Android] Alarm をNotificationManager で通知する
 
 
関連:

 
References:
NotificationChannel | Android Developers
GitHub – googlesamples/android-NotificationChannels
Notification.Builder | Android Developers

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加

ページのトップへ戻る




 

シェアする

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

フォローする