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())でもいいですが、
消えないためのフラグを立てたので、いったん変数に入れています。