Рекомендации по использованию местоположения в фоновом режиме

На этой странице объясняются наилучшие практики запроса и управления разрешениями на использование данных о местоположении в фоновом режиме.

Запросите разрешение «Разрешить постоянно» на определение местоположения

Начиная с Android 14 , приложениям необходимо разрешение ACCESS_BACKGROUND_LOCATION для доступа к местоположению пользователя. Navigation SDK включает это разрешение в свой файл манифеста, поэтому вам не нужно явно запрашивать его (если это не требуется для других целей), поскольку слияние манифестов Gradle обеспечит его слияние с манифестом приложения.

Однако разрешения ACCESS_BACKGROUND_LOCATION недостаточно для доступа к данным о местоположении в фоновом режиме, поэтому мы рекомендуем запрашивать у пользователей разрешение «Разрешить постоянно». Это гарантирует, что приложение сможет работать в фоновом режиме и показывать уведомления, что повышает точность определения местоположения во время навигации.

В подсказке должно быть объяснено пользователям, как предоставление разрешения повысит точность определения местоположения и улучшит их возможности навигации, когда приложение работает в фоновом режиме.

образец разрешения диалог

Дополнительную информацию о запросе у пользователей доступа к данным о местоположении см. в разделе Запрос разрешений на доступ к данным о местоположении | Датчики и местоположение | Разработчики Android в документации для разработчиков Android.

Обеспечить надлежащую очистку навигационных уведомлений

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

  • После вызова startGuidance() обязательно вызовите stopGuidance() или clearDestination() .
  • После регистрации ArrivalListener обязательно отмените его регистрацию.
  • После регистрации RoadSnappedLocationProvider обязательно отмените его регистрацию.

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

При повторном вызове методов NavigationApi#initForegroundServiceManager сначала вызовите NavigationApi#clearForegroundServiceManager.

Если ваше приложение использует ForegroundServiceManager , вызовите NavigationApi#clearForegroundServiceManager перед вызовом NavigationApi#initForegroundServiceManagerProvider , а если вы уже инициализировали ForegroundServiceManager , вызовите NavigationApi#initForegroundServiceManagerMessageAndIntent . Это можно сделать, чтобы обновить идентификатор уведомления или его содержимое после инициализации диспетчера служб переднего плана.

О новых ограничениях, введенных в Android 14

В Android 14 (Android U) появились новые ограничения на доступ приложений к данным о местоположении пользователя в фоновом режиме. Чтобы смягчить эти изменения, Navigation SDK был обновлён в версии 5.4.0 для более эффективного управления доступом к данным о местоположении в фоновом режиме. Мы также рекомендуем вам обновить свою реализацию, чтобы ваше приложение продолжало получать доступ к наиболее точным данным о местоположении.

Как изменения в Android 14 влияют на Navigation SDK

При вызове startGuidance() в приложении активная служба начинает показывать пользователю уведомления для пошаговой навигации. Для пошаговой навигации необходим доступ к местоположению пользователя для обновления маршрута и отображения корректных визуальных и звуковых подсказок. Начиная с Android 14, для доступа к точному местоположению пользователя в фоновом режиме требуется разрешение пользователя. По умолчанию, если приложение не имеет разрешения пользователя на доступ к данным о местоположении в фоновом режиме и пытается запустить активную службу для обновления местоположения, система выдаёт исключение SecurityException , что приводит к сбою приложения.

Как Navigation SDK решает эту проблему

Начиная с версии 5.4.0, Navigation SDK обрабатывает это SecurityException , не влияя на работу приложения, позволяя навигации продолжать работу в фоновом режиме. Кроме того, Navigation SDK включает разрешение ACCESS_BACKGROUND_LOCATION в свой AndroidManifest . Таким образом, вашему приложению не нужно объявлять это разрешение самостоятельно, так как слияние Gradle обеспечит его. Однако, если уведомление не отображается пользователю до перехода приложения в фоновый режим, Navigation SDK будет полагаться на систему для предоставления обновлений местоположения. Эти системные обновления могут быть нечастыми или неточными, что может привести к неоптимальной навигации. Поэтому мы рекомендуем вам также запрашивать у пользователей доступ к данным о местоположении в фоновом режиме.

Что могут сделать разработчики приложений для повышения точности определения местоположения при навигации

Вы можете повысить точность данных о местоположении, используемых Navigation SDK, обновив приложение так, чтобы оно запрашивало у пользователей доступ к данным о местоположении в фоновом режиме. Подробнее см. в разделе Запрос разрешений на доступ к данным о местоположении «Разрешить постоянно» .