[ACCEPTED]-How to remove the notification after the particular time in android?-notifications

Accepted answer
Score: 22

The current correct solution may be to use:

NotificationCompat.Builder#setTimeoutAfter(long)

0

Score: 6

What you need is a combination of Alarmmanager 5 and notificationmanger.

Register the alarm 4 manager that will call a service in 5 minutes 3 and use NotificationManager.cancel in the 2 service implementation.

Alarm Service Sample 1 is here. I suppose you know to use Notification Manager.

Score: 2

AlarmManager is more often used for complicated 5 Services that have to run in the Background 4 when the Application is closed. You could 3 also use a classic Java Runnable in a Handler 2 for a simple small Thread.

Handler h = new Handler();
    long delayInMilliseconds = 5000;
    h.postDelayed(new Runnable() {
        public void run() {
            mNotificationManager.cancel(id);
        }
    }, delayInMilliseconds);

Also look here:

Clearing notification after a few seconds

You 1 could also use the TimerTask-Class.

Score: 1

For Android >= 8.0 (Oreo) we can use 4 this,

NotificationCompat.Builder#setTimeoutAfter(long)

For Android < 8.0 we can use AlarmManager

Add 3 this to AndroidManifest.xml :

<receiver
    android:name=".AutoDismissNotification"/>

Create AutoDismissNotification.kt 2 and add this code :

class AutoDismissNotification : BroadcastReceiver() {

    companion object {
        private const val KEY_EXTRA_NOTIFICATION_ID = "notification_id"
    }

    override fun onReceive(context: Context, intent: Intent) {
        val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.cancel(intent.getIntExtra(KEY_EXTRA_NOTIFICATION_ID, 0))
    }

    fun setAlarm(context: Context, notificationId: Int, time: Long) {
        val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val alarmIntent = Intent(context, AutoDismissNotification::class.java)
        alarmIntent.putExtra(KEY_EXTRA_NOTIFICATION_ID, notificationId)
        val alarmPendingIntent = PendingIntent.getBroadcast(context, notificationId, alarmIntent, PendingIntent.FLAG_ONE_SHOT)
        alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + time, alarmPendingIntent)
    }

    fun cancelAlarm(context: Context, notificationId: Int) {
        val alarmIntent = Intent(context, AutoDismissNotification::class.java)
        alarmIntent.putExtra(KEY_EXTRA_NOTIFICATION_ID, notificationId)
        val alarmPendingIntent = PendingIntent.getBroadcast(context, notificationId, alarmIntent, PendingIntent.FLAG_ONE_SHOT)
        val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        alarmManager.cancel(alarmPendingIntent)
    }
}

When you build the notification, add 1 this :

long timeOut = 5 * 1000L; // Five seconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    builder.setTimeoutAfter(timeOut);
}
else {
    AutoDismissNotification().setAlarm(this, notificationId, timeOut);
}
Score: 0

You can create your notification like this.

 NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
                .setSmallIcon(Util.getNotificationIcon(context))
                .setContentTitle(new SessionManager().getDomainPreference(context))
                .setAutoCancel(true)
                .setOngoing(false)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setShowWhen(false)
                .setContentText(summaryText)
                .setTimeoutAfter(3000) // add time in milliseconds
                .setChannelId(CHANNEL_ID);

0

More Related questions