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

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

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

Начиная с 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) введены новые ограничения на доступ приложений к местоположению пользователя в фоновом режиме. Чтобы смягчить эти изменения, навигационный SDK был обновлен в версии 5.4.0, чтобы лучше управлять фоновым доступом к местоположению. Мы также рекомендуем вам обновить реализацию, чтобы ваше приложение по-прежнему имело доступ к наиболее точным данным о местоположении.

Как изменения в Android 14 влияют на навигационный SDK

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

Как навигационный SDK решает эту проблему

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

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

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