słowa kluczowe: wear,ambient,alwayson
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 swojej aplikacji.
Konfigurowanie projektu
Aby włączyć tryb obrazu w pracy, wykonaj te czynności:
- 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łącz tryb Always On Display
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 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ż potrzebne. Możesz na przykład wywołać tę metodę w metodzieonDestroy()
swojej aktywności.
Aplikacje zawsze włączone mogą przechodzić na drugi plan
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ć zachować widoczność bieżącej aktywności 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ę, wykonaj te czynności:
- 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ć dopiero w trybie interaktywnym.
- Dostosuj treści, aby aktualizacje były rzadziej publikowane. Na przykład wyświetlanie zegara do najbliższej minuty zamiast do najbliższej sekundy.
- 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ść
Podczas korzystania z Compose na Wear OS zalecamy używanie tych metod wywołania, aby aktualizować stan. Pozwala to systemowi odpowiednio przebudować interfejs użytkownika.
Przykładem tego jest
przykładowy ćwiczenia na GitHubie, który korzysta z komponentu AmbientAware
z biblioteki Horologist.