[Feature Request] Support Android 16 Promoted Ongoing (Live Update) notifications
#2,773 opened on Apr 5, 2026
Repository metrics
- Stars
- (2,208 stars)
- PR merge metrics
- (Avg merge 59m) (4 merged PRs in 30d)
Description
Description
Android 16 (API level 36) introduces Promoted Ongoing notifications, also referred to as "Live Update" notifications. These are ongoing notifications that receive elevated visual treatment in the status bar and notification shade, designed for real-time status updates such as navigation, timers, delivery tracking, and emergency alerts.
To opt a notification into this behaviour, the app must set a boolean extra on the notification's Bundle:
builder.extras.putBoolean("android.requestPromotedOngoing", true)
The constant is defined as Notification.EXTRA_REQUEST_PROMOTED_ONGOING.
There is currently no way to set arbitrary notification extras through flutter_local_notifications. The plugin constructs the NotificationCompat.Builder internally and does not expose the extras bundle, so developers cannot use this Android 16 feature without bypassing the plugin entirely.
Use case
Google designed Promoted Ongoing notifications for apps that show time-sensitive, continuously updating information:
- Emergency/safety alert apps displaying active warnings with countdowns
- Navigation apps showing turn-by-turn directions
- Ride-sharing and delivery tracking with live ETAs
- Sports scores and live events with real-time updates
- Timers and stopwatches
These are precisely the kinds of notifications that benefit most from the elevated status bar and notification shade placement that Promoted Ongoing status provides.
Current workaround
The only way to use Promoted Ongoing notifications today is to bypass flutter_local_notifications entirely and post notifications via native platform code (Kotlin/Java) through a method channel.
This is problematic because:
- It creates two separate notification posting paths in the app, one managed by the plugin and one managed by custom native code.
- It does not work in background
FlutterEnginecontexts (e.g. the FCM background message handler, WorkManager tasks) without additional setup to register the method channel in the background isolate. - It defeats the purpose of using a cross-platform notification plugin, forcing developers to maintain platform-specific notification logic anyway.
Proposed API
Either of the following approaches would solve this:
Option A: Dedicated field (narrower scope, simpler)
Add a requestPromotedOngoing boolean to AndroidNotificationDetails:
AndroidNotificationDetails(
'channel_id',
'Channel Name',
ongoing: true,
requestPromotedOngoing: true,
// ...
)
On the native side this would call:
builder.extras.putBoolean("android.requestPromotedOngoing", true)
Option B: General extras map (broader scope, more flexible)
Add an extras parameter to AndroidNotificationDetails that maps to Notification.Builder.extras:
AndroidNotificationDetails(
'channel_id',
'Channel Name',
ongoing: true,
extras: <String, Object>{
'android.requestPromotedOngoing': true,
},
// ...
)
This would allow developers to set any notification extras without requiring a plugin update for each new Android feature. The supported value types could be limited to bool, int, double, and String to keep serialisation straightforward.
Option A is probably the better choice for this specific feature, as it is discoverable, type-safe, and can include validation (e.g. warning if ongoing is not also set to true). Option B could be considered as a complementary addition for future-proofing.
Android documentation references
Related
Android 16 also introduces Notification.Builder.setShortCriticalText(CharSequence), which sets the text displayed in the status bar chip for Live Update notifications (e.g. "3 min", "2.1 mi"). This would also be a valuable addition but is a separate feature request, as it involves a builder method rather than an extras bundle entry.
Environment
- Android 16 (API level 36)
flutter_local_notificationslatest stable- Flutter 3.x