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 .