Определить местоположение на 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.

Используйте 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 .

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