Bu kılavuzda, uygulamanızın her zaman açık kalmasının nasıl sağlanacağı, güç durumu geçişlerine nasıl tepki verileceği ve pil tasarrufu yaparken iyi bir kullanıcı deneyimi sunmak için uygulama davranışının nasıl yönetileceği açıklanmaktadır.
Bir uygulamanın sürekli olarak görünür olmasını sağlamak pil ömrünü önemli ölçüde etkiler. Bu nedenle, bu özelliği eklerken güç üzerindeki etkisini göz önünde bulundurun.
Temel Kavramlar
Tam ekranda görüntülenen Wear OS uygulamaları iki güç durumundan birinde olur:
- Etkileşimli: Ekranın tam parlaklıkta olduğu ve kullanıcının tam etkileşime girmesine olanak tanıyan yüksek güç durumu.
- Ambiyans: Ekranın güç tasarrufu için karartıldığı düşük güç durumu. Bu durumda, uygulamanızın kullanıcı arayüzü hâlâ ekranın tamamını kaplar ancak sistem, bulanıklaştırarak veya saat gibi içerikleri üzerine yerleştirerek görünümünü değiştirebilir. Buna Ambiyans Modu da denir.
İşletim sistemi bu durumlar arasındaki geçişi kontrol eder.
Her Zaman Açık Uygulama, içeriği hem etkileşimli hem de ambiyans durumlarında gösteren bir uygulamadır.
Cihaz düşük güç Ambiyans durumundayken her zaman açık bir uygulama kendi kullanıcı arayüzünü göstermeye devam ettiğinde ambiaktif modda olduğu söylenir.
Sistem geçişleri ve varsayılan davranış
Bir uygulama ön plandayken sistem, kullanıcının işlem yapmamasından kaynaklanan iki zaman aşımına göre güç durumu geçişlerini yönetir.
- 1. Zaman aşımı: Etkileşimli moddan Ambiyans moduna geçiş: Kullanıcı bir süre boyunca işlem yapmadıktan sonra cihaz Ambiyans moduna girer.
- 2. Zaman aşımı: Kadran ekranına dönme: Belirli bir süre daha işlem yapılmadığında sistem mevcut uygulamayı gizleyip kadran ekranını 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ü ve üzerine zamanı yerleştirir.
- 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 karartılır ancak uygulama çalışmaya devam eder ve görünür kalır. (Güncellemeler 1 dakikada bir 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 AmbientLifecycleObserver
kullanarak durum geçişlerinde geri çağırma işlevlerini dinleyerek 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 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 etkinliğinizin veya derlenebilir öğenizin yaşam döngüsüne kaydedin.private val ambientObserver = AmbientLifecycleObserver(activity, ambientCallback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(ambientObserver) // ... }
onDestroy()
'teki gözlemciyi kaldırmak içinremoveObserver()
numaralı telefonu arayın.
Jetpack Compose kullanan geliştiriciler için Horologist kitaplığı, bu kalıbın uygulanmasını basitleştiren faydalı bir yardımcı program olan AmbientAware
bileşenini sağlar.
Ortam farkındalığı olan TimeText
Özel bir gözlemci gerektiren istisnalar dışında, Wear OS 6'ta TimeText
widget'ı ortam farkındadır. Cihaz Ambient durumundayken ek kod olmadan dakikada bir otomatik olarak güncellenir.
Ekran açık kalma süresini kontrol etme
Aşağıdaki bölümlerde, uygulamanızın ekranda ne kadar süreyle kalacağını nasıl yöneteceğiniz açıklanmaktadır.
Devam eden bir etkinlikle kadrana dönmeyi engelleme
Ortam durumunda bir süre geçtikten sonra (2. Zaman aşımı) sistem genellikle kadrana döner. Kullanıcı, sistem ayarlarında zaman aşımı süresini yapılandırabilir. Kullanıcının antrenmanı izlemesi 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 Devam Eden Etkinlik uygulayarak bunu önleyebilirsiniz. Uygulamanız, devam eden bir kullanıcı görevi (ör. antrenman oturumu) hakkında bilgi gösteriyorsa görevi tamamlayana kadar uygulamanızı görünür tutmak için Devam Eden Etkinlik API'sini kullanabilirsiniz. Kullanıcı kadrana manuel olarak dönerse devam eden etkinlik göstergesi, uygulamanıza tek dokunuşla geri dönmelerini 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ğinizi 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 modunu devre dışı bırakma
Nadir durumlarda, cihazın Ambiyans durumuna girmesini tamamen engellemeniz gerekebilir. Yani 1. Zaman aşımı sorununu önlemek için. Bunun için FLAG_KEEP_SCREEN_ON
pencere işaretini kullanabilirsiniz. Bu, cihazı etkileşimli durumda tutarak uyanık kilidi işlevi görür. Pil ömrünü ciddi şekilde etkilediği için bu özelliği son derece dikkatli bir şekilde kullanın.
Ambiyans modu için öneriler
Ambiyans modunda en iyi kullanıcı deneyimini sunmak ve güç tasarrufu yapmak için bu tasarım yönergelerine uyun.
- Minimalist, düşük güç tüketimi olan bir ekran kullanın
- Ekranın en az% 85'i siyah olmalıdır.
- Büyük simgeler veya düğmeler için katı dolgular yerine ana hatlar kullanın.
- İkincil ayrıntıları etkileşimli ekrana taşıyarak yalnızca en önemli bilgileri gösterin.
- Düz renkten oluşan büyük bloklar ve işlevsel olmayan marka öğeleri veya arka plan resimleri kullanmaktan kaçının.
- İçeriğin uygun şekilde güncellendiğinden emin olun
- Kronometre, antrenman mesafesi veya süre gibi sık değişen veriler için içeriğin güncel olduğu izlenimini vermekten kaçınmak amacıyla
--
gibi bir yer tutucu içerik gösterin. - Geri sayım halkaları ve medya oturumları gibi sürekli güncellenen ilerleme göstergelerini kaldırın.
onUpdateAmbient()
geri çağırma işlevi yalnızca önemli güncellemeler için, genellikle dakikada bir kez kullanılmalıdır.
- Kronometre, antrenman mesafesi veya süre gibi sık değişen veriler için içeriğin güncel olduğu izlenimini vermekten kaçınmak amacıyla
- Tutarlı bir düzen kullanın
- Sorunsuz bir geçiş oluşturmak 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 özgü koşulları ele alma
onEnterAmbient()
'e 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 alanlar kullanmaktan kaçının.
Hata ayıklama ve test
Aşağıdaki adb
komutları, cihaz ortam modundayken uygulamanızın nasıl davranacağı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 seansı boyunca kullanıcıya metrikler göstermesi gereken bir egzersiz uygulaması düşünün. Uygulama, Ambient durum geçişlerinde görünür kalmalıdır ve kadranla değiştirilmemelidir.
Geliştiricinin bunu yapması için:
- Etkileşimli ve Ortam durumları arasında kullanıcı arayüzü değişikliklerini (ör. ekranı karartma ve gerekli olmayan verileri kaldırma) işlemek için bir
AmbientLifecycleObserver
uygulayın. - Ambient durumu için en iyi uygulamaları izleyen yeni, düşük güçlü bir düzen oluşturun.
- Sistemin kadrana dönmesini önlemek için antrenman süresince Devam Eden Etkinlik API'sini kullanın.
Tam uygulama için GitHub'daki oluşturmaya dayalı Alıştırma örneğine bakın. Bu örnekte, Compose'da ambiyans modu işlemlerini basitleştirmek için Horologist kitaplığındaki AmbientAware
bileşeninin kullanımı da gösterilmektedir.