На этой странице описаны лучшие практики запроса и управления разрешениями на использование местоположения в фоновом режиме.
Запросите разрешение на использование местоположения с параметром "Разрешить постоянно".
Начиная с 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 навигации решает эту проблему
Starting with version 5.4.0, the Navigation SDK handles this SecurityException without impacting the app, allowing navigation to continue running in the background. Additionally, the Navigation SDK includes the ACCESS_BACKGROUND_LOCATION permission in its AndroidManifest . This way, your app doesn't need to declare the permission itself, as Gradle merging will handle it. However, if a notification is not displayed to the user before the app goes into the background, the Navigation SDK will rely on the system to provide location updates. These system updates may not be frequent or precise and result in suboptimal navigation experience. For this reason, we recommend that you also prompt users for background location access.
Что могут сделать разработчики приложений для повышения точности определения местоположения при навигации?
Вы можете повысить точность сигнала местоположения, используемого SDK навигации, обновив приложение таким образом, чтобы оно запрашивало у пользователей разрешение на доступ к местоположению в фоновом режиме. Для получения дополнительной информации см. раздел «Запрос разрешений на доступ к местоположению с пометкой «Разрешить постоянно»» .