Home screen widgets let users interact with your app without opening it. Jetpack Glance provides a Compose-like API for building widgets, replacing the old RemoteViews boilerplate.
// From anywhere in the app — refresh all widget instancessuspendfunrefreshWidgets(context: Context){val manager =GlanceAppWidgetManager(context)val ids = manager.getGlanceIds(ArticleWidget::class.java)
ids.forEach{ id ->updateAppWidgetState(context,ArticleWidgetStateDefinition(), id){ state ->
ArticleWidgetState.Loading
}ArticleWidget().update(context, id)}}// Action callback (called when user taps refresh button in widget)class RefreshArticlesCallback : ActionCallback {overridesuspendfunonAction(context: Context, glanceId: GlanceId, parameters: ActionParameters){refreshWidgets(context)// Actual data fetch scheduled via WorkManagerenqueueRefreshWork(context)}}
Key Takeaways
Concept
Rule
GlanceAppWidget
Main class; provideGlance renders the UI
GlanceAppWidgetReceiver
Receives system broadcasts; triggers initial update
Widget state
Use GlanceStateDefinition + DataStore for persistence
actionStartActivity
Deep link from widget tap to specific screen
actionRunCallback
Trigger code without opening the app (e.g., mark done, refresh)
updatePeriodMillis
Max 30 minutes (1,800,000ms) — system ignores shorter intervals