Karolarda düzenli güncellemeleri göster

Zaman içinde değişen içeriklere sahip kartlar oluşturun.

Zaman çizelgeleriyle çalışma

Zaman çizelgesi, her biri belirli bir zaman aralığında görüntülenen bir düzen içeren bir veya daha fazla TimelineEntry örneğinden oluşur. Tüm kartlarda zaman çizelgesi olmalıdır.

Kart zaman çizelgesi diyagramı

Tek girişli karolar

Bir karo genellikle tek bir TimelineEntry ile tanımlanabilir. Düzen sabit kalır ve yalnızca düzen içindeki bilgiler değişir. Örneğin, günün fitness ilerlemenizi gösteren bir kart her zaman aynı ilerleme düzenini gösterir ancak bu düzeni farklı değerler gösterecek şekilde ayarlayabilirsiniz. Bu durumlarda, içeriğin ne zaman değişebileceğini önceden bilemezsiniz.

Tek bir TimelineEntry içeren karo örneğini aşağıda bulabilirsiniz:

override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile?> {
    val tile =
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            // We add a single timeline entry when our layout is fixed, and
            // we don't know in advance when its contents might change.
            .setTileTimeline(Timeline.fromLayoutElement(simpleLayout(this)))
            .build()
    return Futures.immediateFuture(tile)
}

Zamana bağlı zaman çizelgesi girişleri

TimelineEntry, isteğe bağlı olarak bir geçerlilik süresi tanımlayabilir. Bu sayede, uygulamanın yeni bir kart yayınlamasını gerektirmeden kartın düzeni bilinen bir zamanda değiştirilebilir.

Kanonik örnek, zaman çizelgesinde yaklaşan etkinliklerin listesini içeren bir gündem karosudur. Yaklaşan her etkinlik, ne zaman gösterileceğini belirten bir geçerlilik süresi içerir.

Kart API'si, geçerlilik sürelerinin çakışmalarına izin verir. Bu durumda, geçerlilik süresi en kısa olan ekran gösterilir. Aynı anda yalnızca bir etkinlik gösterilir.

Geliştiriciler varsayılan yedek giriş sağlayabilir. Örneğin, gündem kartında sonsuz geçerlilik süresi olan bir kart olabilir. Bu kart, aşağıdaki kod örneğinde gösterildiği gibi başka zaman çizelgesi girişi geçerli değilse kullanılır:

override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile?> {
    val timeline = Timeline.Builder()

    // Add fallback "no meetings" entry
    // Use the version of TimelineEntry that's in androidx.wear.protolayout.
    timeline.addTimelineEntry(
        TimelineBuilders.TimelineEntry.Builder().setLayout(getNoMeetingsLayout()).build()
    )

    // Retrieve a list of scheduled meetings
    val meetings = MeetingsRepo.getMeetings()
    // Add a timeline entry for each meeting
    meetings.forEach { meeting ->
        timeline.addTimelineEntry(
            TimelineBuilders.TimelineEntry.Builder()
                .setLayout(getMeetingLayout(meeting))
                .setValidity(
                    // The tile should disappear when the meeting begins
                    // Use the version of TimeInterval that's in
                    // androidx.wear.protolayout.
                    TimelineBuilders.TimeInterval.Builder()
                        .setEndMillis(meeting.dateTimeMillis)
                        .build()
                )
                .build()
        )
    }

    val tile =
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setTileTimeline(timeline.build())
            .build()
    return Futures.immediateFuture(tile)
}

Kartları yenileme

Kartta gösterilen bilgilerin süresi bir süre sonra dolabilir. Örneğin, gün boyunca aynı sıcaklığı gösteren bir hava durumu kartının doğruluğu şüphelidir.

Süresi dolan verilerle başa çıkmak için karo oluştururken karonun ne kadar süreyle geçerli olacağını belirten bir güncellik aralığı ayarlayın. Hava durumu kartında, içeriğini aşağıdaki kod örneğinde gösterildiği gibi her saat güncelleyebilirsiniz:

override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile?> =
    Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setFreshnessIntervalMillis(60 * 60 * 1000) // 60 minutes
            .setTileTimeline(Timeline.fromLayoutElement(getWeatherLayout()))
            .build()
    )

Bir tazelik aralığı belirlediğinizde sistem, aralık sona erdikten kısa bir süre sonra onTileRequest() işlevini çağırır. Yenilik aralığı ayarlamazsanız sistem onTileRequest() işlevini çağırmaz.

Kartların süresi harici bir etkinlik nedeniyle de dolabilir. Örneğin, bir kullanıcı takviminden bir toplantıyı kaldırabilir. Kart yenilenmemişse kartta silinen toplantı gösterilmeye devam eder. Bu durumda, aşağıdaki kod örneğinde gösterildiği gibi uygulama kodunuzun herhangi bir yerinden yenileme isteyin:

Kotlin

fun eventDeletedCallback() {
     TileService.getUpdater(context)
             .requestUpdate(MyTileService::class.java)
}

Java

public void eventDeletedCallback() {
   TileService.getUpdater(context)
           .requestUpdate(MyTileService.class);
}

Güncelleme iş akışı seçme

Kart güncellemelerinizi nasıl yapılandıracağınızı belirlemek için aşağıdaki en iyi uygulamaları kullanın:

  • Güncelleme tahmin edilebilirse (ör. kullanıcının takvimindeki bir sonraki etkinlik içinse) zaman çizelgesi kullanın.
  • Platform verilerini getirirken sistemin verileri otomatik olarak güncellemesi için veri bağlamayı kullanın.
  • Güncelleme cihaz üzerinde kısa sürede hesaplanabiliyorsa (ör. gündoğumu karosundaki bir resmin konumunu güncelleme) onTileRequest() değerini kullanın.

    Bu seçenek, özellikle tüm resimleri önceden oluşturmanız gerektiğinde yararlıdır. Gelecekte yeni bir resim oluşturmanız gerekirse setFreshnessIntervalMillis() numaralı telefonu arayın.

  • Hava durumu verileri için anket yapmak gibi daha yoğun arka plan çalışmaları tekrar tekrar yapıyorsanız WorkManager simgesini kullanın ve güncellemeleri kartınıza gönderin.

  • Güncelleme, harici bir etkinliğe (ör. ışıkların açılması, e-posta alınması veya notun güncellenmesi) yanıt olarak gönderiliyorsa uygulamanızı tekrar etkinleştirmek için bir Firebase Cloud Messaging (FCM) mesajı gönderin, ardından güncellemeleri kartlara gönderin.

  • Kart verileri senkronizasyon işlemi pahalı olabilirse aşağıdakileri yapın:

    1. Veri senkronizasyonu planlayın.
    2. 1-2 saniyelik bir zamanlayıcı başlatın.
    3. Zaman dolmadan önce uzak bir veri kaynağından güncelleme alırsanız veri senkronizasyonundan güncellenmiş değeri gösterin. Aksi takdirde, önbelleğe alınmış yerel bir değer gösterilir.