Wear OS автоматически переводит активное приложение в режим пониженного энергопотребления, когда пользователь больше не использует свои часы. Это называется режимом окружающей среды системы . Если пользователь снова взаимодействует с часами в течение определенного периода времени, Wear OS возвращает пользователя в приложение с того места, где он остановился.
В конкретных случаях использования (например, если пользователь хочет видеть частоту сердечных сокращений и темп во время пробежки) вы также можете управлять тем, что отображается в режиме окружающей среды с низким энергопотреблением. Приложения Wear OS, которые работают как в окружающем, так и в интерактивном режимах, называются постоянно включенными приложениями .
Постоянное отображение приложения влияет на время автономной работы, поэтому учтите это влияние при добавлении этой функции в свое приложение.
Настройте свой проект
Для поддержки окружающего режима выполните следующие действия:
- Создайте или обновите свой проект на основе конфигураций на странице «Создание и запуск носимого приложения» .
- Добавьте разрешение
WAKE_LOCK
в файл манифеста Android:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Включить режим «всегда включен»
Чтобы использовать класс AmbientLifecycleObserver
, выполните следующие действия:
- Реализуйте интерфейс
AmbientLifecycleObserver.AmbientLifecycleCallback
, как показано в следующем примере. На этом этапе методы пусты, но позже в руководстве приводится подробная информация о том, какие изменения вы должны внести в визуализацию для входа в окружающий режим и выхода из него.Котлин
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. } }
- Создайте
AmbientLifecycleObserver
и зарегистрируйте наблюдателя. Обычно это используется вonCreate()
или в компоновке верхнего уровня при использовании Compose for Wear OS, чтобы включить постоянное поведение на протяжении всего жизненного цикла действия.Котлин
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- Удалите наблюдателя, вызвав метод
removeObserver()
, когда постоянное поведение больше не требуется. Например, вы можете вызвать этот метод в методеonDestroy()
вашего действия.
Постоянно включенные приложения могут переходить в фоновый режим
Начиная с Wear OS 5, система перемещает постоянно включенные приложения на задний план после того, как они будут видны в обычном режиме в течение определенного периода времени. Пользователи могут настроить тайм-аут в настройках системы.
Если ваше постоянно включенное приложение отображает информацию о текущей задаче пользователя, например, воспроизведении музыки или сеансе тренировки, возможно, вам захочется сохранить текущую активность видимой до тех пор, пока задача не завершится. Для этого используйте API текущей активности , чтобы опубликовать постоянное уведомление, связанное с вашей постоянной активностью.
Чтобы система распознала текущее действие, намерение касания текущего уведомления должно указывать на ваше постоянное действие, как показано в следующем фрагменте кода:
// 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()
)
Измените внешний вид в окружающем режиме
По умолчанию при реализации режима «всегда включен» экран не меняет свой внешний вид, когда часы переходят в режим окружающей среды. Вы можете изменить это поведение, переопределив методы в AmbientLifecycleCallback
.
Чтобы сэкономить электроэнергию, сделайте следующее:
- Подсвечивайте меньше пикселей и оставляйте большую часть экрана черной. Рассмотрите возможность отображения только важной информации в обычном режиме и предоставляйте более подробную информацию, когда пользователь входит в интерактивный режим.
- Настройте любой контент для менее частых обновлений. Например, показывайте таймеры с точностью до минуты, а не до секунды.
- В объекте
AmbientDetails
, переданном вonEnterAmbient()
:- Если установлено
deviceHasLowBitAmbient
, отключите сглаживание, где это возможно. - Если установлен
burnInProtectionRequired
, периодически перемещайте визуализацию и избегайте сплошных белых областей.
- Если установлено
При использовании Compose for Wear OS мы рекомендуем использовать эти методы обратного вызова для обновления состояния , что позволяет системе соответствующим образом перекомпоновать ваш пользовательский интерфейс.
Пример того, как этого можно достичь, можно найти в примере упражнения на основе композиции на GitHub, в котором используется компонуемый компонент AmbientAware
из библиотеки Horological .