В этом разделе описаны некоторые типичные сценарии сбора данных о местоположении, а также рекомендации по оптимальному использованию API-интерфейсов геозон и объединенных поставщиков местоположений.
Обновления, видимые пользователем или на переднем плане
Пример: картографическое приложение, которому необходимы частые и точные обновления с очень низкой задержкой. Все обновления происходят на переднем плане: пользователь запускает действие, использует данные о местоположении, а затем через короткое время останавливает действие.
Используйте метод setPriority()
со значением PRIORITY_HIGH_ACCURACY
или PRIORITY_BALANCED_POWER_ACCURACY
.
Интервал, указанный в методе setInterval()
зависит от варианта использования: для сценариев реального времени установите значение в несколько секунд; в противном случае ограничьтесь несколькими минутами (рекомендуется примерно две минуты или больше, чтобы минимизировать расход заряда батареи).
Знать местоположение устройства
Пример. Приложение погоды хочет узнать местоположение устройства.
Используйте метод getLastLocation()
, который возвращает последнее доступное местоположение (которое в редких случаях может быть нулевым). Этот метод обеспечивает простой способ определения местоположения и не требует затрат, связанных с активным запросом обновлений местоположения. Используйте в сочетании с методом isLocationAvailable()
, который возвращает true
, если местоположение, возвращаемое методом getLastLocation()
достаточно актуально.
Запускать обновления, когда пользователь находится в определенном месте
Пример. Запрос обновлений, когда пользователь находится на определенном расстоянии от работы, дома или другого места.
Используйте геозоны в сочетании с обновлениями поставщика объединенных местоположений. Запрашивайте обновления, когда приложение получает триггер входа в геозону, и удаляйте обновления, когда приложение получает триггер выхода из геозоны. Это гарантирует, что приложение будет получать более детальные обновления местоположения только тогда, когда пользователь войдет в определенную область.
Типичный рабочий процесс для этого сценария может включать в себя отображение уведомления при переходе в геозону и запуск действия, содержащего код для запроса обновлений, когда пользователь касается уведомления.
Запуск обновлений в зависимости от состояния активности пользователя
Пример. Запрос обновлений только тогда, когда пользователь водит машину или ездит на велосипеде.
Используйте API распознавания действий в сочетании с обновлениями объединенного поставщика местоположений. Запрашивайте обновления при обнаружении целевого действия и удаляйте обновления, когда пользователь прекращает выполнять это действие.
Типичный рабочий процесс для этого варианта использования может включать отображение уведомления об обнаруженном действии и запуск действия, содержащего код для запроса обновлений, когда пользователь касается уведомления.
Длительные фоновые обновления местоположения, привязанные к географическим регионам.
Пример. Пользователь хочет получать уведомления, когда устройство находится в непосредственной близости от розничного продавца.
Это отличный вариант использования геозон. Поскольку вариант использования почти наверняка включает фоновое местоположение, используйте метод addGeofences(GeofencingRequest, PendingIntent)
.
Вам следует установить следующие параметры конфигурации:
Если вы отслеживаете переходы задержки, используйте метод
setLoiteringDelay()
передавая значение примерно пять минут или меньше.Используйте
setNotificationResponsiveness()
, передав значение примерно пять минут. Однако рассмотрите возможность использования значения примерно в десять минут, если ваше приложение может справиться с дополнительной задержкой отклика.
Приложение может зарегистрировать не более 100 геозон одновременно. В случае использования, когда приложению требуется отслеживать большое количество вариантов розничных продавцов, приложению может потребоваться зарегистрировать большую геозону (на уровне города) и динамически зарегистрировать меньшие геозоны (для местоположений в городе) для магазинов в пределах более крупной геозоны. Когда пользователь входит в большую геозону, добавьте геозоны меньшего размера; когда пользователь выходит из более крупной геозоны, удалите меньшие геозоны и перерегистрируйте геозоны для новой области.
Длительные фоновые обновления местоположения без видимого компонента приложения.
Пример: приложение, которое пассивно отслеживает местоположение.
Если возможно, используйте метод setPriority()
с опцией PRIORITY_NO_POWER
, поскольку он практически не разряжает батарею. Если использование PRIORITY_NO_POWER
невозможно, используйте PRIORITY_BALANCED_POWER_ACCURACY
или PRIORITY_LOW_POWER
, но избегайте использования PRIORITY_HIGH_ACCURACY
для продолжительной фоновой работы, поскольку этот параметр существенно разряжает батарею.
Если вам нужно больше данных о местоположении, используйте пассивное местоположение, вызвав метод setFastestInterval()
передав меньшее значение, чем то, которое вы передаете в setInterval()
. В сочетании с опцией PRIORITY_NO_POWER
пассивное определение местоположения может без каких-либо дополнительных затрат предоставлять местоположение, рассчитанное другими приложениями.
Умерьте частоту, добавив некоторую задержку с помощью метода setMaxWaitTime()
. Например, если вы используете метод setinterval()
со значением примерно 10 минут, вам следует рассмотреть возможность вызова setMaxWaitTime()
со значением от 30 до 60 минут. При использовании этих параметров местоположение вашего приложения вычисляется примерно каждые 10 минут, но приложение просыпается только каждые 30–60 минут, при этом некоторые данные о местоположении доступны в виде пакетного обновления. При таком подходе задержка позволяет получить больше доступных данных и повысить производительность батареи.
Частые обновления с высокой точностью, пока пользователь взаимодействует с другими приложениями.
Пример: приложение для навигации или фитнеса, которое продолжает работать, когда пользователь выключает экран или открывает другое приложение.
Используйте службу переднего плана. Если ваше приложение потенциально будет выполнять дорогостоящую работу от имени пользователя, рекомендуется информировать пользователя об этой работе. Служба переднего плана требует постоянного уведомления. Дополнительную информацию см. в разделе Обзор уведомлений .