En esta sección, se describen algunos casos típicos de recopilación de ubicación, junto con recomendaciones para el uso óptimo del geovallado y las API de proveedores de ubicación combinada.
Actualizaciones visibles para el usuario o en primer plano
Ejemplo: una app de mapas que necesita actualizaciones frecuentes y precisas con una latencia muy baja. Todas las actualizaciones se realizan en primer plano: el usuario inicia una actividad, consume datos de ubicación y, luego, detiene la actividad al poco tiempo.
Usa el método setPriority()
con un valor de PRIORITY_HIGH_ACCURACY
o PRIORITY_BALANCED_POWER_ACCURACY
.
El intervalo especificado en el método setInterval()
depende del caso de uso: para situaciones en tiempo real, establece el valor en unos pocos segundos; en caso contrario, limítalo a unos pocos minutos (se recomiendan aproximadamente dos minutos o más para minimizar el uso de la batería).
Conocer la ubicación del dispositivo
Ejemplo: Una app meteorológica quiere conocer la ubicación del dispositivo.
Usa el método getLastLocation()
, que muestra la ubicación más reciente disponible (que en raras ocasiones puede ser nula). Este método proporciona una forma sencilla de obtener la ubicación y no implica costos asociados con la solicitud activa de actualizaciones de ubicación. Úsalo junto con el método isLocationAvailable()
, que muestra true
cuando la ubicación que muestra getLastLocation()
está actualizada razonablemente.
Cómo iniciar actualizaciones cuando un usuario se encuentra en una ubicación específica
Ejemplo: Se solicitan actualizaciones cuando un usuario se encuentra a cierta distancia del trabajo, de su casa o de otra ubicación.
Utiliza el geovallado junto con las actualizaciones de proveedores de ubicación combinada. Se solicitan actualizaciones cuando la app recibe un activador de entrada de geovallado y se quitan cuando recibe uno de salida. Esto garantiza que la app reciba actualizaciones de ubicación más detalladas solo cuando el usuario haya entrado en un área definida.
El flujo de trabajo típico para esta situación podría implicar la aparición de una notificación en el momento en que el geovallado entra en transición y el lanzamiento de una actividad que contiene código para solicitar actualizaciones cuando el usuario presiona la notificación.
Cómo iniciar actualizaciones basadas en el estado de la actividad del usuario
Ejemplo: Se solicitan actualizaciones solo cuando el usuario está conduciendo o andando en bicicleta.
Utiliza la API de Activity Recognition junto con las actualizaciones de proveedores de ubicación combinada. Solicita actualizaciones cuando se detecte la actividad de destino y quítalas cuando el usuario deje de realizar esa actividad.
El flujo de trabajo típico para este caso de uso podría implicar la aparición de una notificación de la actividad detectada y el lanzamiento de una actividad que contenga código para solicitar actualizaciones cuando el usuario presione la notificación.
Actualizaciones de ubicación a largo plazo en segundo plano vinculadas a áreas geográficas
Ejemplo: El usuario desea que se lo notifique cuando el dispositivo se encuentre cerca de una tienda específica.
Este es un excelente caso de uso para el geovallado. Debido a que, casi con toda seguridad, el caso de uso implica una ubicación en segundo plano, utiliza el método addGeofences(GeofencingRequest, PendingIntent)
.
Debes establecer las siguientes opciones de configuración:
Si estás realizando seguimientos de transiciones de permanencia, utiliza el método
setLoiteringDelay()
pasando un valor de aproximadamente cinco minutos o menos.Utiliza
setNotificationResponsiveness()
y pasa un valor de aproximadamente cinco minutos. Sin embargo, considera usar un valor de aproximadamente diez minutos si tu app puede administrar el retraso adicional en la respuesta.
Una app solo puede registrar un máximo de 100 geovallados a la vez. En un caso de uso en el que una app desea rastrear un gran número de opciones de tiendas, la aplicación puede registrar un geovallado grande (al nivel de una ciudad) y registrar dinámicamente geovallados más pequeños (en ubicaciones dentro de la ciudad) para tiendas que estén dentro del más grande. Cuando un usuario entra en un geovallado grande, se pueden agregar otros más pequeños; cuando sale del geovallado grande, se pueden quitar los pequeños y se pueden volver a registrar para su uso en una nueva área.
Actualizaciones de ubicación a largo plazo en segundo plano sin un componente de app visible
Ejemplo: una app que rastrea la ubicación de forma pasiva
Si es posible, usa el método setPriority()
con la opción PRIORITY_NO_POWER
, ya que casi no consume batería. Si no es posible usar PRIORITY_NO_POWER
, usa PRIORITY_BALANCED_POWER_ACCURACY
o PRIORITY_LOW_POWER
, pero evita usar PRIORITY_HIGH_ACCURACY
para un trabajo sostenido en segundo plano, ya que esta opción agota considerablemente la batería.
Si necesitas más datos de ubicación, utiliza la ubicación pasiva llamando al método setFastestInterval()
y pasando un valor menor que el que le pasas a setInterval()
. Cuando se combina con la opción PRIORITY_NO_POWER
, la ubicación pasiva puede entregar de manera oportuna la ubicación que calculen otras apps sin costo adicional.
Modera la frecuencia agregando latencia con el método setMaxWaitTime()
. Por ejemplo, si utilizas el método setinterval()
con un valor aproximado de 10 minutos, deberías considerar llamar a setMaxWaitTime()
con un valor entre 30 y 60 minutos. Usando estas opciones, se calcula la ubicación para tu app aproximadamente cada 10 minutos, pero solo se activa cada 30 a 60 minutos con algunos datos de ubicación disponibles como una actualización por lotes. Este enfoque cambia la latencia para obtener más datos disponibles y un mejor rendimiento de la batería.
Actualizaciones frecuentes de precisión alta mientras el usuario interactúa con otras apps
Ejemplo: una app de navegación o entrenamiento que continúa funcionando cuando el usuario apaga la pantalla o abre otra app.
Utiliza un servicio en primer plano. Si tu app va a realizar un trabajo demandante en nombre del usuario, se recomienda que el usuario sea consciente de ello. Un servicio en primer plano requiere una notificación persistente. Para obtener más información, consulta la Descripción general de las notificaciones.