Ограничения фонового местоположения

Стремясь снизить энергопотребление, Android 8.0 (уровень API 26) ограничивает частоту, с которой приложение может получать текущее местоположение пользователя, когда приложение работает в фоновом режиме . В этих условиях приложения могут получать обновления местоположения только несколько раз в час.

Примечание. Эти ограничения применяются ко всем приложениям, используемым на устройствах под управлением Android 8.0 (уровень API 26) или выше, независимо от целевой версии SDK приложения .

Такое поведение определения местоположения особенно важно иметь в виду, если ваше приложение использует оповещения в реальном времени или обнаружение движения во время работы в фоновом режиме.

Поведение приложения переднего плана сохраняется.

Если приложение находится на переднем плане на устройстве под управлением Android 8.0 (уровень API 26), поведение обновления местоположения такое же, как на Android 7.1.1 (уровень API 25) и ниже.

Предупреждение. Если ваше приложение получает обновления о местоположении практически в реальном времени в течение длительного периода времени, время автономной работы устройства значительно сокращается.

Настройка поведения местоположения вашего приложения

Подумайте, не могут ли варианты использования вашего приложения для работы в фоновом режиме вообще оказаться успешными, если ваше приложение получает нечастые обновления местоположения. В этом случае вы можете получать обновления местоположения чаще, выполнив одно из следующих действий:

  • Выведите свое приложение на передний план.
  • Запустите службу переднего плана в своем приложении, вызвав startForegroundService() . Когда такая служба переднего плана активна, она отображается в виде текущего уведомления в области уведомлений .

    Внимание: если ваше приложение запускает службу переднего плана во время работы в фоновом режиме на устройстве под управлением Android 11 (уровень API 30) или выше, ваше приложение не сможет получить доступ к информации о местоположении, если пользователь не предоставил разрешение ACCESS_BACKGROUND_LOCATION вашему приложению. Дополнительные сведения см. в руководстве по ограничениям на использование , связанным с приоритетными службами.

  • Используйте элементы API Geofencing, такие как GeofencingClient , которые оптимизированы для минимизации энергопотребления.
  • Используйте пассивный прослушиватель местоположения, который может получать обновления местоположения быстрее, если есть приложения на переднем плане, запрашивающие обновления местоположения с большей скоростью.

Примечание. Если вашему приложению требуется доступ к истории местоположений, содержащей частые обновления, используйте пакетную версию элементов API Fused Location Provider, например интерфейс FusedLocationProviderApi . Когда ваше приложение работает в фоновом режиме, этот API получает данные о местоположении пользователя чаще, чем непакетный API. Однако имейте в виду, что ваше приложение по-прежнему получает обновления пакетами всего несколько раз в час.

Затронутые API

Изменения в поведении определения местоположения в фоновых приложениях влияют на следующие API:

Поставщик объединенного местоположения (FLP)
  • Если ваше приложение работает в фоновом режиме, служба системы определения местоположения вычисляет новое местоположение для вашего приложения только несколько раз в час. Это происходит даже тогда, когда ваше приложение запрашивает более частые обновления местоположения.

    Однако, используя пакетную версию FLP, вы получаете доступ к более частой истории местоположений после того, как ваше приложение получает пакетное обновление, которое также происходит только несколько раз в час.

  • Если ваше приложение работает на переднем плане, частота выборки местоположения не изменится по сравнению с Android 7.1.1 (уровень API 25).
Геофенсинг
  • Фоновые приложения могут получать события перехода к геозонам чаще, чем обновления от поставщика Fused Location.
  • Среднее время отклика на событие геозоны — примерно каждые пару минут.
Измерения GNSS и навигационные сообщения GNSS
  • Когда ваше приложение находится в фоновом режиме, обратные вызовы, зарегистрированные для получения выходных данных от GnssMeasurement и GnssNavigationMessage перестают выполняться.
Менеджер местоположения
  • Обновления местоположения предоставляются фоновым приложениям только несколько раз в час.

    Примечание. Если ваше приложение работает на устройстве с установленными службами Google Play, настоятельно рекомендуется вместо этого использовать Fused Location Provider (FLP) .

Менеджер Wi-Fi
Метод startScan() выполняет полную проверку фоновых приложений всего несколько раз в час. Если вскоре после этого фоновое приложение снова вызывает этот метод, класс WifiManager предоставляет кэшированные результаты предыдущего сканирования.