I make a head up notification this way:
Notification.Builder nb = new Notification.Builder(context)
.setSmallIcon(icon)
.setContentTitle("Title")
.setContentText("Content")
.setDeleteIntent(delete)
.setPriority(Notification.PRIORITY_HIGH)
.setVibrate(new long[0]);
notificationManager.notify(1, nb.build()); // TODO hardcode
First time I install application on a testing device, notifications are heads up, but if I expand notification area (while heads up is still running) and dismiss the notification from there, next time notifications are not heads up. After reinstalling the app notifications are heads up again. Are there any reasons why heads up behaviour can not be constant?
Heads up notifications have a built in rate limiting - if the user swipes your heads up notification up (putting it back into the notification tray) or to the side (dismissing it), then that signals the system to prevent further heads up notifications for some period of time (~a minute by default).
I hope the below code will help you most to understand which properties ate most important to display heads-up notifications and also by using this code I didn't find the issue of not working sometimes.
To display heads-up, copy and paste the whole code and also fix errors based on strings and imports. After getting successful heads-up, remove or add anything as your requirement.
You may also follow my post on medium at this link for more detail answer.