6

I would like to create a notification in Android that has an expiration date, meaning that on a certain date, if it's not open, it will be automatically destroyed or removed. Is this possible? Does someone knows how to do this?

Thanks for your help.

SebastianT
  • 263
  • 3
  • 14

2 Answers2

8

You can remove your own app's notifications if you have the notification ID by calling NotificationManager.cancel. To implement the expiration, you can set an alarm with AlarmManager to wake up a BroadcastReceiver that will simply cancel the notification. (If the notification is no longer there, then the call to cancel will do nothing.)

// post notification
notificationManager.notify(id, notification);

// set up alarm
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyBroadcastReceiver.class);
intent.setAction("com.your.package.action.CANCEL_NOTIFICATION");
intent.putExtra("notification_id", id);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// note: starting with KitKat, use setExact if you need exact timing
alarmManager.set(..., pi);

In your BroadcastRecevier...

@Override
public void onReceive(Context context, Intent intent) {
    final String action = intent.getAction();
    if ("com.your.package.action.CANCEL_NOTIFICATION".equals(action)) {
        int id = intent.getIntExtra("notification_id", -1);
        if (id != -1) {
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.cancel(id);
        }
    }
}
B Best
  • 1,106
  • 1
  • 8
  • 26
Karakuri
  • 38,365
  • 12
  • 84
  • 104
  • Why would it not work? You may have to work out some of the finer details, but this general approach should work. – Karakuri May 26 '14 at 17:42
3

https://developer.android.com/reference/android/app/Notification.Builder.html#setTimeoutAfter(long)

you can specify a duration in milliseconds after which this notification should be canceled, if it is not already canceled.

from: https://stackoverflow.com/a/56072643/969016

Boy
  • 7,010
  • 4
  • 54
  • 68