Определить местоположение на Wear OS

Компактный и удобный для взгляда форм-фактор часов делает 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 .

{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %}