Zawsze włączone aplikacje i tryb nieaktywny systemu

Gdy użytkownik przestanie korzystać z zegarka, Wear OS automatycznie przełączy aktywną aplikację w tryb niskiego poboru mocy. Jest to tzw. systemowy tryb nieaktywny. Jeśli użytkownik wejdzie w interakcję z ponownie w określonym przedziale czasu, Wear OS przenosi użytkownika z powrotem do aplikacji, którą przerwali.

w określonych przypadkach użycia, na przykład gdy użytkownik chce obserwować tętno i tempo podczas bieganie—ty może też kontrolować, co ma się wyświetlać w trybie nieaktywnym o niskim poborze energii. Aplikacje na Wear OS, które działają w trybie zwykłym i interaktywnie, nazywane są aplikacją zawsze włączoną.

Utrzymywanie aplikacji w stanie widocznym wpływa na czas pracy na baterii, dlatego weź to pod uwagę, dodając tę funkcję do aplikacji.

Konfigurowanie projektu

Aby włączyć tę funkcję, wykonaj te czynności:

  1. Utwórz lub zaktualizuj projekt na podstawie konfiguracji w Utwórz i uruchomić stronę z aplikacjami do noszenia.
  2. Dodaj uprawnienie WAKE_LOCK do pliku manifestu Androida:
<uses-permission android:name="android.permission.WAKE_LOCK" />

Włącz tryb Always On Display

Aby korzystać z klasy AmbientLifecycleObserver:

  1. Zaimplementuj interfejs AmbientLifecycleObserver.AmbientLifecycleCallback, jak w tym przykładzie. Na tym etapie metody są puste, ale w dalszej części przewodnika znajdziesz szczegółowe informacje o tym, jakie zmiany upewnij się, że tworzysz wizualizację, by przejść do trybu nieaktywnego i z niego wyjść.

    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. Utwórz AmbientLifecycleObserver i zarejestruj obserwatora. Zwykle będzie używana w usłudze onCreate() lub w funkcji kompozycyjnej najwyższego poziomu, jeśli używasz funkcji Utwórz na Wear OS, aby pozwalają na włączenie trybu Ekran zawsze wł. przez cały cykl życia działania.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. Usuń obserwatora, wywołując funkcję removeObserver(), gdy zachowanie „zawsze włączone” nie jest już potrzebne. Możesz na przykład wywołać tę metodę w metodzie onDestroy() swojej aktywności.

Zawsze włączone aplikacje mogą przenieść się w tle

Począwszy od Wear OS 5 system przenosi aplikacje zawsze aktywne na drugi plan po tym, jak są widoczne w trybie ambient przez określony czas. Użytkownicy mogą skonfigurować limit czasu w ustawieniach systemowych.

Jeśli w aplikacji są zawsze włączone informacje o trwającym działaniu użytkownika, takim jak podczas odtwarzania muzyki lub podczas treningu. widoczne do momentu zakończenia zadania. Aby to zrobić, użyj interfejsu Ongoing Activity API, aby opublikować powiadomienie, które jest połączone z Twoją stałą aktywnością.

Aby system mógł rozpoznać trwającą aktywność, intencja dotknięcia powiadomienia musi wskazywać na aktywność zawsze włączoną, jak pokazano w tym fragmencie kodu:

// 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()
)

Modyfikowanie wyglądu w trybie nieaktywnym

Domyślnie, gdy ekran jest włączony, gdy zegarek przejdzie w tryb nieaktywny. Możesz zmodyfikować to zachowanie, zastępując metody w AmbientLifecycleCallback.

Aby oszczędzać energię, wykonaj te czynności:

  • Zmniejsz jasność ekranu, a większość ekranu pozostaw czarna. Rozważ wyświetlać tylko istotne informacje w trybie nieaktywnym, gdy użytkownik przejdzie w tryb interaktywny.
  • Dostosuj treści, aby aktualizacje były rzadziej publikowane. Na przykład wyświetlanie zegara w pobliższej minucie zamiast w pobliższej sekundzie.
  • W obiekcie AmbientDetails przekazanym do metody onEnterAmbient():
    • Jeśli jest ustawiony deviceHasLowBitAmbient, wyłącz antyaliasing, jeśli to możliwe.
    • Jeśli ustawiono burnInProtectionRequired, przesuń wizualizację w inne miejsce okresowo i unikaj stałych białych obszarów.

Jeśli używasz funkcji Utwórz na Wear OS, zalecamy użycie tych metod wywołania zwrotnego aby zaktualizować stan, co umożliwi systemowi ponowne skomponowanie z odpowiednim interfejsem użytkownika.

Przykładem tego jest przykładowy ćwiczenia oparty na komponencie, który znajdziesz na GitHubie. Wykorzystuje on komponent AmbientAware z biblioteki Horologist.