Небольшой, удобный форм-фактор часов делает 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
.
Пока рекомендаций нет.
Попытайтесь войти в свой аккаунт Google.