Gdy użytkownik przestanie korzystać z zegarka, Wear OS automatycznie przełączy aktywną aplikację w tryb niskiego poboru mocy. Jest to tzw. tryb dźwięków otoczenia. Jeśli użytkownik ponownie wejdzie w interakcję z zegarkiem w określonym czasie, Wear OS przeniesie go z powrotem do aplikacji, w której skończył.
W przypadku konkretnych zastosowań – na przykład gdy użytkownik chce wyświetlać tętno i tempo podczas biegu – możesz też kontrolować, co ma się wyświetlać w trybie nieaktywnym o niskim poborze mocy. 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 ma wpływ na czas pracy na baterii, dlatego weź to pod uwagę, dodając tę funkcję do aplikacji.
Konfigurowanie projektu
Aby włączyć tryb nieaktywny:
- Utwórz lub zaktualizuj projekt na podstawie konfiguracji na stronie Tworzenie i uruchamianie aplikacji na urządzenie do noszenia.
- Dodaj uprawnienie
WAKE_LOCK
do pliku manifestu Androida:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Włączanie trybu zawsze włączonego
Aby użyć klasy
AmbientLifecycleObserver
:
-
Zaimplementuj interfejs
AmbientLifecycleObserver.AmbientLifecycleCallback
, jak w tym przykładzie. Na tym etapie metody są puste, ale w dalszej części tego przewodnika znajdziesz szczegółowe informacje o tym, jakie zmiany należy wprowadzić w wizualizacji, aby 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. } }
-
Utwórz
AmbientLifecycleObserver
i zarejestruj obserwatora. Zazwyczaj jest to używane w komponencieonCreate()
lub w komponencie najwyższego poziomu, jeśli używasz Compose na Wear OS, aby umożliwić działanie funkcji zawsze włączonej przez cały czas trwania aktywności.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- Usuń obserwatora, wywołując funkcję
removeObserver()
, gdy zachowanie „zawsze włączone” nie jest już wymagane. Możesz na przykład wywołać tę metodę w metodzieonDestroy()
swojej aktywności.
Aplikacje zawsze włączone mogą działać 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 systemu.
Jeśli aplikacja zawsze włączona wyświetla informacje o bieżącym zadaniu użytkownika, np. odtwarzaniu muzyki lub sesji treningowej, możesz chcieć, aby ta aktywność była widoczna do czasu 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 podczas wdrażania trybu Zawsze na ekranie wygląd ekranu nie zmienia się, gdy zegarek przechodzi w tryb Ambient. Możesz zmodyfikować to zachowanie, zastępując metody w pliku AmbientLifecycleCallback
.
Aby oszczędzać energię:
- Oświetla mniej pikseli i pozostawia większość ekranu w kolorze czarnym. Zastanów się, czy w trybie pełnoekranowym nie wystarczy wyświetlać tylko najważniejszych informacji, a więcej szczegółów podawać, gdy użytkownik wejdzie w tryb interaktywny.
- Dostosuj treści, aby były aktualizowane rzadziej. Na przykład wyświetlanie zegara w pobliższej minucie zamiast w pobliższej sekundzie.
- W obiekcie
AmbientDetails
przekazanym do metodyonEnterAmbient()
:- Jeśli ustawiona jest wartość
deviceHasLowBitAmbient
, wyłącz w miarę możliwości wygładzanie krawędzi. - Jeśli wybrana jest opcja
burnInProtectionRequired
, przesuwaj wizualizację co jakiś czas i unikaj obszarów w pełni białych.
- Jeśli ustawiona jest wartość
Lista kontrolna wyświetlania bez przerw
Czasami możesz chcieć mieć maksymalną kontrolę nad wyświetlaczem, gdy urządzenie przechodzi przez różne stany, na przykład gdy aplikacja do ćwiczeń chce uniknąć wyświetlania tarczy zegarka podczas treningu. W takich przypadkach wykonaj te czynności:
- Zaimplementuj interfejs AmbientLifecycleObserver.AmbientLifecycleCallback.
- Utwórz nowy układ oszczędzający energię, który będzie używany, gdy urządzenie będzie w trybie ambient.
- Podczas treningu wdróż trwającą aktywność.
Przykładem tego jest
przykładowy ćwiczenia na GitHubie, który korzysta z komponentu AmbientAware
z biblioteki Horologist.