Компактный и удобный для взгляда форм-фактор часов делает Wear OS идеальной платформой для приложений, которые регистрируют местоположение пользователя, сообщают о нём и реагируют на него. Например, вы можете создавать приложения, которые предоставляют пользователям информацию о пройденном расстоянии, скорости и направлении в режиме реального времени, а также предоставляют визуальные подсказки об окружающей обстановке.
Дополнительную информацию см. в статье Создание приложений с учетом местоположения .
Некоторые часы оснащены встроенным GPS-датчиком, который получает данные о местоположении без подключения телефона. При запросе данных о местоположении в приложении для часов система получает их либо с телефона, либо с часов наиболее энергоэффективным способом. Таким образом, даже без GPS-датчика в часах вы всё равно сможете получать информацию о местоположении.
Чтобы уменьшить влияние данных о местоположении на время работы батареи, вызовите setPriority()
со значением PRIORITY_BALANCED_POWER_ACCURACY
. Различные настройки приоритета могут по-разному оптимизировать работу микросхем .
По возможности экономьте заряд батареи, запрашивая местоположение не чаще одного раза в минуту с помощью setInterval()
.
Как описано в последующих разделах, ваше приложение должно обрабатывать потерю данных о местоположении, когда часы без датчика отключаются от телефона.
Выберите свой метод
Существует два способа предоставить данные о местоположении приложению Wear OS. Вы можете использовать Fused Location Provider (FLP) или Wear Health Services (WHS) . FLP — это API сервисов Google Play.
Используйте ФЛП в следующих случаях:
- Вам нужны данные о местоположении в данный момент, а не постоянно, например, отмечая местоположение припаркованной машины.
- Вам нужны постоянные данные о местоположении, но не нужна история местоположений.
Используйте WHS в следующих случаях:
- Вам нужны данные с других датчиков или, скорее всего, вам понадобятся данные с других датчиков в будущем.
- Ваше приложение представляет собой приложение для тренировок или упражнений, которому необходимо отслеживать данные о местоположении в течение определенного интервала времени.
Используйте поставщика объединённого местоположения
На часах данные о местоположении можно получить с помощью FusedLocationProviderClient
. FLP может использовать данные о местоположении с телефона. Подробнее см. в разделе Создание клиента служб определения местоположения .
Информацию о запросе обновлений местоположения и постоянном отслеживании местоположения пользователя см. в разделе Запрос обновлений местоположения .
Обнаружение бортового GPS
Если пользователь выходит на пробежку с часами без встроенного GPS-датчика и оставляет сопряженный телефон, ваше приложение для часов не сможет получать данные о местоположении через подключенное устройство. Отслеживайте эту ситуацию в приложении и предупреждайте пользователя о том, что функции определения местоположения недоступны.
Чтобы определить, есть ли в часах встроенный GPS-датчик, вызовите метод hasSystemFeature()
с PackageManager.FEATURE_LOCATION_GPS
. Следующий код определяет, есть ли в часах встроенный GPS-датчик, при запуске действия:
class LocationActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... } fun hasGps(): Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS) }
Обработка событий отключения
Если часы не имеют встроенного GPS-датчика и теряют соединение с телефоном, они теряют поток данных о местоположении. Если ваше приложение ожидает постоянного потока данных, оно должно обнаруживать потерю соединения, предупреждать пользователя и корректно снижать функциональность.
Как и в случае с мобильным устройством, при запросе обновления местоположения с помощью FusedLocationProviderClient.requestLocationUpdates()
вы передаёте либо LocationCallback
, либо PendingIntent
. Оба эти объекта включают информацию о местоположении и статус LocationAvailability
.
При использовании параметра LocationCallback
переопределите onLocationAvailability()
для получения обновлений о статусе доступности местоположения.
При использовании параметра PendingIntent
и возврате Intent
извлеките статус доступности местоположения из Intent
с помощью метода LocationAvailability.extractLocationAvailability(Intent)
.
Местоположение дескриптора не найдено
При потере сигнала GPS вы можете получить последнее известное местоположение часов пользователя. Получение последнего известного местоположения полезно, когда вы не можете получить GPS-приёмник, а также когда у часов нет встроенного GPS-модуля и они теряют связь с телефоном. Подробнее см. в разделе «Получение последнего известного местоположения» .
Очистить местоположение с помощью пакетных вызовов
Если вы используете пакетные вызовы, вызывайте flushLocations()
, когда экран снова включается или возвращается из режима ожидания, чтобы немедленно вернуть все пакетные местоположения всем зарегистрированным LocationListeners
, LocationCallbacks
и Pending Intents
.