Karolarda düzenli güncellemeleri göster

Zaman geçtikçe değişen içeriğin bulunduğu karolar oluşturun.

Zaman çizelgeleriyle çalışma

Zaman çizelgesi bir veya daha fazla öğeden oluşur TimelineEntry Her biri, belirli bir işlem sırasında görüntülenen bir düzeni anlamına gelir. Tüm karoların zaman çizelgesi gereklidir.

Karo zaman çizelgesi şeması

Tek girişli karolar

Bir karo genellikle tek bir TimelineEntry ile açıklanabilir. Düzen ve yalnızca düzenin içindeki bilgiler değişir. Örneğin, bir karo gün içinde form koruma ilerleme durumunuzu gösteren, her zaman aynı ilerleme durumunu gösterir farklı değerler gösterecek şekilde ayarlayabilirsiniz. Bu durumlarda, içeriğin ne zaman değişeceğini önceden bilemezsiniz.

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

Kotlin

override fun onTileRequest(
    requestParams: 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(...)
        ).build()
    return Futures.immediateFuture(tile)
}

Java

@Override
protected ListenableFuture<Tile> onTileRequest(
       @NonNull TileRequest requestParams
) {
   Tile tile = new 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(...)
       ).build();
   return Futures.immediateFuture(tile);
}

Zaman sınırlamalı zaman çizelgesi girişleri

TimelineEntry, isteğe bağlı olarak geçerlilik dönemini tanımlayabilir ve böylece karoların uygulamanın yeni bir karo itmesi gerekmeden bilinen bir zamanda düzenini değiştirebilir.

Standart örnek, zaman çizelgesinde yaklaşan etkinlikler. Yaklaşan her etkinlik için bir geçerlilik dönemi bulunur. Bu süre, bir şablondur.

Karolar API'si, çakışan geçerlilik dönemlerine olanak tanır. Bu dönemlerde kalan en kısa süre gösterilen zamandır. Bir seferde yalnızca tek bir etkinlik gerekir.

Geliştiriciler varsayılan bir yedek giriş sağlayabilir. Örneğin, gündem kutusu sonsuz geçerlilik dönemine sahip bir karo olabilir. aşağıdaki kod örneğinde gösterildiği gibi zaman çizelgesi girişi geçerlidir:

Kotlin

public override fun onTileRequest(
    requestParams: 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(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(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.
                TimeInterval.Builder()
                    .setEndMillis(meeting.dateTimeMillis).build()
            ).build()
        )
    }

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

Java

@Override
protected ListenableFuture<Tile> onTileRequest(
       @NonNull RequestBuilders.TileRequest requestParams
) {
   Timeline.Builder timeline = new Timeline.Builder();
   // Add fallback "no meetings" entry
   // Use the version of TimelineEntry that's in androidx.wear.protolayout.
   timeline.addTimelineEntry(new TimelineEntry.Builder().setLayout(getNoMeetingsLayout()).build());
   // Retrieve a list of scheduled meetings
   List<Meeting> meetings = MeetingsRepo.getMeetings();
   // Add a timeline entry for each meeting
   for(Meeting meeting : meetings) {
        timeline.addTimelineEntry(new 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.
                new TimeInterval.builder()
                    .setEndMillis(meeting.getDateTimeMillis()).build()
            ).build()
        );
    }

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

Kart yenileme

Kutularda gösterilen bilgilerin süresi bir süre sonra dolabilir. Örneğin, hava durumu gün boyunca aynı sıcaklığı gösteren kutu doğru değil.

Süresi dolan verilerle başa çıkmak için, yeni bir karonun ne kadar süre geçerli olduğunu belirten bir öğedir. Hava durumu örneğinde öğesinin içeriğini aşağıdaki kodda gösterildiği gibi saatte bir güncelleyebilirsiniz. örnek:

Kotlin

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

Java

@Override
protected ListenableFuture<Tile> onTileRequest(
       @NonNull TileRequest requestParams
) {
    return Futures.immediateFuture(new Tile.Builder()
        .setResourcesVersion(RESOURCES_VERSION)
        .setFreshnessIntervalMillis(60 * 60 * 1000) // 60 minutes
        .setTimeline(Timeline.fromLayoutElement(
            getWeatherLayout())
        ).build());
}

Bir yenilenme aralığı ayarladığınızda sistem, onTileRequest() ara sona erdikten kısa bir süre sonra. Yenilik aralığı ayarlamazsanız sistem onTileRequest() adlı kişiyi çağırmıyor.

Harici bir etkinlik nedeniyle de karonun süresi dolabilir. Örneğin, bir kullanıcı bir toplantıyı takvimlerinden kaldırmalarını ve karo yenilenmemişse silinen toplantı gösterilir. Bu durumda, aşağıdaki kod örneğinde gösterildiği gibi, uygulama kodunuzdaki herhangi bir yeri seçin:

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çin

Kutu güncellemelerinizi nasıl yapılandıracağınızı belirlemek için aşağıdaki en iyi uygulamalardan yararlanın:

  • Güncelleme tahmin edilebilirse (örneğin, Kullanıcının takvimi: Zaman çizelgesi kullanın.
  • Platform verilerini getirirken sistemin güncellenebilmesi için veri bağlamayı kullanın. otomatik olarak ekler.
  • Güncelleme, cihazda kısa bir süre içinde hesaplanabiliyorsa (örneğin, bir gün doğumu karosundaki resmin konumunu güncellemek gibi onTileRequest().

    Bu, özellikle tüm resimleri önceden oluşturmanız gerektiğinde gerekir. İleride yeni bir resim oluşturmanız gerekirse setFreshnessIntervalMillis().

  • Anket gibi arka planda daha yoğun çalışmalar yapıyorsanız hava durumu verileri için WorkManager kullanın ve güncellemeleri karonuza aktarın.

  • Güncelleme, ışıklar gibi harici bir olaya yanıt olarak gerçekleştiriliyorsa etkinleştirme, e-posta alma veya not güncelleme. Firebase Cloud Uygulamanızı tekrar etkinleştirmek için mesaj (FCM) mesajı gönderin, ardından güncellemeleri aktarın dokunun.

  • Parça veri senkronizasyon işlemi pahalıysa aşağıdakileri yapın:

    1. Veri senkronizasyonu programlayın.
    2. 1-2 saniyelik bir zamanlayıcı başlatın.
    3. Süre dolmadan uzak bir veri kaynağından güncelleme alırsanız veri senkronizasyonundan güncellenen değeri gösterir. Aksi takdirde, önbelleğe alınmış bir yerel değer.
ziyaret edin. ziyaret edin.