Glance упрощает обработку взаимодействия с пользователем через классы Action . Классы Action Glance определяют действия, которые может выполнять пользователь, и вы можете указать операцию, выполняемую в ответ на это действие. Вы можете применить Action к любому компоненту с помощью метода GlanceModifier.clickable .
 Виджеты приложений находятся в удаленном процессе, поэтому действия определяются во время создания, а выполнение происходит в удаленном процессе. В родных RemoteViews это делается через PendingIntents .
На этой странице описаны следующие действия:
Запустить мероприятие
 Чтобы запустить действие при взаимодействии с пользователем, предоставьте функцию actionStartActivity для Button или другого компонуемого объекта с помощью модификатора GlanceModifier.clickable (..).
 Укажите одно из следующих значений в actionStartActivity :
- Целевой класс активности
-  ComponentName
- Намерение
 Glance преобразует Action в PendingIntent с указанной целью и параметрами. В следующем примере NavigationActivity запускается, когда пользователь нажимает кнопку: 
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Запустить сервис
 Аналогично запуску активности запустите службу при взаимодействии с пользователем, используя один из методов actionStartService .
 Укажите одно из следующих значений в actionStartService :
- Целевой класс активности
-  ComponentName
- Намерение
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Отправить трансляцию мероприятия
 Отправьте широковещательное событие при взаимодействии с пользователем, используя один из методов actionSendBroadcast :
 Укажите одно из следующих значений в actionSendBroadcast :
- Строковое действие
-  ComponentName
- Намерение
-  Класс BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Выполнение специальных действий
 Вместо запуска конкретной цели Glance может использовать лямбда-действие или actionRunCallback для выполнения действия, например обновления пользовательского интерфейса или состояния при взаимодействии с пользователем.
Запуск лямбда-действий
Вы можете использовать лямбда-функции в качестве обратных вызовов для взаимодействия с пользовательским интерфейсом.
 Например, передайте лямбда-функцию модификатору GlanceModifier.clickable : 
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
 Или передайте его в параметр onClick компонуемых объектов, которые его поддерживают: 
Button( text = "Submit", onClick = { submitData() } )
Запустить ActionCallback
 Альтернативно можно использовать методы actionRunCallback для выполнения действия при взаимодействии с пользователем. Для этого предоставьте собственную реализацию ActionCallback : 
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
 При щелчке пользователя вызывается метод suspend onAction предоставленного ActionCallback , выполняющий определенную логику (т. е. запрос обновления данных).
 Чтобы обновить виджет после выполнения действия, создайте новый экземпляр и вызовите update (..). Дополнительные сведения см. в разделе «Управление состоянием GlanceAppWidget» . 
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
Укажите параметры действий
 Чтобы предоставить дополнительную информацию для действия, используйте API ActionParameters для создания типизированной пары «ключ-значение». Например, чтобы определить пункт назначения щелчка: 
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
Ниже параметры включены в намерение, используемое для запуска действия, что позволяет целевому действию получить его.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
 Параметры также передаются в ActionCallback . Используйте определенный Parameters.Key для получения значения: 
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }
