Always-on-Apps und Inaktivmodus des Systems

Wear OS wechselt automatisch in den Energiesparmodus für eine aktive App, wenn der Nutzer seine Smartwatch nicht mehr verwendet. Dies wird als System-Inaktivmodus bezeichnet. Wenn der Nutzer innerhalb eines bestimmten Zeitraums wieder mit der Smartwatch interagiert, wird er von Wear OS wieder zur App zurückgeleitet, wo er aufgehört hat.

Für bestimmte Anwendungsfälle, z. B. wenn Nutzende die Herzfrequenz und das Tempo während einer Laufen – Sie kann auch festlegen, welche Bildschirme im energiesparenden Inaktivmodus angezeigt werden. Wear OS-Apps, die sowohl im Inaktiv- als auch im interaktiven Modus ausgeführt werden, werden als Always-On-Apps bezeichnet.

Wenn eine App ständig sichtbar ist, wirkt sich das auf die Akkulaufzeit aus. Berücksichtigen Sie dies, wenn Sie diese Funktion in Ihre App einbinden.

Projekt konfigurieren

So unterstützen Sie den Inaktivmodus:

  1. Erstellen oder aktualisieren Sie Ihr Projekt anhand der Konfigurationen auf der Seite Wearable-App erstellen und ausführen.
  2. Fügen Sie der Android-Manifestdatei die Berechtigung WAKE_LOCK hinzu:
<uses-permission android:name="android.permission.WAKE_LOCK" />

Always-on-Displaymodus aktivieren

So verwenden Sie die AmbientLifecycleObserver:

  1. implementieren AmbientLifecycleObserver.AmbientLifecycleCallback wie im folgenden Beispiel gezeigt. In dieser Phase sind die Methoden leer. Im weiteren Verlauf des Leitfadens erfahren Sie jedoch, welche Änderungen Sie an der Visualisierung vornehmen sollten, um den Inaktivmodus zu aktivieren und zu deaktivieren.

    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. Erstellen Sie eine AmbientLifecycleObserver und registrieren Sie den Beobachter. Normalerweise wird dies in onCreate() oder im Composable auf oberster Ebene verwendet, wenn Compose für Wear OS verwendet wird, damit das „Always-On“-Verhalten während des gesamten Lebenszyklus der Aktivität aktiviert werden kann.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. Entfernen Sie den Beobachter durch Aufrufen von removeObserver(), wenn der Always-on-Modus aktiviert ist. -Verhalten ist nicht mehr erforderlich. Sie können diese Methode z. B. in onDestroy()-Methode Ihres Aktivitäten.

Always-on-Apps können in den Hintergrund verschoben werden

Ab Wear OS 5 werden Always-On-Apps vom System in den Hintergrund verschoben, nachdem sie einen bestimmten Zeitraum lang im Inaktivmodus sichtbar waren. Nutzer können das Zeitlimit in den Systemeinstellungen konfigurieren.

Wenn Ihre immer aktive App Informationen zu einer laufenden Nutzeraufgabe anzeigt, z. B. Musikwiedergabe oder ein Workout durchzuführen – vielleicht möchtest du die laufende Aktivität bis die Aufgabe abgeschlossen ist. Verwenden Sie dazu die Ongoing Activity API, um Beiträge zu posten: eine fortlaufende Benachrichtigung, die mit Ihrer ständig aktiven Aktivität verknüpft ist.

Damit das System die laufende Aktivität erkennt, muss die Touch-Intention der laufenden Benachrichtigung auf Ihre aktive Aktivität verweisen, wie im folgenden Code-Snippet dargestellt:

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

Visuelles Erscheinungsbild im Inaktivmodus ändern

Wenn Sie die Funktion „Always-On-Display“ implementieren, ändert sich das Display standardmäßig nicht, wenn die Smartwatch in den Inaktivmodus wechselt. Sie können dieses Verhalten ändern, indem Sie die Methoden im AmbientLifecycleCallback überschreiben.

So sparen Sie Strom:

  • Weniger Pixel werden belichtet und der Großteil des Bildschirms schwarz. Erwägen Sie im Inaktivmodus nur kritische Informationen anzeigen und wenn der Nutzer in den interaktiven Modus wechselt.
  • Passen Sie alle Inhalte an weniger häufige Aktualisierungen an. Zum Beispiel Timer anzeigen statt auf die nächste Sekunde.
  • Im AmbientDetails-Objekt, das an onEnterAmbient() übergeben wird:
    • Wenn deviceHasLowBitAmbient festgelegt ist, deaktivieren Sie das Anti-Aliasing nach Möglichkeit.
    • Wenn burnInProtectionRequired festgelegt ist, verschieben Sie die Visualisierung um und vermeiden Sie durchgehende weiße Flächen.

Wenn Sie Compose für Wear OS verwenden, empfehlen wir, diese Rückrufmethoden zum Aktualisieren des Status zu verwenden. So kann das System die Benutzeroberfläche entsprechend neu zusammenstellen.

Ein Beispiel dafür finden Sie in der Beispielübung auf GitHub, die auf der AmbientAware-Komponente aus der Horologist-Bibliothek basiert.