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