Glance vereinfacht die Verarbeitung von Nutzerinteraktionen über die Action
-Klassen. Glance's
Action
-Klassen definieren die Aktionen, die ein Nutzer ausführen kann, und Sie können die
-Vorgang als Reaktion auf die Aktion ausgeführt wird. Sie können Action
auf alle
mit der Methode GlanceModifier.clickable
.
App-Widgets befinden sich in einem Remote-Prozess, sodass die Aktionen bei der Erstellung definiert werden
und die Ausführung erfolgt im Remote-Prozess. In der nativen Datei RemoteViews
Dies erfolgt über PendingIntents
.
Auf dieser Seite werden die folgenden Aktionen beschrieben:
Aktivität starten
Um eine Aktivität zur Nutzerinteraktion zu starten, geben Sie die
actionStartActivity
-Funktion in eine Button
oder eine andere zusammensetzbare Funktion über die
GlanceModifier.clickable
(..)-Modifikator.
Geben Sie eines der folgenden Dokumente in actionStartActivity
an:
- Die Zielaktivitätsklasse
- Die
ComponentName
- Eine Absicht
Glance die Aktion in ein PendingIntent
mit dem angegebenen Ziel und
Parameter. Im folgenden Beispiel wird NavigationActivity
gestartet, wenn ein
der Nutzer auf die Schaltfläche klickt:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Dienst starten
Ähnlich wie beim Starten einer Aktivität starten Sie einen Dienst mit einer
der actionStartService
-Methoden.
Geben Sie eines der folgenden Dokumente in actionStartService
an:
- Die Zielaktivitätsklasse
- Die
ComponentName
- Intent
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Ereignis an alle senden
Senden Sie bei einer Nutzerinteraktion ein Übertragungsereignis mit einer der
actionSendBroadcast
-Methoden:
Geben Sie eines der folgenden Dokumente in actionSendBroadcast
an:
- Stringaktion
- Die
ComponentName
- Intent
BroadcastReceiver
Kurs
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Benutzerdefinierte Aktionen ausführen
Anstatt ein bestimmtes Ziel zu starten, kann Glance eine Lambda-Aktion oder eine
actionRunCallback
, um eine Aktion auszuführen, z. B. die Benutzeroberfläche oder den Status zu aktualisieren
der Nutzerinteraktion.
Lambda-Aktionen ausführen
Sie können Lambda-Funktionen als Callbacks für die UI-Interaktionen verwenden.
Übergeben Sie beispielsweise die Lambda-Funktion an die GlanceModifier.clickable
Modifikator:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Alternativ können Sie sie bei zusammensetzbaren Funktionen, die sie unterstützen, an den Parameter onClick
übergeben:
Button( text = "Submit", onClick = { submitData() } )
ActionCallback ausführen
Alternativ können Sie die actionRunCallback
-Methoden verwenden, um eine Aktion für
der Nutzerinteraktion. Stellen Sie dazu eine benutzerdefinierte Implementierung des
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 } }
Beim Klicken des Nutzers wird die suspend onAction
-Methode der bereitgestellten
ActionCallback
wird aufgerufen, wodurch die definierte Logik ausgeführt wird (d.h.
Daten aktualisieren).
Um das Widget nach dem Ausführen der Aktion zu aktualisieren, erstellen Sie eine neue Instanz und
Aufruf von update
(..). Weitere Informationen finden Sie unter LookAppWidget-Status verwalten.
.
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) } }
Parameter für Aktionen angeben
Wenn Sie zusätzliche Informationen zu einer Aktion angeben möchten, verwenden Sie den ActionParameters
.
Die API zum Erstellen eines typisierten Schlüssel/Wert-Paars. Um beispielsweise die angeklickten
Ziel:
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() } } }
Darunter sind die Parameter im Intent enthalten, mit dem die -Aktivität, sodass die Zielaktivität sie abrufen kann.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Die Parameter werden auch für ActionCallback
bereitgestellt. Verwenden Sie die definierten
Parameters.Key
, um den Wert abzurufen:
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 // ... } }