[Android] Alarm をNotificationManager で通知する

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

Android Studio 3.1
Android 8.1.0

 



NotificationChannel

 
Notification、通知のことですが「時間になりました。」などの通知がStatus barや通知ドロワーに表示されるものです。
 

 

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

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

 

 

NotificationManager

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

 

NotificationChannel: 

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

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

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

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

 

Alarm を PendingIntent で設定

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

AlarmManagerで繰り返しのアラーム機能を実装したいのですが、バックグラウンド実行制限があります。本来の機能として定期的なバックグラ...

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

 

アラームをキャンセル

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

 

サンプルコード

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

 
MainActivity.java

 
AlarmNotification.java

 
一応レイアウトも
activity_main.xml

 
リソースです
strings.xml

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

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


 
 
関連:

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

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

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


 


ページのトップへ戻る




シェアする

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

フォローする