Glance menyederhanakan penanganan interaksi pengguna melalui class Action
. Sekilas
Class Action
menentukan tindakan yang dapat dilakukan pengguna, dan Anda dapat menentukan
operasi yang dijalankan sebagai respons terhadap tindakan tersebut. Anda dapat menerapkan Action
ke semua
komponen dengan metode GlanceModifier.clickable
.
Widget aplikasi aktif pada proses jarak jauh, sehingga tindakan ditentukan saat pembuatan
waktu dan eksekusinya
terjadi dalam proses jarak jauh. Di RemoteViews
native,
hal ini dilakukan melalui PendingIntents
.
Tindakan berikut dijelaskan di halaman ini:
Meluncurkan aktivitas
Untuk meluncurkan aktivitas pada interaksi pengguna, sediakan
Fungsi actionStartActivity
ke Button
atau composable lainnya melalui
Pengubah GlanceModifier.clickable
(..).
Berikan salah satu hal berikut di actionStartActivity
:
- Class aktivitas target
ComponentName
- Suatu Niat
Glance menerjemahkan Action ke PendingIntent
dengan target yang diberikan dan
parameter. Pada contoh berikut, NavigationActivity
diluncurkan saat
pengguna mengklik tombol:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Meluncurkan layanan
Mirip dengan meluncurkan aktivitas, luncurkan layanan pada interaksi pengguna menggunakan satu
dari metode actionStartService
.
Berikan salah satu hal berikut di actionStartService
:
- Class aktivitas target
ComponentName
- Intent
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Mengirim acara siaran
Mengirim peristiwa siaran pada interaksi pengguna menggunakan salah satu
Metode actionSendBroadcast
:
Berikan salah satu hal berikut di actionSendBroadcast
:
- Tindakan string
ComponentName
- Intent
- Class
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Melakukan tindakan kustom
Sebagai ganti meluncurkan target tertentu, Glance dapat menggunakan tindakan lambda atau
actionRunCallback
untuk melakukan tindakan, seperti mengupdate UI atau status di
interaksi pengguna.
Menjalankan tindakan lambda
Anda dapat menggunakan fungsi lambda sebagai callback untuk interaksi UI.
Misalnya, teruskan fungsi lambda ke GlanceModifier.clickable
pengubah:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Atau, teruskan ke parameter onClick
pada composable yang mendukungnya:
Button( text = "Submit", onClick = { submitData() } )
Menjalankan ActionCallback
Atau, gunakan metode actionRunCallback
untuk melakukan tindakan pada
interaksi pengguna. Untuk melakukannya, sediakan implementasi kustom dari
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 } }
Saat pengguna mengklik, metode suspend onAction
yang disediakan
ActionCallback
dipanggil untuk mengeksekusi logika yang ditentukan (yaitu, meminta
memperbarui data).
Untuk mengupdate widget setelah tindakan dilakukan, buat instance baru dan
panggil update
(..). Untuk detail selengkapnya, lihat Mengelola status GlanceAppWidget
bagian.
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) } }
Memberikan parameter untuk tindakan
Untuk memberikan informasi tambahan pada tindakan, gunakan ActionParameters
API untuk membuat pasangan nilai kunci yang diketik. Misalnya, untuk mendefinisikan klik
tujuan:
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() } } }
Di bawahnya, parameter disertakan dalam intent yang digunakan untuk meluncurkan aktivitas Anda, sehingga Aktivitas target dapat mengambilnya.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Parameter juga diberikan ke ActionCallback
. Gunakan atribut
Parameters.Key
untuk mengambil nilai:
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 // ... } }