Kullanıcı etkileşimini işleme

Glance, Action sınıfları aracılığıyla kullanıcı etkileşimini yönetmeyi kolaylaştırır. Bir Bakışta Action sınıfları, kullanıcıların gerçekleştirebileceği işlemleri tanımlar. Siz de gerçekleştirilen işlem. Action işlemini istediğiniz bileşenini GlanceModifier.clickable yöntemiyle değiştirin.

Uygulama widget'ları uzak bir işlemde bulunur, bu nedenle işlemler oluşturma sırasında tanımlanır yürütülmesi uzak süreçte gerçekleşiyor. Yerel RemoteViews ürününde, bu işlem PendingIntents aracılığıyla yapılır.

Bu sayfada aşağıdaki işlemler açıklanmaktadır:

ziyaret edin.

Etkinlik başlatma

Kullanıcı etkileşimiyle ilgili bir etkinlik başlatmak için actionStartActivity işlevini kullanarak Button veya başka bir composable'a GlanceModifier.clickable(..) değiştiricisi.

actionStartActivity içinde aşağıdakilerden birini sağlayın:

Bir Bakışta, işlemi sağlanan hedefle bir PendingIntent diline çevirir ve parametreleridir. Aşağıdaki örnekte, NavigationActivity, bir Kullanıcı düğmeyi tıkladığında:

@Composable
fun MyContent() {
    // ..
    Button(
        text = "Go Home",
        onClick = actionStartActivity<MyActivity>()
    )
}

Hizmet başlatma

Etkinlik başlatmaya benzer şekilde, kullanıcı etkileşimiyle ilgili olarak actionStartService yöntemlerinden birini seçin.

actionStartService içinde aşağıdakilerden birini sağlayın:

@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ğıdakilerden birini kullanarak kullanıcı etkileşimi olduğunda bir yayın etkinliği gönderin: actionSendBroadcast yöntemleri:

actionSendBroadcast içinde aşağıdakilerden birini sağlayın:

@Composable
fun MyButton() {
    // ..
    Button(
        text = "Send",
        onClick = actionSendBroadcast<MyReceiver>()
    )
}

Özel işlemler gerçekleştirme

Glance, belirli bir hedefi lanse etmek yerine bir lambda eylemi veya Kullanıcı arayüzünü veya açık durumu güncellemek gibi bir işlem gerçekleştirmek için actionRunCallback kullanıcı etkileşimi.

Lambda işlemlerini çalıştır

Lambda işlevlerini, kullanıcı arayüzü etkileşimlerine geri çağırma olarak kullanabilirsiniz.

Örneğin, lambda işlevini GlanceModifier.clickable öğesine geçirin. değiştirici:

Text(
    text = "Submit",
    modifier = GlanceModifier.clickable {
        submitData()
    }
)

Alternatif olarak, destekleyen composable'larda onClick parametresine de iletebilirsiniz:

Button(
    text = "Submit",
    onClick = {
        submitData()
    }
)

ActionCallback Çalıştır

Alternatif olarak şunun üzerinde işlem gerçekleştirmek için actionRunCallback yöntemlerini kullanabilirsiniz: kullanıcı etkileşimi. Bunu yapmak için, 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
    }
}

Kullanıcı tıkladığında, sağlanan suspend onAction yöntemi ActionCallback çağrılır, tanımlanan mantığı yürütülür (ör. verileri yenilemenizi sağlar.

İşlem gerçekleştirildikten sonra widget'ı güncellemek için yeni bir örnek oluşturun ve update(..) çağrısı yapın. Daha fazla bilgi için GlanceAppWidget durumunu yönetme başlıklı makaleyi inceleyin. bölümüne ekleyin.

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şlemle ilgili ek bilgi sağlamak için ActionParameters bağlantısını kullanın. Yazılmış bir anahtar/değer çifti oluşturma API'sini kullanın. Örneğin, tıklanan hedef:

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() }
    }
}

Parametreler etkinliği oluşturarak hedef etkinliğin almasına olanak tanır.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val destination = intent.extras?.getString(KEY_DESTINATION) ?: return
        // ...
    }
}

Parametreler, ActionCallback için de sağlanır. Tanımlanan Değeri almak için Parameters.Key:

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
        // ...
    }
}