Bu kılavuzda, uygulamanızı her zaman açık hale getirme, 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 verildiği 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ü tam ekranı kaplamaya devam eder ancak sistem, bulanıklaştırma veya saat gibi içerikleri yerleştirme yoluyla 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, hem Etkileşimli hem de Ambiyans durumunda içerik 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 planda olduğunda sistem, kullanıcı etkinliği 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 daha 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 ekran görüntüsünün üzerine saat bilgisi eklenir.
- Wear OS 6 ve sonraki sürümlerde, SDK 36 veya sonraki sürümleri hedefleyen uygulamalar her zaman açık olarak kabul edilir. Ekran kararır ancak uygulama çalışmaya devam eder ve görünür kalır. (Güncellemeler dakikada bir kez kadar seyrek olabilir.)
Ambiyans durumu için davranışı özelleştirme
Varsayılan sistem davranışından bağımsız olarak, tüm Wear OS sürümlerinde durum geçişlerinde geri çağırmaları dinlemek için AmbientLifecycleObserver
kullanarak uygulamanızın Ambient durumundaki görünümünü veya davranışını özelleştirebilirsiniz.
AmbientLifecycleObserver'ı kullanma
Ambiyans modu etkinliklerine tepki vermek için AmbientLifecycleObserver
sınıfını kullanın:
AmbientLifecycleObserver.AmbientLifecycleCallback
arayüzünü uygulayın. Kullanıcı arayüzünüzü düşük güç durumuna göre ayarlamak içinonEnterAmbient()
yöntemini, tam etkileşimli ekrana geri yüklemek için iseonExitAmbient()
yöntemini kullanın.val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback { override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) { // ... Called when moving from interactive mode into ambient mode. // Adjust UI for low-power state: dim colors, hide non-essential elements. } override fun onExitAmbient() { // ... Called when leaving ambient mode, back into interactive mode. // Restore full UI. } override fun onUpdateAmbient() { // ... Called by the system periodically (typically once per minute) // to allow the app to update its display while in ambient mode. } }
Bir
AmbientLifecycleObserver
oluşturun ve bunu etkinliğinizin veya composable'ınızın yaşam döngüsüne kaydedin.private val ambientObserver = AmbientLifecycleObserver(activity, ambientCallback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(ambientObserver) // ... }
removeObserver()
,onDestroy()
içindeki gözlemciyi kaldırmak için çağrılır.
Jetpack Compose kullanan geliştiriciler için Horologist kitaplığı, bu kalıbın uygulanmasını kolaylaştıran AmbientAware
composable adlı faydalı bir yardımcı program sunar.
Ortama duyarlı TimeText
Wear OS 6'da özel bir gözlemci gerektiren durumun istisnası olarak TimeText
widget'ı ortam farkındadır. Cihaz Ortam durumundayken ek kod olmadan dakikada bir otomatik olarak güncellenir.
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 etkinliklerle kadrana 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. egzersiz seansı) 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ı kadranına manuel olarak dönerse devam eden etkinlik göstergesi, uygulamanıza tek dokunuşla dönmesini sağlar.
Bunu uygulamak için devam eden bildirimin dokunma amacı, aşağıdaki kod snippet'inde gösterildiği gibi her zaman açık etkinliğinize işaret etmelidir:
private fun createNotification(): Notification { 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) return notificationBuilder.build() }
Ekranı açık tutma ve Ambiyans Modu'nu önleme
Nadir durumlarda, cihazın Ambiyans durumuna girmesini tamamen engellemeniz gerekebilir. Yani 1. zaman aşımını önlemek için. Bunu yapmak için FLAG_KEEP_SCREEN_ON
pencere işaretini kullanabilirsiniz. Bu işlev, cihazı Etkileşimli durumda tutarak uyandırma kilidi gibi çalışır. Pil ömrünü ciddi şekilde etkilediği için bu özelliği kullanırken çok dikkatli olun.
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 karmaşayı azaltın ve ekran gücünü düşürün. 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'i siyah olmalıdır.
- 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.
- Tek renkli büyük bloklar ve işlevsel olmayan markalama veya arka plan resimleri kullanmaktan kaçının.
- Eski dinamik verileri işleme
onUpdateAmbient()
geri ç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 hatalı bilgilerin gösterilmesini önlemek içinonEnterAmbient
geri çağırma işlevini dinleyin ve bu canlı değerleri--
gibi statik yer tutucu içeriklerle değiştirin.
- Tutarlı bir düzen kullanın
- Sorunsuz bir geçiş için öğeleri Etkileşimli ve Ortam modlarında 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
onEnterAmbient()
yöntemine iletilenAmbientDetails
nesnesinde:deviceHasLowBitAmbient
true
ise mümkün olduğunda kenar yumuşatma özelliğini devre dışı bırakın.burnInProtectionRequired
true
ise 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: Egzersiz 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
AmbientLifecycleObserver
uygulayarak Etkileşimli ve Ortam durumları arasındaki kullanıcı arayüzü değişikliklerini yönetin. - 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 Devam Eden Etkinlik API'sini kullanın.
Tam uygulama için GitHub'daki Compose tabanlı Exercise sample'a bakın. Bu örnekte, Compose'da ortam modu işlemeyi basitleştirmek için Horologist kitaplığındaki AmbientAware
composable'ın kullanımı da gösterilmektedir.