En esta página, se explican las prácticas recomendadas para solicitar y administrar los 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 es necesario para otros fines), ya que el combinador de manifiestos de Gradle se asegurará de que se combine con el manifiesto de la app.
Sin embargo, tener el permiso ACCESS_BACKGROUND_LOCATION no es suficiente para acceder a la ubicación en segundo plano, y te recomendamos que solicites a los usuarios permisos de ubicación "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.
El mensaje 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 Solicitar permisos de ubicación | Sensores y ubicación | Android Developers en la documentación para desarrolladores de Android.
Asegúrate de limpiar correctamente las notificaciones de navegación
Para asegurarte de que tu app no mantenga activas las notificaciones después de que ya no sean necesarias, asegúrate de realizar los siguientes pasos de limpieza:
- Después de invocar
startGuidance(), asegúrate de invocarstopGuidance()oclearDestination(). - Después de registrar
ArrivalListener, asegúrate de anular su registro. - Después de registrar
RoadSnappedLocationProvider, asegúrate de anular su registro.
Completar estos pasos garantiza que las notificaciones no se mantengan activas cuando ya no sean necesarias, lo que podría provocar el agotamiento de la batería y posibles pérdidas de memoria.
Cuando vuelvas a invocar los métodos NavigationApi#initForegroundServiceManager, invoca NavigationApi#clearForegroundServiceManager primero
Si tu app usa ForegroundServiceManager, invoca
NavigationApi#clearForegroundServiceManager antes de invocar
NavigationApi#initForegroundServiceManagerProvider. 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 de 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 guía visual y de audio correcta. A partir de Android 14, acceder a la ubicación precisa del usuario en segundo plano requiere el permiso del usuario. 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 las actualizaciones de ubicación, el sistema arroja una SecurityException, lo que provoca que la app falle.
Cómo el SDK de Navigation mitiga este problema
A partir de la versión 5.4.0, el SDK de Navigation controla esta 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 en sí, ya que la combinación de Gradle lo controlará. 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 genera una experiencia de navegación no óptima. Por este motivo, te recomendamos que también 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 Solicita permisos de ubicación "Permitir todo el tiempo"