寒川アクアブログ

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

NotificationCompat 内容を一部更新する

NotificationCompatを利用したノーティフィケーションの発行、部分的な更新の方法

通知が出るときのアニメーション無しに、通知の一部を更新する方法です。
また、スワイプや、”通知を全て消去”しても消えない通知を作る方法です。

(注) 端末を上から下にスワイプすると出てくる通知のリスト(あれの名前がわからない)上における、
通知の振舞いについてのエントリーです。


フィールドを用意する
private Notification notification;
private NotificationCompat.Builder builder;
private NotificationManagerCompat managerCompat;
private  int notifyID = 1;

あとでノーティフィケーションを使いまわしするような形でマネージャーのnotify(int,Notification)を実行するので、
フィールドを確保しておきます。
IDは、適当な値で大丈夫です。レイアウトxmlファイルのリソースIDなどを入れる作法もあるみたいですね。
同ID + 使いまわしNotificationで、通知の更新を行うことができます。


インスタンス化します
managerCompat = (NotificationManagerCompat.from(getApplicationContext()));
builder = new NotificationCompat.Builder(getApplicationContext());

インスタンス化をオンクリエイト内等で最初に行います。
notify()のたびに新しいインスタンスを作ると、2つめの通知が新たに出てしまいます。
更新のためには、同じインスタンスを使う必要があります。



使いまわして更新!!
private void sample_update(){
    builder.setContentIntent(sample_PendingIntent)    //    タップされた時に発行されるインテント
                .setSmallIcon(R.mipmap.icon_sample)    //    通知の左側のアイコン
                .setContentTitle(getString(R.string.text_sample))    //    通知のタイトル
                .setContentText("HELLO!")    //    通知のテキスト
                .setAutoCancel(true)    //    通知をタップしたときに、その通知を消すかどうか
                .setColor(Color.RED) ;   //    通知のアイコンを含むように円が描画される、その円の色(OS5.0以上)
                

    notification = builder.build();
    notification.flags = Notification.FLAG_NO_CLEAR;    //    通知をスワイプや、全消去しても消えない
    managerCompat.notify(notifyID, notification);  
}

ビルダーで各情報をセット、build()でひとまとまりの通知を製造、
マネージャーを介してその通知を飛ばす、という感じの流れです。

例では、builderのメソッド、set〇〇で、
各パラメーターを設定します。
一部だけ変えたい場合も、表示したいパラメーターはすべてセットする必要があります。

build()メソッドで、Notification型のインスタンスが戻り値として得られますので、
notify()メソッドの引数に与えます。
notify(notifyID,builder.build())でもいいですが、
消えないためのフラグを立てたので、いったん変数に入れています。