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