В этом разделе описаны некоторые типичные сценарии сбора данных о местоположении, а также рекомендации по оптимальному использованию API Geofencing и Fused Location Provider.
Обновления, видимые пользователю или выполняемые в активном режиме
Пример: картографическое приложение, которому требуется частое и точное обновление данных с очень низкой задержкой. Все обновления происходят на переднем плане: пользователь начинает действие, использует данные о местоположении и через короткое время прекращает действие.
Используйте метод setPriority() со значением PRIORITY_HIGH_ACCURACY или PRIORITY_BALANCED_POWER_ACCURACY.
Интервал, указанный в методе setIntervalMillis(), зависит от сценария использования. Для сценариев в реальном времени установите значение в несколько секунд. В остальных случаях ограничьте интервал несколькими минутами (рекомендуется примерно две минуты или больше, чтобы минимизировать расход заряда батареи).
Узнавать местоположение устройства.
Пример: приложение для прогноза погоды запрашивает доступ к местоположению устройства.
Используйте метод getLastLocation(), который возвращает последнее доступное местоположение (в редких случаях оно может быть нулевым). Этот метод позволяет легко получить местоположение и не требует затрат, связанных с активным запросом обновлений местоположения. Используйте вместе с методом isLocationAvailable(), который возвращает true, если местоположение, возвращенное методом getLastLocation(), достаточно актуально.
Запускать обновления, когда пользователь находится в определенном месте
Пример: запрос обновлений, когда пользователь находится на определенном расстоянии от работы, дома или другого места.
Используйте геозоны в сочетании с обновлениями от комбинированного поставщика данных о местоположении. Запрашивайте обновления, когда приложение получает триггер входа в геозону, и удаляйте обновления, когда приложение получает триггер выхода из геозоны. Это гарантирует, что приложение будет получать более точные данные о местоположении, только когда пользователь входит в определенную область.
Типичный рабочий процесс для этого сценария может включать в себя показ уведомления при входе в геозону и запуск действия, содержащего код для запроса обновлений, когда пользователь нажимает на уведомление.
Запуск обновлений на основе статуса активности пользователя
Пример: запрашивать обновления, только когда пользователь едет на машине или велосипеде.
Используйте Activity Recognition API вместе с обновлениями от поставщика объединенных геоданных. Запрашивайте обновления, когда обнаруживается целевое действие, и удаляйте обновления, когда пользователь прекращает выполнять это действие.
Типичный рабочий процесс для этого варианта использования может включать в себя показ уведомления об обнаруженном действии и запуск действия, содержащего код для запроса обновлений, когда пользователь нажимает на уведомление.
Длительное обновление данных о местоположении в фоновом режиме, связанное с географическими областями
Пример: пользователь хочет получать уведомления, когда устройство находится вблизи розничного магазина.
Это отличный пример использования геозонирования. Поскольку в этом случае почти наверняка используется доступ к данным о местоположении в фоновом режиме, используйте метод addGeofences(GeofencingRequest, PendingIntent).
Задайте следующие параметры конфигурации:
Если вы отслеживаете переходы в режим ожидания, используйте метод
setLoiteringDelay(), передавая значение примерно пять минут или меньше.Используйте метод
setNotificationResponsiveness(), передав значение, равное примерно пяти минутам. Однако если ваше приложение может работать с дополнительной задержкой, рекомендуем использовать значение около 10 минут.
В приложении можно зарегистрировать не более 100 геозон одновременно. Например, если приложение отслеживает большое количество розничных магазинов, оно может зарегистрировать большую геозону (на уровне города) и динамически регистрировать меньшие геозоны (для местоположений в пределах города) для магазинов в пределах большей геозоны. Когда пользователь входит в большую геозону, добавьте меньшие геозоны. Когда пользователь выходит из большой геозоны, удалите меньшие геозоны и повторно зарегистрируйте геозоны для новой области.
Долгосрочное обновление данных о местоположении в фоновом режиме без видимого компонента приложения.
Пример: приложение, которое пассивно отслеживает местоположение
По возможности используйте метод setPriority() с параметром PRIORITY_PASSIVE, так как он почти не расходует заряд батареи. Если использовать PRIORITY_PASSIVE невозможно, используйте PRIORITY_BALANCED_POWER_ACCURACY или PRIORITY_LOW_POWER. Не используйте PRIORITY_HIGH_ACCURACY для длительной работы в фоновом режиме, так как это существенно увеличивает расход заряда батареи.
Если вам нужно больше данных о местоположении, используйте пассивное определение местоположения, вызвав метод setMinUpdateIntervalMillis() и передав ему меньшее значение, чем вы передаете методу setIntervalMillis(). В сочетании с параметром PRIORITY_PASSIVE пассивное определение местоположения позволяет получать данные, вычисленные другими приложениями, без дополнительных затрат.
Ограничьте частоту, добавив задержку с помощью метода setMaxUpdateDelayMillis(). Например, если вы используете метод setIntervalMillis() со значением около 10 минут, то для setMaxUpdateDelayMillis() следует задать значение от 30 до 60 минут. При использовании этих параметров местоположение вычисляется для вашего приложения примерно каждые 10 минут, но приложение активируется только каждые 30–60 минут, когда становятся доступны некоторые данные о местоположении в виде пакетного обновления. Этот подход позволяет получить больше данных и снизить расход заряда батареи, но увеличивает задержку.
Частые обновления с высокой точностью, когда пользователь взаимодействует с другими приложениями.
Пример: навигатор или фитнес-приложение, которое продолжает работать, когда пользователь выключает экран или открывает другое приложение.
Используйте активную службу. Если ваше приложение может выполнять от имени пользователя действия, требующие значительных ресурсов, рекомендуется сообщать ему об этом. Для активной службы требуется постоянное уведомление. Подробнее об уведомлениях…