寒川アクアブログ

美容師しながらアプリ開発していて水草が趣味の私のブログです

スワイプしても消えないノーティフィケーション

タイマーや目覚まし時計のアプリでは、アラームがセットされていることを明確にするために、
通知バーになんらかのメッセージを表示することがあります。
これが「すべての通知を消去」等をしたときに、アラームの通知も消えてしまっては、目覚ましは本当に鳴るのか、不安になってしまいます。
このような場合に有効な、通知バー内から消えないノーティフィケーションを作成する方法です。

NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

Notification notification = new Notification.Builder(this)
.setContentTitle("title")    //  タイトルです(太字)。
.setContentText("text")    //  メッセージテキストです。
.setContentIntent(intent)    //  タップされた時に発行するインテントを指定します。
.setAutoCancel(false)    //  タップされた時に、通知バーから消去する場合はtrueにします。
.setSmallIcon(R.drawable.my_icon)    //  左側のアイコン画像です。
.build();

notification.flags = Notification.FLAG_NO_CLEAR;

nm.notify(NOTIFICATION_ID, notification);    //  IDは識別に使う整数なので、任意の数字です。


ノーティフィケーションを表示する通常の記述に加えて、Notification.FLAG_NO_CLEARのフラグを指定することで、
通知領域内でスワイプしても、ゴムでくっついているような動きを持ち、消すことができなくなります。

Notificationは、通知バーに表示する情報を保持します。
マネージャーを利用して通知バーに表示させます。

ノーティフィケーションはユーザーからは消すことができなくなっているので、
必要がなくなったときに消去する処理の記述が必要です。