Funkcja W skrócie upraszcza obsługę interakcji z użytkownikiem za pomocą klas Action
. W skrócie
Klasy Action
określają czynności, które może wykonać użytkownik. Możesz określić
operacji wykonywanej w odpowiedzi na dane działanie. Możesz zastosować Action
do dowolnej
za pomocą metody GlanceModifier.clickable
.
Widżety aplikacji działają w procesie zdalnym, więc działania są zdefiniowane podczas ich tworzenia
czas, a jego wykonanie ma miejsce w procesie zdalnym. W natywnej wersji językowej RemoteViews
:
Odbywa się to za pomocą usługi PendingIntents
.
Na tej stronie opisujemy następujące działania:
- Uruchamianie aktywności
- Uruchamianie usługi
- Wysyłanie transmitowanego wydarzenia
- Uruchom wywołanie zwrotne
Uruchamianie aktywności
Aby uruchomić aktywność na podstawie interakcji użytkownika, podaj w parametrze
actionStartActivity
do funkcji Button
lub innej funkcji kompozycyjnej za pomocą
GlanceModifier.clickable
(..).
Podaj jeden z tych elementów w actionStartActivity
:
- Docelowa klasa aktywności
ComponentName
- Zamiar
W skrócie przekształca działanie na PendingIntent
z podanym celem i
. W poniższym przykładzie aplikacja NavigationActivity
jest uruchamiana, gdy
użytkownik klika przycisk:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Uruchamianie usługi
Podobnie jak przy uruchamianiu działania, uruchomienie usługi przy interakcji użytkownika za pomocą jednej
z metod actionStartService
.
Podaj jeden z tych elementów w actionStartService
:
- Docelowa klasa aktywności
ComponentName
- Zamiar
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Wyślij transmitowane wydarzenie
Wyślij zdarzenie transmisji dotyczące interakcji użytkownika za pomocą jednej z
Metody actionSendBroadcast
:
Podaj jeden z tych elementów w actionSendBroadcast
:
- Działanie związane z ciągiem znaków
ComponentName
- Zamiar
BroadcastReceiver
zajęcia
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Wykonywanie działań niestandardowych
Zamiast wyznaczać konkretny cel, W skrócie może użyć działania lambda lub
actionRunCallback
, aby wykonać działanie, na przykład zaktualizować interfejs lub stan
interakcji użytkownika.
Uruchamianie działań lambda
Funkcji lambda możesz używać jako wywołań zwrotnych do interakcji w interfejsie.
Na przykład przekaż funkcję lambda do funkcji GlanceModifier.clickable
modyfikator:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Możesz też przekazać go do parametru onClick
w elementach kompozycyjnych, które go obsługują:
Button( text = "Submit", onClick = { submitData() } )
Uruchamianie wywołania zwrotnego
Możesz też użyć metod actionRunCallback
, aby wykonać działanie na
interakcji użytkownika. Aby to zrobić, udostępnij niestandardową implementację interfejsu
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 } }
Po kliknięciu przez użytkownika metoda suspend onAction
podanej
Pole ActionCallback
jest wywoływane, wykonując zdefiniowaną logikę (czyli żądanie
odśwież dane).
Aby zaktualizować widżet po wykonaniu działania, utwórz nową instancję
wywołaj update
(..). Więcej informacji znajdziesz w artykule Zarządzanie stanem widżetu 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) } }
Podaj parametry działań
Aby podać dodatkowe informacje o działaniu, skorzystaj z tagu ActionParameters
API do tworzenia par klucz-wartość o określonym typie. Aby na przykład zdefiniować kliknięte
miejsce docelowe:
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() } } }
Na dole znajdują się parametry, które są uwzględnione w intencji użytej do uruchomienia funkcji aktywność, co umożliwia docelowej aktywności pobrać ją.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Te parametry są też przekazywane do interfejsu ActionCallback
. Użyj zdefiniowanego
Parameters.Key
, aby pobrać wartość:
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 // ... } }