Glance, Action
sınıfları aracılığıyla kullanıcı etkileşimi yönetmeyi kolaylaştırır. Glance'ın Action
sınıfları kullanıcının yapabileceği işlemleri tanımlar ve siz de işleme yanıt olarak gerçekleştirilen işlemi belirtebilirsiniz. GlanceModifier.clickable
yöntemiyle herhangi bir bileşene Action
uygulayabilirsiniz.
Uygulama widget'ları uzak bir işlemde bulunur. Bu nedenle, işlemler oluşturma zamanında tanımlanır ve yürütme, uzak işlemde gerçekleşir. Yerel RemoteViews
üzerinde bu işlem PendingIntents
aracılığıyla gerçekleştirilir.
Bu sayfada aşağıdaki işlemler açıklanmaktadır:
Etkinlik başlatma
Kullanıcı etkileşiminde bir etkinlik başlatmak için GlanceModifier.clickable
(..) değiştiricisi aracılığıyla actionStartActivity
işlevini bir Button
öğesine veya başka bir besteyle sağlayın.
actionStartActivity
alanında aşağıdakilerden birini sağlayın:
- Hedef etkinlik sınıfı
ComponentName
- Niyet
Glance, sağlanan hedef ve parametrelerle işlemi bir PendingIntent
öğesine dönüştürür. Aşağıdaki örnekte, bir kullanıcı düğmeyi tıkladığında NavigationActivity
başlatılır:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Hizmet başlatma
Bir etkinlik başlatmaya benzer şekilde, actionStartService
yöntemlerinden birini kullanarak kullanıcı etkileşiminde bir hizmet başlatın.
actionStartService
alanında aşağıdakilerden birini sağlayın:
- Hedef etkinlik sınıfı
ComponentName
- Amaç
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Yayın etkinliği gönder
Aşağıdaki yöntemlerden birini kullanarak kullanıcı etkileşiminde yayın etkinliği gönderin:
actionSendBroadcast
actionSendBroadcast
alanında aşağıdakilerden birini sağlayın:
- Dize işlemi
ComponentName
- Amaç
BroadcastReceiver
sınıf
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Özel işlemler gerçekleştirme
Glance, belirli bir hedefi başlatmak yerine, kullanıcı arayüzünü veya kullanıcı etkileşiminin durumunu güncellemek gibi bir işlem gerçekleştirmek için lambda işlemi veya actionRunCallback
kullanabilir.
Lambda işlemlerini çalıştır
Lambda işlevlerini, kullanıcı arayüzü etkileşimlerine geri çağırmalar olarak kullanabilirsiniz.
Örneğin, lambda işlevini GlanceModifier.clickable
değiştiriciye iletin:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Alternatif olarak, bunu destekleyen birleştirilebilir dosyalardaki onClick
parametresine iletin:
Button( text = "Submit", onClick = { submitData() } )
ActionCallback Çalıştır
Alternatif olarak, kullanıcı etkileşimi üzerinde bir işlem gerçekleştirmek için actionRunCallback
yöntemlerini kullanabilirsiniz. Bunu yapmak için özel bir ActionCallback
uygulaması sağlayın:
@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 } }
Kullanıcı tıklamasında, sağlanan ActionCallback
için suspend onAction
yöntemi çağrılır ve tanımlanan mantığı yürütür (yani verileri yenileme isteğinde bulunur).
İşlem gerçekleştirildikten sonra widget'ı güncellemek için yeni bir örnek oluşturun ve update
(..) komutunu çağırın. Daha ayrıntılı bilgi için GlanceAppWidget durumunu yönetme bölümüne bakın.
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) } }
İşlemlere parametre sağlama
Bir işleme ek bilgi sağlamak için ActionParameters
API'yi kullanarak yazılan bir anahtar/değer çifti oluşturun. Örneğin, tıklanan hedefi tanımlamak için:
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() } } }
Altta, parametreler etkinliği başlatmak için kullanılan amaca dahil edilir ve böylece hedef Etkinlik etkinliği alabilir.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Parametreler ActionCallback
öğesine de sağlanır. Değeri almak için tanımlı Parameters.Key
özelliğini kullanın:
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 // ... } }