Небольшой размер экрана часов делает Wear OS идеальной платформой для приложений, которые записывают, передают и используют данные о местоположении пользователя. Например, вы можете создать приложение, которое будет показывать пользователям в реальном времени информацию о расстоянии, скорости и направлении движения или подсказки об окружающих объектах.
Подробнее о том, как создавать приложения, которые используют данные о местоположении…
В некоторых часах есть встроенный датчик GPS, который получает данные о местоположении без подключения к телефону. Когда вы запрашиваете данные о местоположении в приложении для часов, система получает их с телефона или часов наиболее энергоэффективным способом. Поэтому даже без датчика GPS на часах вы можете получать информацию о местоположении.
Чтобы уменьшить влияние сбора данных о местоположении на время работы от батареи, вызовите setPriority() со значением PRIORITY_BALANCED_POWER_ACCURACY.
Разные настройки приоритета могут по-разному оптимизировать чипы.
По возможности экономьте заряд батареи, запрашивая местоположение не чаще одного раза в минуту с помощью setInterval().
Как описано в следующих разделах, ваше приложение должно обрабатывать потерю данных о местоположении, когда часы без датчика отключаются от телефона.
Как выбрать способ
Существует два способа передавать данные о местоположении в приложение для Wear OS: с помощью поставщика геоданных из нескольких источников (FLP) или сервисов наблюдения за здоровьем Wear (WHS). FLP – это API сервисов Google Play.
Используйте FLP в следующих случаях:
- Вам нужны данные о местоположении в определенный момент, а не постоянно, например чтобы отметить место парковки автомобиля.
- Вам нужно, чтобы геолокация была включена постоянно, но история местоположений не нужна.
Используйте 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.
Рекомендации по тестированию
Имитируйте местоположение и другие данные датчиков с помощью расширенных элементов управления эмулятора Wear OS. Подробнее о том, как имитировать работу датчиков…