Always-on-Apps und Inaktivmodus des Systems

Wear OS wechselt automatisch in den Energiesparmodus für eine aktive App, wenn ein Nutzer länger nutzen. Dies wird als System-Inaktivmodus bezeichnet. Wenn Nutzende mit innerhalb eines bestimmten Zeitraums erneut aufrufen, führt Wear OS den Nutzer zurück zur App, haben sie aufgehört.

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. Aktive Wear OS-Apps im Inaktivmodus und im interaktiven Modus, werden als Always-On-Apps bezeichnet.

Die ständig sichtbare Darstellung einer App wirkt sich auf die Akkulaufzeit aus. Berücksichtigen Sie dies beim Hinzufügen zu Ihrer App hinzufügen.

Projekt konfigurieren

So unterstützen Sie den Inaktivmodus:

  1. Erstellen oder aktualisieren Sie Ihr Projekt basierend auf den Konfigurationen im Erstellen und eine Wearable-App betreiben.
  2. Fügen Sie der Android-Manifestdatei die Berechtigung WAKE_LOCK hinzu:
<uses-permission android:name="android.permission.WAKE_LOCK" />

Always-on-Modus aktivieren

So verwenden Sie die AmbientLifecycleObserver:

  1. implementieren AmbientLifecycleObserver.AmbientLifecycleCallback wie im folgenden Beispiel gezeigt. Derzeit sind die Methoden noch nicht verfügbar. Später in der Anleitung finden Sie jedoch Details zu den Änderungen. sollten Sie sicherstellen, dass Sie zur Visualisierung gehen, um den Inaktivmodus zu starten und zu beenden.

    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. In der Regel wird in onCreate() oder in der zusammensetzbaren Funktion auf oberster Ebene verwendet, wenn du „Compose“ für Wear OS verwendest, um Sie ermöglichen es, das Always-On-Verhalten während des gesamten Lebenszyklus der Aktivität zu aktivieren.

    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 verlagert das System Always-on-Apps in den Hintergrund, nachdem sind sie für eine bestimmte Zeit im Inaktivmodus sichtbar. 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 Training zu absolvieren – 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 der Touch-Intent der Benachrichtigung auf deine Always-on-Aktivität verweisen, wie in das folgende Code-Snippet:

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

Visuelle Darstellung im Inaktivmodus ändern

Bei der Implementierung von Always-on ändert der Bildschirm standardmäßig seine angezeigt wird, wenn die Uhr in den Inaktivmodus wechselt. Sie können dies ändern durch Überschreiben der Methoden in der AmbientLifecycleCallback

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 Inhalte für weniger häufige Updates an. Zum Beispiel Timer anzeigen statt auf die nächste Sekunde.
  • Im AmbientDetails an onEnterAmbient() übergebenes Objekt: <ph type="x-smartling-placeholder">
      </ph>
    • 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.

Bei der Verwendung von „Compose“ für Wear OS empfehlen wir die folgenden Callback-Methoden um den state zu aktualisieren, sodass das System UI entsprechend anpassen.

Ein Beispiel dafür, wie dies erreicht werden kann, finden Sie unter der auf Kompositionsbasis erstellten . Übungsbeispiel auf GitHub, das die AmbientAware verwendet zusammensetzbaren Funktion aus der Horologen-Bibliothek.