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