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