Bu kılavuzda, uygulamanızı her zaman açık tutma, güç durumu geçişlerine tepki verme ve pilden tasarruf ederken iyi bir kullanıcı deneyimi sunmak için uygulama davranışını yönetme konuları açıklanmaktadır.
Bir uygulamanın sürekli görünür olması pil ömrünü önemli ölçüde etkiler. Bu nedenle, bu özelliği eklerken güç tüketimini göz önünde bulundurun.
Temel Kavramlar
Wear OS uygulaması tam ekranda gösterildiğinde iki güç durumundan birinde olur:
- Etkileşimli: Ekranın tam parlaklıkta olduğu ve kullanıcı etkileşimine tam olarak izin veren yüksek güç durumu.
- Ortam: Ekranın güç tasarrufu için karartıldığı düşük güç durumu. Bu durumda, uygulamanızın kullanıcı arayüzü ekranın tamamını kaplamaya devam eder ancak sistem, bulanıklaştırma veya saat gibi yer paylaşımı içerikleri göstererek görünümünü değiştirebilir. Bu özellik Ambiyans Modu olarak da adlandırılır.
Bu durumlar arasındaki geçişi işletim sistemi kontrol eder.
Sürekli Açık Uygulama, içeriği hem Etkileşimli hem de Ambiyans durumunda gösteren bir uygulamadır.
Her zaman açık olan bir uygulama, cihaz düşük güçteki Ambiyans durumundayken kendi kullanıcı arayüzünü göstermeye devam ettiğinde ambiactive modunda olduğu açıklanır.
Sistem geçişleri ve varsayılan davranış
Bir uygulama ön plandayken sistem, kullanıcı etkin olmaması nedeniyle tetiklenen iki zaman aşımına göre güç durumu geçişlerini yönetir.
- Zaman aşımı 1: Etkileşimli durumdan Ortam durumuna: Kullanıcı bir süre işlem yapmadığında cihaz Ortam durumuna geçer.
- Zaman aşımı #2: Kadranına dönme: Belirli bir süre işlem yapılmadığında sistem, mevcut uygulamayı gizleyip kadranı gösterebilir.
Sistem, Ambient durumuna ilk geçişi yaptıktan hemen sonra varsayılan davranış, Wear OS sürümüne ve uygulamanızın yapılandırmasına bağlıdır:
- Wear OS 5 ve önceki sürümlerde sistem, duraklatılmış uygulamanızın bulanık bir ekran görüntüsünü gösterir ve bu ekran görüntüsünün üzerine saat bilgisi eklenir. Bu durum, aşağıdaki akış şemasında "AOD Lite" düğümüyle gösterilir.
- Wear OS 6 ve sonraki sürümlerde, SDK 36 veya daha yeni bir sürümü hedefleyen uygulamalar her zaman açık olarak kabul edilir. Ekran karartılır ancak uygulama çalışmaya ve görünür kalmaya devam eder. (Güncellemeler dakikada bir kez kadar seyrek olabilir.) Bu durum, aşağıdaki akış şemasında "Global AOD" düğümüyle gösterilir.
Ambiyans durumu için davranışı özelleştirme
Varsayılan sistem davranışından bağımsız olarak, tüm Wear OS sürümlerinde Ambient durumundayken uygulamanızın görünümünü veya davranışını özelleştirebilirsiniz. Bunun için Wear OS'te Jetpack Compose'daki durum geçişlerini gözlemlemek üzere LocalAmbientModeManager kullanın. Bu durum, aşağıdaki akış şemasında "Ambiactive Mode" düğümüyle gösterilir.
Ambiyans durumunu gözlemleme
Wear OS'te Jetpack Compose'da ambiyans modu etkinliklerine tepki vermek için:
Sistemin ortam modu durumundaki değişiklikleri gözlemlemek için
LocalAmbientModeManagersimgesini kullanın ve composable'larınızı buna göre ayarlayın. BileşeniniziAmbientMode.Ambientdurumunda daha düşük güç moduna ayarlanacak veAmbientMode.Interactivedurumunda tam etkileşimli ekrana geri yüklenecek şekilde yapılandırın.// In a production application, the AmbientModeManager should be instantiated and provided at // the highest level of the Compose hierarchy (typically in the host Activity's setContent // block) using a CompositionLocalProvider. This ensures proper lifecycle management and // broad accessibility. // For this self-contained demo, AmbientModeManager is created and provided locally: val activityAmbientModeManager = rememberAmbientModeManager() CompositionLocalProvider(LocalAmbientModeManager provides activityAmbientModeManager) { val ambientModeManager = LocalAmbientModeManager.current val ambientMode = ambientModeManager?.currentAmbientMode if (ambientModeManager != null) { ambientModeManager.AmbientTickEffect { // While device is in ambient mode, update properties every minute or so // ... } } // ... val ambientModeName = when (ambientMode) { is AmbientMode.Interactive -> "Interactive" is AmbientMode.Ambient -> "Ambient" else -> "Unknown" } Text(text = "$ambientModeName Mode") // ... }
Jetpack Compose kullanan geliştiriciler, bu kalıbın uygulanmasını basitleştiren LocalAmbientModeManager öğesini kullanabilir.
Ortam davranışı akış şeması
Aşağıdaki akış şeması, sistemin cihazın Wear OS sürümüne, uygulamanızın targetSdkVersion özelliğine ve AmbientLifecycleCallback özelliğini uygulayıp uygulamadığına göre ortam davranışını nasıl belirlediğini gösterir.
Ekranın açık kalma süresini kontrol etme
Aşağıdaki bölümlerde, uygulamanızın ekranda kalma süresini nasıl yöneteceğiniz açıklanmaktadır.
Devam eden etkinlik veya canlı güncelleme ile kadran ekranına dönmeyi engelleme
Ortam durumunda belirli bir süre geçtikten sonra (2. zaman aşımı) sistem genellikle saat yüzüne döner. Kullanıcı, sistem ayarlarında zaman aşımı süresini yapılandırabilir. Kullanıcının egzersiz takibi gibi belirli kullanım alanlarında uygulamanın daha uzun süre görünür kalması gerekebilir.
Wear OS 5 ve sonraki sürümlerde OngoingActivity uygulayarak bunu önleyebilirsiniz. Uygulamanız, devam eden bir kullanıcı göreviyle (ör. antrenman oturumu) ilgili bilgiler gösteriyorsa görev sona erene kadar uygulamanızın görünür kalmasını sağlamak için Ongoing Activity API'yi kullanabilirsiniz. Kullanıcılar manuel olarak saat yüzüne dönerse devam eden etkinlik göstergesi, uygulamanıza tek dokunuşla dönmelerini sağlar.
Alternatif olarak, Wear OS 7 ve sonraki sürümlerde, Devam Eden Etkinlik yerine Canlı Güncelleme kullanabilirsiniz. Geriye dönük uyumluluk için Wear OS 6 veya önceki sürümlerin yüklü olduğu cihazlarda Devam Eden Etkinlik'i desteklemeye devam edin.
Bunu uygulamak için devam eden bildirimin dokunma intent'i, aşağıdaki kod snippet'inde gösterildiği gibi her zaman açık etkinliğinizi işaret etmelidir:
val activityIntent = Intent(this, AlwaysOnActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_SINGLE_TOP } val pendingIntent = PendingIntent.getActivity( this, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) // ... // ... .setOngoing(true) // ... val ongoingActivity = OngoingActivity.Builder(applicationContext, NOTIFICATION_ID, notificationBuilder) // ... // ... .setTouchIntent(pendingIntent) .build() ongoingActivity.apply(applicationContext) val notification = notificationBuilder.build()
Ekranı açık tutma ve Ambiyans durumunu önleme
Nadir durumlarda, cihazın Ambiyans durumuna girmesini tamamen engellemeniz gerekebilir. Yani 1. zaman aşımını önlemek için. Bunu yapmak için keepScreenOn değiştiricisini kullanabilirsiniz. Bu işlev, cihazı Etkileşimli durumda tutarak uyandırma kilidi olarak çalışır. Bu özelliği kullanırken çok dikkatli olun. Pil ömrünü ciddi şekilde etkiler.
Ambiyans modu için öneriler
En iyi kullanıcı deneyimini sunmak ve Ortam modunda güç tasarrufu sağlamak için aşağıdaki tasarım kurallarına uyun. Bu öneriler, yanıltıcı bilgileri önleyerek ve görsel karmaşayı azaltarak net bir kullanıcı deneyimine öncelik verirken aynı zamanda görüntüleme gücünü de optimize eder.
- Görsel kalabalığı azaltın ve gücü görüntüleyin. Temiz ve minimalist bir kullanıcı arayüzü, uygulamada düşük güç durumu olduğunu kullanıcıya bildirir ve parlak pikselleri sınırlayarak önemli ölçüde pil tasarrufu sağlar.
- Ekranın en az% 85'ini siyah tutun.
- Yalnızca en kritik bilgileri gösterin ve ikincil ayrıntıları etkileşimli ekrana taşıyın.
- Büyük simgeler veya düğmeler için düz dolgular yerine ana hatlar kullanın.
- Düz renkli büyük bloklar ve işlevsel olmayan markalama veya arka plan resimleri kullanmaktan kaçının.
- Eski dinamik verileri işleme
AmbientTickEffectgeri çağırma işlemi, güç tasarrufu için yalnızca belirli aralıklarla (genellikle dakikada bir kez) çağrılır. Bu sınırlama nedeniyle, kronometre, nabız veya antrenman mesafesi gibi sık değişen veriler güncellemeler arasında eski hale gelir. Yanlış ve yanıltıcı bilgilerin gösterilmesini önlemek için bu canlı değerleri,--gibi statik yer tutucu içeriklerle değiştirin.
- Tutarlı bir düzen kullanın
- Sorunsuz bir geçiş oluşturmak için Etkileşimli ve Ortam modlarında öğeleri aynı konumda tutun.
- Saati her zaman gösterin.
- Bağlama duyarlı olun
- Cihaz ortam moduna girdiğinde kullanıcı bir ayarlar veya yapılandırma ekranındaysa ayarlar görünümü yerine uygulamanızdan daha alakalı bir ekran göstermeyi düşünebilirsiniz.
- Cihaza özel koşulları ele alma
currentAmbientModekaynağından döndürülenAmbientModenesnesinde:isLowBitAmbientSupportedtrueise mümkün olduğunda kenar yumuşatma özelliğini devre dışı bırakın.isBurnInProtectionRequiredtrueise ekran yanmasını önlemek için kullanıcı arayüzü öğelerini düzenli olarak hafifçe kaydırın ve tamamen beyaz alanlardan kaçının.
Hata ayıklama ve test
Bu adb komutlar, cihaz ortam modundayken uygulamanızın nasıl davrandığını geliştirirken veya test ederken faydalı olabilir:
# put device in ambient mode if the always on display is enabled in settings
# (and not disabled by other settings, such as theatre mode)
$ adb shell input keyevent KEYCODE_SLEEP
# put device in interactive mode
$ adb shell input keyevent KEYCODE_WAKEUP
Örnek: Antrenman uygulaması
Egzersiz oturumunun tamamı boyunca kullanıcılara metrik göstermesi gereken bir egzersiz uygulamasını ele alalım. Uygulama, ortam durumu geçişleri sırasında görünür kalmalı ve kadranla değiştirilmemelidir.
Bunu yapmak için geliştiricinin şunları yapması gerekir:
- Ekranı karartma ve gerekli olmayan verileri kaldırma gibi Etkileşimli ve Ortam durumları arasındaki kullanıcı arayüzü değişikliklerini işlemek için
LocalAmbientModeManagerkullanın. - En iyi uygulamalara uygun olarak Ambiyans durumu için yeni bir düşük güç tüketen düzen oluşturun.
- Sistemin kadranına dönmesini önlemek için egzersiz süresince Ongoing Activity API'yi (veya Wear OS 7 ve sonraki sürümlerde Canlı Güncellemeler'i) kullanın.
Tam uygulama için GitHub'daki Compose tabanlı Exercise örneğine bakın. Bu örnekte, Compose'da ortam modu işlemeyi basitleştirmek için LocalAmbientModeManager composable'ın kullanımı da gösterilmektedir.