Zaman geçtikçe değişen içeriğe sahip karolar oluşturun.
Zaman çizelgeleriyle çalışma
Zaman çizelgesi, her biri belirli bir zaman aralığında gösterilen bir düzen içeren bir veya daha fazla TimelineEntry
örneğinden oluşur. Tüm kutucukların zaman çizelgesi olmalıdır.
Tek girişli karolar
Bir karo genellikle tek bir TimelineEntry
ile açıklanabilir. Düzen sabittir ve yalnızca düzenin içindeki bilgiler değişir. Örneğin, fitness durumunuzu gösteren bir karoda her zaman aynı ilerleme düzeni gösterilir. Ancak, bu düzeni farklı değerler gösterecek şekilde ayarlayabilirsiniz. Bu gibi durumlarda, içeriğin ne zaman değişebileceğini önceden bilemezsiniz.
Aşağıdaki tek bir TimelineEntry
içeren blok örneğini inceleyin:
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 bir geçerlilik süresi tanımlayabilir. Bu sayede, uygulamanın yeni bir Kart aktarmasına gerek kalmadan karonun düzenini bilinen bir zamanda değiştirebilir.
Standart örnek, zaman çizelgesinde yaklaşan etkinliklerin listesi bulunan bir gündem kutusudur. Yaklaşan her etkinlik, ne zaman gösterileceğini belirten bir geçerlilik süresi içerir.
Karolar API'si çakışan geçerlilik sürelerine izin verir. Burada, kalan en kısa süreli ekran gösterilen süredir. Aynı anda yalnızca bir etkinlik görüntülenir.
Geliştiriciler, varsayılan bir yedek giriş sağlayabilir. Örneğin, ajanda blokunda, aşağıdaki kod örneğinde gösterildiği gibi başka bir zaman çizelgesi girişi geçerli değilse bu öğe kullanılır ve sonsuz geçerlilik süresine sahip bir karo bulunabilir:
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
Karolarda gösterilen bilgilerin süresi bir süre sonra dolabilir. Örneğin, gün boyunca aynı sıcaklığı gösteren bir hava durumu kutusu doğru değildir.
Süresi dolan verilerle başa çıkmak için karonun oluşturulduğu anda karonun ne kadar süre geçerli olduğunu belirten bir yenilenme aralığı ayarlayın. Hava durumu kutusu örneğinde, aşağıdaki kod örneğinde gösterildiği gibi içeriğini saatte bir güncelleyebilirsiniz:
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 yenileme aralığı belirlediğinizde, sistem aralık sona erdikten kısa bir süre sonra onTileRequest()
aracını çağırır. Yenileme aralığı ayarlamazsanız sistem onTileRequest()
değerini çağırmaz.
Harici bir etkinlik nedeniyle de karonun süresi dolabilir. Örneğin, bir kullanıcı bir toplantıyı takviminden kaldırabilir ve kutu yenilenmediyse karoda yine de silinen toplantı görünür. Bu durumda, aşağıdaki kod örneğinde gösterildiği gibi uygulama kodunuzun herhangi bir yerinden yenileme isteğinde bulunun:
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
Kart 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 takvimindeki bir sonraki etkinlikle ilgiliyse) bir 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 bir süre içinde hesaplayabiliyorsa (ör. gün doğumu karosundaki bir resmin konumunu güncellemek)
onTileRequest()
özelliğini kullanın.Bu, özellikle tüm görüntüleri önceden oluşturmanız gerektiğinde yararlı olur. Gelecekte yeni bir görüntü oluşturmanız gerekirse
setFreshnessIntervalMillis()
numaralı telefonu arayın.Arka planda tekrar tekrar daha yoğun çalışmalar (ör. hava durumu verileri için anket yapma) yapıyorsanız
WorkManager
özelliğini kullanın ve güncellemeleri karonunuza aktarın.Güncelleme, ışıkların açılması, e-posta alınması veya bir not güncellenmesi gibi harici bir etkinlik nedeniyle yapılmışsa uygulamanızı tekrar etkin hale getirmek için bir Firebase Cloud Messaging (FCM) mesajı gönderin, ardından güncellemeleri karoya aktarın.
Parça veri senkronizasyonu 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österin. Aksi takdirde, önbelleğe alınmış bir yerel değer gösterin.
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken gösterilir
- Karolarla etkileşimde bulunma