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 interesará la ubicación actual del usuario, que suele equivaler a la ubicación más reciente del dispositivo.
Usa específicamente el proveedor de ubicación combinada para obtener la ubicación más reciente del dispositivo. Este proveedor es una de las API de ubicación de los Servicios de Google Play. Administra la tecnología de ubicación subyacente y es una API simple que te permite especificar requisitos (como precisión alta o poca energía) a nivel general. También optimiza el uso de la batería del dispositivo.
Nota: Cuando se ejecuta tu app en segundo plano, el acceso a la ubicación debería ser fundamental para la funcionalidad principal de la app y se debería divulgar a los usuarios.
En esta lección se muestra cómo realizar una solicitud simple de la ubicación del dispositivo mediante el método getLastLocation()
en el proveedor de ubicación combinada.
Cómo configurar 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 mediante el SDK Manager y agrega la biblioteca a tu proyecto. Para obtener más detalles, consulta la guía de configuración de 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 prácticos de cada función.
Cómo crear un cliente de servicios de ubicación
En el método onCreate()
de tu actividad, crea una instancia del cliente de proveedor de ubicación combinada, como se muestra en el siguiente fragmento de código:
Kotlin
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Java
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
Cómo conocer la ubicación más reciente
Una vez que hayas creado el cliente de servicios de ubicación, podrás obtener la ubicación más reciente del dispositivo de un usuario. Cuando se conecte tu app, podrás usar el método getLastLocation()
del proveedor de ubicación combinada para obtener la ubicación del dispositivo. Se determina la precisión de la ubicación que muestra esta llamada por la configuración de permisos que estableciste en el manifiesto de tu app, como se describe en la guía Cómo solicitar permisos de ubicación.
Para solicitar la ubicación más reciente, llama al método getLastLocation()
. En el siguiente fragmento de código, se muestra la solicitud y un manejo simple de la respuesta:
Kotlin
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Java
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
El método getLastLocation()
muestra un elemento 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 ya se había obtenido la ubicación más reciente, porque, cuando se inhabilita la ubicación, también se borra la caché. - El dispositivo nunca registró su ubicación, que podría ser el caso de un dispositivo nuevo o un dispositivo en el que se restableció la configuración de fábrica.
- Se reiniciaron los Servicios de Google Play en el dispositivo, y ningún cliente de proveedor de ubicación combinada activo solicitó la ubicación después de que se reiniciaron los servicios. Para evitar esta situación, puedes crear un nuevo cliente y solicitar actualizaciones de ubicación por tu cuenta. Para obtener más información, consulta Cómo recibir actualizaciones de ubicación.
Elige la mejor estimación de ubicación
FusedLocationProviderClient
proporciona varios métodos para recuperar información sobre la 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 más rápido y minimiza el uso de 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ó de manera activa la ubicación recientemente.getCurrentLocation()
obtiene una ubicación más actualizada y precisa, y de manera más coherente. Sin embargo, este método puede generar en el dispositivo un cálculo activo de la ubicación.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.