На этой странице описаны лучшие практики запроса и управления разрешениями на использование местоположения в фоновом режиме.
Запросите разрешение на использование местоположения с параметром "Разрешить постоянно".
Начиная с Android 14 , приложениям необходимо иметь разрешение ACCESS_BACKGROUND_LOCATION для доступа к местоположению пользователя. 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) были введены новые ограничения на доступ приложений к местоположению пользователя в фоновом режиме. Для смягчения последствий этих изменений в версии 5.4.0 был обновлен SDK навигации, что позволило лучше управлять доступом к местоположению в фоновом режиме. Мы также рекомендуем обновить вашу реализацию, чтобы гарантировать, что ваше приложение по-прежнему будет иметь доступ к наиболее точным данным о местоположении.
Как изменения в Android 14 влияют на SDK навигации
При вызове startGuidance() в вашем приложении, служба переднего плана начинает отображать пользователю уведомления о пошаговой навигации. Пошаговая навигация зависит от доступа к местоположению пользователя для обновления маршрута и отображения корректных визуальных и звуковых подсказок. Начиная с Android 14, доступ к точному местоположению пользователя в фоновом режиме требует разрешения пользователя. По умолчанию, если приложение не имеет разрешения пользователя на доступ к местоположению в фоновом режиме и пытается запустить службу переднего плана для обновления местоположения, система генерирует исключение SecurityException , что приводит к сбою приложения.
Как SDK навигации решает эту проблему
Начиная с версии 5.4.0, SDK навигации обрабатывает это SecurityException без влияния на работу приложения, позволяя навигации продолжать работать в фоновом режиме. Кроме того, SDK навигации включает разрешение ACCESS_BACKGROUND_LOCATION в свой AndroidManifest . Таким образом, вашему приложению не нужно самостоятельно объявлять это разрешение, поскольку слияние Gradle сделает это за вас. Однако, если уведомление не отображается пользователю до перехода приложения в фоновый режим, SDK навигации будет полагаться на систему для предоставления обновлений местоположения. Эти системные обновления могут быть нечастыми или неточными, что приводит к неоптимальному опыту навигации. По этой причине мы рекомендуем также запрашивать у пользователей разрешение на доступ к местоположению в фоновом режиме.
Что могут сделать разработчики приложений для повышения точности определения местоположения при навигации?
Вы можете повысить точность сигнала местоположения, используемого SDK навигации, обновив приложение таким образом, чтобы оно запрашивало у пользователей разрешение на доступ к местоположению в фоновом режиме. Для получения дополнительной информации см. раздел «Запрос разрешений на доступ к местоположению с пометкой «Разрешить постоянно»» .