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.
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:
- Veri senkronizasyonu programlayın.
- 1-2 saniyelik bir zamanlayıcı başlatın.
- 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.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Düzenli güncellemelerin etkisini en aza indirme
- Konuma arka planda erişme
- WorkManager'ı kullanmaya başlama