Glance, Action sınıflarını kullanarak kullanıcı etkileşimini kolaylaştırır. Glance'in
Action sınıfları, kullanıcının gerçekleştirebileceği işlemleri tanımlar. İşleme yanıt olarak gerçekleştirilen işlemi belirtebilirsiniz. GlanceModifier.clickable yöntemini kullanarak herhangi bir bileşene Action uygulayabilirsiniz.
Uygulama widget'ları uzak bir süreçte bulunur. Bu nedenle, işlemler oluşturma sırasında tanımlanır ve yürütme uzak süreçte gerçekleşir. Yerel RemoteViews'da bu işlem PendingIntents kullanılarak yapılır.
Bu sayfada aşağıdaki işlemler açıklanmaktadır:
Etkinlik başlatma
Kullanıcı etkileşimiyle bir etkinlik başlatmak için GlanceModifier.clickable değiştiricisini kullanarak Button veya diğer composable'lara actionStartActivity işlevini sağlayın.
actionStartActivity içinde aşağıdakilerden birini sağlayın:
- Hedef etkinlik sınıfı
ComponentName- İntent
Glance, İşlemi sağlanan hedef ve parametrelerle PendingIntent olarak çevirir. Aşağıdaki örnekte, 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
Etkinlik başlatmaya benzer şekilde, actionStartService yöntemlerinden birini kullanarak kullanıcı etkileşimiyle hizmet başlatın.
actionStartService içinde 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önderme
Aşağıdaki actionSendBroadcast yöntemlerden birini kullanarak kullanıcı etkileşimiyle ilgili bir yayın etkinliği gönderin:
actionSendBroadcast içinde aşağıdakilerden birini sağlayın:
- Dize işlemi
ComponentName- Amaç
BroadcastReceiversı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ı etkileşimi sırasında kullanıcı arayüzünü veya durumu güncelleme gibi bir işlemi gerçekleştirmek için lambda işlemi ya da actionRunCallback kullanabilir.
Lambda işlemlerini çalıştırma
Lambda işlevlerini, kullanıcı arayüzü etkileşimlerine geri çağırma olarak kullanabilirsiniz.
Örneğin, lambda işlevini GlanceModifier.clickable
değiştiricisine iletin:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Alternatif olarak, bunu destekleyen composable'lardaki onClick parametresine iletebilirsiniz:
Button( text = "Submit", onClick = { submitData() } )
Run ActionCallback
Alternatif olarak, kullanıcı etkileşimi üzerinde işlem gerçekleştirmek için actionRunCallback yöntemlerini kullanın. Bunu yapmak için ActionCallback öğesinin özel bir uygulamasını 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ıkladığında, sağlanan suspend onAction yöntemi çağrılır ve tanımlanan mantık (ör. verilerin yenilenmesi isteğinde bulunma) yürütülür.ActionCallback
İşlem gerçekleştirildikten sonra widget'ı güncellemek için yeni bir örnek oluşturun ve update(..) işlevini çağırın. Daha fazla 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 türü belirlenmiş 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() } } }
Alt tarafta, parametreler etkinliği başlatmak için kullanılan amaçta yer alır ve hedef etkinliğin bunları almasına olanak tanır.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Parametreler ActionCallback ile de paylaşılır. Değeri almak için tanımlanmış
Parameters.Key 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 // ... } }