En esta página, se explican las prácticas recomendadas para solicitar y administrar permisos de uso de la ubicación en segundo plano.
Solicita permisos de ubicación "Permitir todo el tiempo"
A partir de Android 14, las apps deben tener el permiso ACCESS_BACKGROUND_LOCATION
para acceder a la ubicación del usuario.
El SDK de Navigation incluye este permiso en su archivo de manifiesto, por lo que no es necesario que lo solicites de forma explícita (si no se necesita para otros fines), ya que el combinador de manifiestos de Gradle garantizará que se combine con el manifiesto de la app.
Sin embargo, tener el permiso de ACCESS_BACKGROUND_LOCATION
no es suficiente para acceder a la ubicación en segundo plano, por lo que te recomendamos que solicites a los usuarios permisos de ubicación de "Permitir todo el tiempo". Esto garantiza que la app pueda ejecutarse en segundo plano y mostrar notificaciones, lo que maximiza la precisión de la ubicación durante la navegación.
La instrucción debe explicar a los usuarios cómo otorgar el permiso mejorará la precisión de la ubicación y su experiencia de navegación cuando la app se ejecute en segundo plano.
Para obtener más información sobre cómo solicitar a los usuarios acceso a la ubicación, consulta Solicita permisos de ubicación | Sensores y ubicación | Android Developers en la documentación para desarrolladores de Android.
Garantiza la limpieza adecuada de las notificaciones de navegación
Para asegurarte de que tu app no mantenga activas las notificaciones después de que ya no sean necesarias, realiza los siguientes pasos de limpieza:
- Después de invocar
startGuidance()
, asegúrate de invocarstopGuidance()
oclearDestination()
. - Después de registrar
ArrivalListener
, asegúrate de cancelar su registro. - Después de registrar
RoadSnappedLocationProvider
, asegúrate de cancelar su registro.
Completar estos pasos garantiza que las notificaciones no se mantengan activas cuando ya no sean necesarias, lo que podría provocar un consumo excesivo de batería y posibles pérdidas de memoria.
Cuando vuelvas a invocar los métodos de NavigationApi#initForegroundServiceManager, primero invoca NavigationApi#clearForegroundServiceManager.
Si tu app usa ForegroundServiceManager
, invoca NavigationApi#clearForegroundServiceManager
antes de invocar NavigationApi#initForegroundServiceManagerProvider
y, si ya inicializaste ForegroundServiceManager
, invoca NavigationApi#initForegroundServiceManagerMessageAndIntent
. Puedes hacerlo para actualizar el ID de notificación o el contenido de la notificación después de inicializar el administrador de servicios en primer plano.
Acerca de las nuevas restricciones introducidas en Android 14
Android 14 (Android U) introdujo nuevas restricciones sobre las apps que acceden a la ubicación del usuario en segundo plano. Para ayudar a mitigar estos cambios, el SDK de Navigation se actualizó en la versión 5.4.0 para administrar mejor el acceso a la ubicación en segundo plano. También te recomendamos que actualices tu implementación para asegurarte de que tu app siga teniendo acceso a los datos de ubicación más precisos.
Cómo los cambios en Android 14 afectan el SDK de Navigation
Cuando invocas startGuidance()
en tu app, el servicio en primer plano comienza a mostrar notificaciones al usuario para la navegación paso a paso. La navegación paso a paso depende de poder acceder a la ubicación del usuario para actualizar la ruta y mostrar la orientación visual y de audio correcta. A partir de Android 14, para acceder a la ubicación precisa del usuario en segundo plano, se requiere su permiso. De forma predeterminada, si una app no tiene el permiso del usuario para acceder a la ubicación en segundo plano y trata de iniciar un servicio en primer plano para recibir actualizaciones de la ubicación, el sistema arroja un SecurityException
, lo que provoca que la app falle.
Cómo mitiga este problema el SDK de Navigation
A partir de la versión 5.4.0, el SDK de Navigation controla este SecurityException
sin afectar la app, lo que permite que la navegación siga ejecutándose en segundo plano. Además, el SDK de Navigation incluye el permiso ACCESS_BACKGROUND_LOCATION
en su AndroidManifest
. De esta manera, tu app no necesita declarar el permiso, ya que la combinación de Gradle se encargará de ello. Sin embargo, si no se muestra una notificación al usuario antes de que la app pase a segundo plano, el SDK de Navigation dependerá del sistema para proporcionar actualizaciones de ubicación. Es posible que estas actualizaciones del sistema no sean frecuentes ni precisas, lo que podría generar una experiencia de navegación no óptima. Por este motivo, te recomendamos que también les solicites a los usuarios acceso a la ubicación en segundo plano.
Qué pueden hacer los desarrolladores de apps para mejorar la precisión de la ubicación para la navegación
Puedes mejorar la precisión del indicador de ubicación que usa el SDK de Navigation actualizando tu app para solicitar a los usuarios acceso a la ubicación en segundo plano. Para obtener más información, consulta Cómo solicitar permisos de ubicación "Permitir todo el tiempo".