アプリ通知のアップデート

通知バーにアプリの通知を表示したあとに通知のタイトルやメッセージ部分を書き換える方法を紹介します。

例えば、ボタンが押されるたびにアプリ通知の本文にそのカウントを表示したい場合は次のようなコードを書きます。

public class FirstActivity extends Activity
{
    NotificationManager ntfManager;
    NotificationCompat.Builder ntfBuilder;
    int  notificationId = 0;
    
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createNotification();
            //通知の作成

        Button updateNotificationButton = (Button)findViewById(R.id.update_ntf_button);
        updateNotificationButton.setOnClickListener(new View.onClickListener
        {
            int click_num = 0;
            public void onClick(View v)
            {
                ntfBuilder.setContentText("click " + click_num);
                ntfManager.notify(notificationId, ntfBuilder.getNotification());
                    //通知を更新
            }
        });

    }

    /*アプリ通知を作成するメソッド*/
    private void createNotification()
    {
        ntfBuilder = new NotificationCompat.Builder(this)
                            .setContentTitle("Title")
                            .setSmallIcon(R.drawable.notification_icon)
                            .setContentText("click 0");

        /*起動するインテント*/
        Context context = this.getApplicationContext();
        final Intent second_intent = new Intent(context, SecondActivity.class);
        run_grp_timer_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //新規タスクで起動

        /*スタックに起動するインテントを追加*/
        final TaskStackBuilder stack_builder = TaskStackBuilder.from(this);
        stack_builder.addParentStack(FirstActivity.class);
        stack_builder.addNextIntent(second_intent);
        
        final PendingIntent secondPendingIntent = stack_builder
                                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        
        ntfBuilder.setContentIntent(secondPendingIntent);
        final NotificationManager ntfManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        ntfManager.notify( notificationId, ntfBuilder.getNotification());
            //通知を表示
    }
}

この例ではFirstActivityを親のタスクに持つSecondActivityを通知から起動するアクティビティとして登録しています。

このコード中で通知を更新しているのが次の2行です。

                ntfBuilder.setContentText("click " + click_num);
                ntfManager.notify(notificationId, ntfBuilder.getNotification());

通知の本文の内容をsetContentTextメソッドで書き換えてます。

その後アプリの通知に割り振った番号(ここでは notificationId)からnotifyメソッドで通知の内容を更新しています。

このときアプリの通知の本文が書き換わるだけで起動するインテントや書き換えなかったタイトルやアイコンの情報は保持されたままになります。

関連項目