Para reducir el consumo de energía, Android 8.0 (nivel de API 26) limita la frecuencia con la que una app puede recuperar la ubicación actual del usuario mientras se ejecuta en segundo plano. En estas condiciones, las apps pueden recibir actualizaciones de ubicación solo unas pocas veces por hora.
Nota: Estas limitaciones se aplican a todas las apps que se usan en dispositivos con Android 8.0 (nivel de API 26) o versiones posteriores, independientemente de la versión del SDK de destino de la app.
Es muy importante tener en cuenta este comportamiento de recuperación de la ubicación si tu app se basa en alertas en tiempo real o en la detección de movimiento mientras se ejecuta en segundo plano.
Se preserva el comportamiento de la aplicación en primer plano
Si una app está en primer plano en un dispositivo que ejecuta Android 8.0 (nivel de API 26), el comportamiento de actualización de la ubicación es el mismo que en Android 7.1.1 (nivel de API 25) y versiones anteriores.
Advertencia: Si tu app obtiene actualizaciones de ubicación casi en tiempo real en un período prolongado, la duración de batería del dispositivo se reducirá considerablemente.
Cómo ajustar el comportamiento de ubicación de tu app
Considera la posibilidad de que los casos de uso de la app para ejecutarse en segundo plano no tengan éxito si esta recibe actualizaciones de ubicación poco frecuentes. Si este es el caso, puedes recuperar actualizaciones de ubicación con mayor frecuencia mediante una de las siguientes acciones:
- Haz que tu aplicación pase a funcionar en primer plano.
-
Inicia un servicio en primer plano de tu app llamando a
startForegroundService()
. Cuando este servicio en primer plano esté activo, aparecerá como una notificación continua en el área de notificaciones.Precaución: Si tu app inicia un servicio en primer plano mientras se ejecuta en segundo plano en un dispositivo con Android 11 (nivel de API 30) o versiones posteriores, no podrá acceder a la información de ubicación, a menos que el usuario le haya otorgado el permiso
ACCESS_BACKGROUND_LOCATION
. Para obtener más información, consulta la guía sobre las restricciones de uso asociadas con los servicios en primer plano. -
Usa elementos de la API de geovallado, como
GeofencingClient
, que están optimizados para minimizar el uso de energía. - Usa un objeto de escucha de ubicación pasivo, que puede recibir actualizaciones de ubicación más rápidas si hay apps en primer plano que las solicitan con mayor rapidez.
Nota: Si tu app necesita acceder al historial de ubicaciones que contiene actualizaciones frecuentes, usa la versión por lotes de los elementos de la API de Fused Location Provider, como la interfaz de FusedLocationProviderApi
. Cuando tu app se ejecuta en segundo plano, esta API recibe la ubicación del usuario con mayor frecuencia que la API que no se procesa por lotes. Sin embargo, ten en cuenta que tu app todavía recibe actualizaciones por lotes solo unas pocas veces por hora.
API afectadas
Los cambios en el comportamiento de recuperación de la ubicación en apps en segundo plano afectan a las siguientes APIs:
- Proveedor de ubicación combinada (FLP)
-
-
Si tu app se ejecuta en segundo plano, el servicio del sistema de ubicación calcula una ubicación nueva para tu app solo unas pocas veces por hora. lo que sucede incluso cuando tu app solicita actualizaciones de ubicación más frecuentes.
No obstante, si usas la versión por lotes de FLP, puedes acceder a un historial de ubicaciones más frecuente después de que tu app recibe una actualización por lote, lo que también ocurre solo unas pocas veces por hora.
- Si tu app se ejecuta en primer plano, no habrá cambios en las tasas de muestreo de la ubicación en comparación con Android 7.1.1 (nivel de API 25).
-
- Geovallado
-
- Las apps en segundo plano pueden recibir eventos de transición de geovallado con mayor frecuencia que las actualizaciones del proveedor de ubicación combinada.
- La capacidad de respuesta promedio para un evento de geovallado es cada un par de minutos aproximadamente.
- GNSS Measurements y GNSS Navigation Message
-
- Cuando la app está en segundo plano, dejan de ejecutarse las devoluciones de llamada registradas para recibir resultados de
GnssMeasurement
yGnssNavigationMessage
.
- Cuando la app está en segundo plano, dejan de ejecutarse las devoluciones de llamada registradas para recibir resultados de
- Location Manager
-
-
Las apps en segundo plano reciben actualizaciones de ubicación solo unas pocas veces por hora.
Nota: Si tu app se ejecuta en un dispositivo que tiene los Servicios de Google Play instalados, te recomendamos que uses el Proveedor de ubicación combinada (FLP) en su lugar.
-
- Wi-Fi Manager
- El método
startScan()
realiza un análisis completo de las apps en segundo plano solo unas pocas veces por hora. Si una app en segundo plano vuelve a llamar al método poco después, la claseWifiManager
proporcionará los resultados almacenados en caché del análisis anterior.