Con las APIs de ubicación de los Servicios de Google Play, tu app puede solicitar la ubicación más reciente del dispositivo del usuario. En la mayoría de los casos, te interesa la ubicación actual del usuario, que suele ser equivalente a la última ubicación conocida del dispositivo.
Específicamente, usa el proveedor de ubicación combinada para recuperar la última ubicación conocida del dispositivo. El proveedor de ubicación combinada es una de las APIs de ubicación de los Servicios de Google Play. Administra la tecnología de ubicación subyacente y proporciona una API para que puedas especificar requisitos de alto nivel, como alta precisión o bajo consumo de energía. También optimiza el uso de la batería del dispositivo.
En esta lección, se muestra cómo realizar una sola solicitud de ubicación de un dispositivo con el método getLastLocation() en el proveedor de ubicación combinada.
Configura los Servicios de Google Play
Para acceder al proveedor de ubicación combinada, el proyecto de desarrollo de tu app debe incluir los Servicios de Google Play. Descarga e instala el componente de los Servicios de Google Play a través de SDK Manager y agrega la biblioteca a tu proyecto. Para obtener más detalles, consulta la guía para configurar los Servicios de Google Play.
Cómo especificar permisos de apps
Las apps cuyas funciones usan servicios de ubicación deben solicitar permisos de ubicación, según los casos de uso de esas funciones.
Cómo crear un cliente de servicios de ubicación
En el método onCreate() de tu actividad, crea una instancia del Fused Location Provider Client, como se muestra en el siguiente fragmento de código.
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Cómo conocer la ubicación más reciente
Una vez que hayas creado el cliente de los Servicios de ubicación, podrás obtener la última ubicación conocida del dispositivo de un usuario. Usa el método getLastLocation() del proveedor de ubicación combinada para recuperar la ubicación del dispositivo. La precisión de la ubicación que devuelve esta llamada se determina según el parámetro de configuración de permisos que establezcas en el manifiesto de la app, como se describe en la guía para solicitar permisos de ubicación.
Para solicitar la última ubicación conocida, llama al método getLastLocation().
En el siguiente fragmento de código, se ilustra la solicitud y el control básico de la
respuesta:
fusedLocationClient.lastLocation .addOnSuccessListener { location: Location? -> // Got last known location. In some rare situations this can be null. }
El método getLastLocation() devuelve un objeto Task que puedes usar para obtener un objeto Location con las coordenadas de latitud y longitud de una ubicación geográfica. El objeto de ubicación puede ser null en las siguientes situaciones:
- La ubicación está desactivada en la configuración del dispositivo. El resultado podría ser
null, incluso si la última ubicación se recuperó anteriormente, ya que inhabilitar la ubicación también borra la caché. - El dispositivo nunca registró su ubicación, lo que podría ser el caso de un dispositivo nuevo o uno que se restableció a la configuración de fábrica.
- Se reiniciaron los Servicios de Google Play en el dispositivo y no hay ningún cliente activo del Fused Location Provider que haya solicitado la ubicación después de que se reiniciaron los servicios. Para evitar esta situación, puedes crear un cliente nuevo y solicitar actualizaciones de ubicación por tu cuenta. Para obtener más información, consulta Cómo solicitar actualizaciones de ubicación.
Elige la mejor estimación de ubicación
La FusedLocationProviderClient proporciona varios métodos para recuperar la información de ubicación del dispositivo. Elige una de las siguientes opciones, según el caso de uso de tu app:
getLastLocation()obtiene una estimación de la ubicación con mayor rapidez y minimiza el uso de la batería que se puede atribuir a tu app. Sin embargo, la información de ubicación podría estar desactualizada si ningún otro cliente usó la ubicación de forma activa recientemente.getCurrentLocation()obtiene una ubicación más reciente y precisa con mayor coherencia. Sin embargo, este método puede hacer que se realice un cálculo de ubicación activo en el dispositivo.Esta es la forma recomendada de obtener una ubicación nueva, siempre que sea posible, y es más segura que otras alternativas, como iniciar y administrar actualizaciones de ubicación por tu cuenta con
requestLocationUpdates(). Si tu app llama arequestLocationUpdates(), a veces puede consumir grandes cantidades de energía si la ubicación no está disponible o si la solicitud no se detiene correctamente después de obtener una ubicación nueva.
Recursos adicionales
Para obtener más información sobre cómo recuperar la ubicación actual en Android, consulta los siguientes materiales:
Ejemplos
- App de ejemplo para demostrar las prácticas recomendadas mientras se recupera la ubicación actual.