Her zaman açık uygulamalar ve sistem ambiyans modu

Wear OS, kullanıcı kol saatini kullanmayı bıraktığında etkin bir uygulamanın düşük güç moduna geçmesini otomatik olarak yönetir. Buna sistem ortam modu denir. Aşağıdaki koşullardan herhangi biri karşılanırsa kullanıcı kol saatiyle etkileşime geçtikten sonra uygulama devam ettirilir:

  • Kullanıcı etkileşimi belirli bir zaman aralığında (zaman aşımından önce) gerçekleşir.
  • Uygulama, devam eden bir etkinlik beyan edip başlatmıştır.

Belirli kullanım alanları için (ör. koşu sırasında nabzı ve hızı görmek isteyen bir kullanıcı) sistem ortam modunda nelerin gösterileceğini de kontrol edebilirsiniz. Hem ortam hem de etkileşimli modlarda çalışan Wear OS uygulamalarına her zaman açık uygulamalar denir.

Bir uygulamanın sürekli olarak görünür olmasını sağlamak pil ömrünü etkiler. Bu nedenle, bu özelliği uygulamanıza eklerken bu etkiyi göz önünde bulundurun.

Projenizi yapılandırma

Ambiyans modunu desteklemek için aşağıdaki adımları uygulayın:

  1. Giyilebilir cihaz uygulaması oluşturma ve çalıştırma sayfasındaki yapılandırmalara göre projenizi oluşturun veya güncelleyin.
  2. (Yalnızca Wear OS 4 veya önceki sürümlerde gereklidir) Android manifest dosyasına WAKE_LOCK iznini ekleyin:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>

Her zaman açık modunu etkinleştirme

Wear OS 6'tan itibaren, targetSdkVersion değeri 36 veya daha yüksek olan uygulamalar varsayılan olarak her zaman açıktır. Bu uygulamalar, sistem ortam modu sırasında herhangi bir yapılandırma olmadan sınırlı bir süre boyunca görünür kalır. Uygulamanızın targetSdkVersion değeri 36'dan düşükse veya uygulamanızın Wear OS 5 veya daha eski bir sürümde çalışması gerekiyorsa uygulamanızı her zaman açık tutmak için AmbientLifecycleObserver sınıfını kullanın.

AmbientLifecycleObserver sınıfını kullanarak ambiyans modu etkinliklerine tepki verme

Uygulamalar, ambiyans modu etkinliklerine doğrudan tepki vermek için AmbientLifecycleObserver sınıfını da kullanabilir:

  1. Aşağıdaki örnekte gösterildiği gibi AmbientLifecycleObserver.AmbientLifecycleCallback arayüzünü uygulayın. Bu aşamada yöntemler boştur ancak rehberin ilerleyen bölümlerinde, ambiyans moduna girip çıkmak için görselleştirmede yapmanız gereken değişikliklerle ilgili ayrıntılar sağlanır.

    Kotlin

    val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback {
        override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) {
        // ... Called when moving from interactive mode into ambient mode.
        }
    
        override fun onExitAmbient() {
        // ... Called when leaving ambient mode, back into interactive mode.
        }
    
        override fun onUpdateAmbient() {
        // ... Called by the system in order to allow the app to periodically
        // update the display while in ambient mode. Typically the system will
        // call this every 60 seconds.
        }
    }
  2. Bir AmbientLifecycleObserver oluşturun ve gözlemciyi kaydedin. Genellikle bu, etkinliğin yaşam döngüsü boyunca her zaman açık davranışının etkinleştirilmesine izin vermek için onCreate() veya Wear OS için Compose kullanılıyorsa üst düzey derlenebilir bileşende kullanılır.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
  3. Her zaman açık davranışı artık gerekli olmadığında removeObserver()'ü çağırarak gözlemciyi kaldırın. Örneğin, bu yöntemi etkinliğinizin onDestroy() yönteminde çağırabilirsiniz.

TimeText widget'ını kullanarak saat metnini güncelleme

Wear OS 6'tan itibaren TimeText widget'ı ambiyans modunu algılar. Uygulamanızın, ambiyans modu sırasında yalnızca her dakika bir saat metnini güncellemesi gerekiyorsa AmbientLifecycleObserver kullanmadan TimeText widget'ını kullanabilirsiniz.

Her zaman açık olan uygulamalar arka plana taşınabilir

Wear OS 5'ten itibaren sistem, belirli bir süre boyunca ambiyans modunda görünen her zaman açık uygulamaları arka plana taşır. Kullanıcılar, zaman aşımını sistem ayarlarından yapılandırabilir.

Her zaman açık uygulamanız, devam eden bir kullanıcı görevi (ör. müzik çalma veya antrenman oturumu) hakkında bilgi gösteriyorsa görev sona erene kadar devam eden etkinliği görünür durumda tutmak isteyebilirsiniz. Bunun için, her zaman açık etkinliğinizle bağlantılı bir devam eden bildirim yayınlamak üzere Devam Eden Etkinlik API'sini kullanın.

Sistemin devam eden etkinliği tanıması 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:

// Create a pending intent that point to your always-on activity
val touchIntent =
    PendingIntent.getActivity(
        context,
        0,
        Intent(context, MyAlwaysOnActivity::class.java),
        PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
    )

val notificationBuilder =
    NotificationCompat.Builder(this, CHANNEL_ID)
    // ...
    .setOngoing(true)

val ongoingActivity =
    OngoingActivity.Builder(
        applicationContext, NOTIFICATION_ID, notificationBuilder
    )
    // ...
    .setTouchIntent(touchIntent)
    .build()

ongoingActivity.apply(applicationContext)

notificationManager.notify(
    NOTIFICATION_ID,
    notificationBuilder.build()
)

Ambiyans modundaki kullanıcı deneyimini değiştirme

Varsayılan olarak, sürekli açık özelliği uygulandığında saat ambiyans moduna girdiğinde ekranın görünümü değişmez. AmbientLifecycleCallback içindeki yöntemleri geçersiz kılarak bu davranışı değiştirebilirsiniz.

Güç tasarrufu yapmak için aşağıdakileri yapın:

  • Daha az pikseli aydınlatın. Ambiyans modunda yalnızca önemli bilgileri göstermeyi ve kullanıcı etkileşimli moda girdiğinde daha fazla ayrıntı sunmayı düşünün.
  • Ekranın en az% 85'ini siyah tutun, dolguları kaldırın ve düğmeler ile büyük simgeler için dış çizgiler kullanın.
  • İşlevsel olmayan marka öğeleri ve arka plan resimleri gibi alakasız bilgiler göstermekten kaçının.
  • Etkin ve her zaman açık modlarda öğeleri aynı konumda tutun ve zamanı her zaman gösterin.
  • İçerikleri daha seyrek güncellemeler için ayarlayın. Örneğin, zamanlayıcıları en yakın saniyeye değil, en yakın dakikaya göre gösterin.
  • Mesafe veya saat gibi sık güncellenen alfanümerik içerikler için yer tutucu kullanıcı arayüzünü kaldırın ya da gösterin.
  • Geri sayım halkaları ve medya oturumları gibi sık güncellenen ilerleme göstergelerini kaldırın.
  • Kullanıcı, her zaman açık moda girerken uygulamanızdaki bir yapılandırma veya ayar ekranındaysa bunun yerine uygulamanızda daha alakalı bir ekran göstermeyi düşünebilirsiniz.
  • onEnterAmbient() yöntemine iletilen AmbientDetails sınıfında:
    • deviceHasLowBitAmbient ayarlanmışsa mümkün olduğunda kenar yumuşatma özelliğini devre dışı bırakın.
    • burnInProtectionRequired ayarlanmışsa görselleştirmeyi düzenli aralıklarla değiştirin ve tamamen beyaz alanlar kullanmaktan kaçının.
  • Ambiyans modu sırasında sürekli animasyon çalıştırmayın. Wear OS 5.1'den itibaren animatörler, ambiyans modu sırasında çalışmayı durdurabilir.

Kesintisiz görüntüleme için yapılacaklar listesi

Cihaz farklı durumlara geçerken ekran üzerinde maksimum kontrol sahibi olmak istediğiniz durumlar olabilir. Örneğin, bir egzersiz uygulaması egzersiz sırasında kadran ekranda görünmesini istemediğinde. Bu durumlarda aşağıdakileri yapın:

  1. AmbientLifecycleObserver.AmbientLifecycleCallback arayüzünü uygulayın.
  2. Cihaz sistem ambiyans modundayken kullanmak için yeni bir düşük güç düzeni oluşturun.
  3. Egzersiz süresince bir devam eden etkinlik uygulayın.

Bunun nasıl yapılacağına dair bir örnek için GitHub'daki, Horologist kitaplığındaki AmbientAware bileşenini kullanan, derleme tabanlı eğitim örneğine göz atın.