Небольшой, удобный форм-фактор часов делает Wear OS идеальной платформой для приложений, которые записывают, сообщают и реагируют на местоположение пользователя. Например, вы можете создавать приложения, которые в режиме реального времени сообщают пользователям об их расстоянии, скорости и направлении или предоставляют наглядные подсказки об окружении пользователей.
Дополнительные сведения см. в разделе Создание приложений с поддержкой определения местоположения .
Некоторые часы имеют встроенный датчик GPS, который получает данные о местоположении без подключения телефона. Когда вы запрашиваете данные о местоположении в приложении для часов, система получает местоположение либо с телефона, либо с часов, используя наиболее энергоэффективный метод. Таким образом, даже без GPS-датчика в часах вы все равно сможете получать информацию о местоположении.
Чтобы уменьшить влияние получения данных о местоположении на срок службы батареи, вызовите setPriority()
со значением PRIORITY_BALANCED_POWER_ACCURACY
. Различные настройки приоритета могут по-разному оптимизировать чипы .
По возможности экономьте заряд батареи, запрашивая местоположение не чаще одного раза в минуту с помощью setInterval()
.
Как описано в следующих разделах, вашему приложению необходимо обрабатывать потерю данных о местоположении , когда часы без датчика отключаются от телефона.
Выберите свой метод
Есть несколько способов предоставить данные о местоположении приложению Wear OS. Вы можете использовать Fused Location Provider (FLP) или Wear Health Services (WHS) . FLP — это API сервисов Google Play.
Используйте FLP в следующих случаях:
- Вам нужны данные о местоположении в данный момент, а не постоянно, например, маркировка местоположения припаркованного автомобиля.
- Вам нужно постоянно определять местоположение, но вам не нужна история местоположений.
Используйте WHS в следующих случаях:
- Вам нужны данные от других датчиков или, вероятно, вам понадобятся данные от других датчиков в будущем.
- Ваше приложение представляет собой приложение для тренировок или упражнений, которому необходимо отслеживать данные о местоположении в течение определенного интервала времени.
Информацию о часах, сопряженных с iPhone, см. в разделе Данные о местоположении для часов, сопряженных с iPhone .
Используйте поставщика Fused Location
На часах получите данные о местоположении с помощью FusedLocationProviderClient
. FLP может использовать данные о местоположении с телефона. Дополнительные сведения см. в разделе Создание клиента служб определения местоположения .
Информацию о запросе обновлений местоположения и постоянном отслеживании местоположения пользователя см. в разделе Запрос обновлений местоположения .
Обнаружение встроенного GPS
Если пользователь отправляется на пробежку с часами, в которых отсутствует встроенный датчик GPS, и оставляет сопряженный телефон, приложение ваших часов не сможет получить данные о местоположении через подключенное устройство. Обнаружьте эту ситуацию в своем приложении и предупредите пользователя о том, что возможности определения местоположения недоступны.
Чтобы определить, есть ли в часах встроенный датчик GPS, вызовите метод hasSystemFeature()
с PackageManager.FEATURE_LOCATION_GPS
. Следующий код определяет, есть ли в часах встроенный датчик GPS, когда вы начинаете занятие:
Котлин
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) if (!hasGps()) { Log.d(TAG, "This hardware doesn't have GPS.") // Fall back to functionality that doesn't use location or // warn the user that location function isn't available. } } private fun hasGps(): Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
Ява
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); if (!hasGps()) { Log.d(TAG, "This hardware doesn't have GPS."); // Fall back to functionality that doesn't use location or // warn the user that location function isn't available. } ... } private boolean hasGps() { return getPackageManager().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
.
Рекомендуется для вас
- Примечание. Текст ссылки отображается, когда JavaScript отключен.
- Оптимизируйте место для аккумулятора
- Создать уведомление {:#notification}
- Определяйте, когда пользователи начинают или заканчивают действие