keywords: wear,ambient,alwayson
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 ein Nutzer während eines Laufs seine Herzfrequenz und sein Tempo sehen möchte, können Sie auch festlegen, was im Energiesparmodus angezeigt wird. 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:
- Erstellen oder aktualisieren Sie Ihr Projekt anhand der Konfigurationen auf der Seite Wearable-App 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-Displaymodus aktivieren
So verwenden Sie die Klasse
AmbientLifecycleObserver
:
-
Implementieren Sie die
AmbientLifecycleObserver.AmbientLifecycleCallback
-Schnittstelle, 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. } }
-
Erstellen Sie eine
AmbientLifecycleObserver
und registrieren Sie den Beobachter. Normalerweise wird dies inonCreate()
oder im Composable auf oberster Ebene verwendet, wenn Compose für Wear OS verwendet wird, damit das „Immer an“-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, indem Sie
removeObserver()
aufrufen, wenn das „Immer an“-Verhalten nicht mehr erforderlich ist. Sie können diese Methode beispielsweise in deronDestroy()
-Methode Ihrer Aktivität aufrufen.
Immer aktive Apps können in den Hintergrund verschoben werden
Ab Wear OS 5 werden Always-On-Apps vom System in den Hintergrund verschoben, nachdem sie für einen bestimmten Zeitraum im Inaktivmodus sichtbar waren. Nutzer können das Zeitlimit in den Systemeinstellungen konfigurieren.
Wenn Ihre App, die immer aktiv ist, Informationen zu einer laufenden Nutzeraufgabe anzeigt, z. B. zur Musikwiedergabe oder zu einer Trainingseinheit, sollten Sie die laufende Aktivität so lange sichtbar lassen, bis die Aufgabe abgeschlossen ist. Verwenden Sie dazu die Ongoing Activity API, um eine fortlaufende Benachrichtigung zu posten, die mit Ihrer durchgehend aktiven Aktivität verknüpft ist.
Damit das System die laufende Aktivität erkennt, muss die Touch-Intention der laufenden Benachrichtigung auf Ihre Always-On-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 beleuchten und den Großteil des Displays schwarz lassen. Es empfiehlt sich, im Bildschirmschonermodus nur wichtige Informationen anzuzeigen und mehr Details zu liefern, wenn der Nutzer den interaktiven Modus aktiviert.
- Passen Sie alle Inhalte an weniger häufige Aktualisierungen an. Timer werden beispielsweise auf die nächste Minute statt auf die nächste Sekunde genau angezeigt.
- Im
AmbientDetails
-Objekt, das anonEnterAmbient()
übergeben wird:- Wenn
deviceHasLowBitAmbient
festgelegt ist, deaktivieren Sie nach Möglichkeit das Anti-Aliasing. - 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 Rückrufmethoden zum Aktualisieren des Status zu verwenden. So kann das System Ihre Benutzeroberfläche entsprechend neu zusammenstellen.
Ein Beispiel dafür ist das
Beispiel für eine Compose-basierte Übung auf GitHub, das die AmbientAware
-Komponente aus der Horologist-Bibliothek verwendet.