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);
}
}
}