Wear OS wechselt für eine aktive App automatisch in den Energiesparmodus, wenn ein Nutzer seine Smartwatch nicht mehr verwendet. Das wird als Umgebungsmodus des Systems bezeichnet. Wenn der Nutzer innerhalb eines bestimmten Zeitraums noch einmal mit der Smartwatch interagiert, wird er über Wear OS an der Stelle wieder geöffnet, wo er beim letzten Mal aufgehört hat.
Für bestimmte Anwendungsfälle, z. B. wenn ein Nutzer während eines Laufs Herzfrequenz und Geschwindigkeit sehen möchte, kannst du auch festlegen, was im energiesparenden Inaktivmodus angezeigt wird. Wear OS-Apps, die sowohl im Inaktivmodus als auch im interaktiven Modus ausgeführt werden, werden als Always-On-Apps bezeichnet.
Wenn eine App ständig sichtbar ist, wirkt sich dies auf die Akkulaufzeit aus. Berücksichtige dies, wenn du diese Funktion deiner App hinzufügst.
Projekt konfigurieren
So kannst du den Inaktivmodus aktivieren:
- Erstellen oder aktualisieren Sie Ihr Projekt anhand der Konfigurationen auf der Seite Wearable-Apps erstellen und ausführen.
- 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 Klasse
AmbientLifecycleObserver
:
-
Implementiere die Schnittstelle
AmbientLifecycleObserver.AmbientLifecycleCallback
wie im folgenden Beispiel. Zu diesem Zeitpunkt sind die Methoden leer. Weiter unten im Leitfaden finden Sie jedoch Details dazu, welche Änderungen Sie an der Visualisierung vornehmen müssen, 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. } }
-
Erstellen Sie ein
AmbientLifecycleObserver
und registrieren Sie den Beobachter. In der Regel wird dies inonCreate()
oder in der zusammensetzbaren Funktion auf oberster Ebene (bei Verwendung von Compose für Wear OS) verwendet, 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) // ... }
- Entfernen Sie den Beobachter durch Aufrufen von
removeObserver()
, wenn das Always-On-Verhalten nicht mehr erforderlich ist. Sie können diese Methode beispielsweise in der MethodeonDestroy()
Ihrer Aktivität aufrufen.
Visuelle Darstellung im Inaktivmodus ändern
Bei der Implementierung eines Always-On-Modus ändert sich das Display standardmäßig nicht, wenn die Uhr in den Inaktivmodus wechselt. Sie können dieses Verhalten ändern, indem Sie die Methoden in AmbientLifecycleCallback
überschreiben.
So können Sie Strom sparen:
- Leuchten weniger Pixel auf und lassen den Großteil des Displays schwarz. Am besten zeigen Sie im Inaktivmodus nur kritische Informationen an und stellen Sie weitere Details bereit, wenn der Nutzer in den interaktiven Modus wechselt.
- Passe alle Inhalte für weniger häufige Updates an. Du kannst Timer beispielsweise auf die nächste Minute statt auf die nächste Sekunde anzeigen.
- Führen Sie im
AmbientDetails
-Objekt, das anonEnterAmbient()
übergeben wurde, folgende Schritte aus:- Wenn
deviceHasLowBitAmbient
festgelegt ist, sollten Sie Anti-Aliasing nach Möglichkeit deaktivieren. - Wenn
burnInProtectionRequired
festgelegt ist, verschieben Sie die Visualisierung regelmäßig und vermeiden Sie durchgehend weiße Bereiche.
- Wenn
Wenn Sie Compose für Wear OS verwenden, empfehlen wir diese Callback-Methoden, um den state zu aktualisieren. Dadurch kann das System die UI entsprechend neu zusammensetzen.
Ein Beispiel dafür, wie dies erreicht werden kann, finden Sie im
Übungsbeispiel auf der Grundlage von Zusammensetzungen auf GitHub. Darin wird die zusammensetzbare Funktion AmbientAware
aus der Horologist-Bibliothek verwendet.