Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo conocer la ubicación más reciente

Con las API 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.

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 mediante el SDK Manager y agrega la biblioteca a tu proyecto. Para obtener más detalles, consulta la guía de Android sobre la 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.

Cómo mantener una mejor estimación actual

Es posible que esperes que el objeto Location que contiene la llamada más reciente a getLastLocation() sea el más preciso. Sin embargo, debido a que la precisión de una ubicación varía, el valor más reciente no es necesariamente el mejor. Deberías incluir lógica para elegir qué ubicación mostrar según varios criterios. El conjunto de criterios también varía, según los casos prácticos de tu app y los resultados de las pruebas de campo.

Para validar la precisión de una ubicación que muestra getLastLocation(), completa los siguientes pasos:

  • Comprueba si la ubicación recuperada es significativamente más reciente que la ubicación recuperada con anterioridad.
  • Verifica si la precisión de la ubicación es mejor o peor que la estimación anterior.
  • Verifica el proveedor asociado con la nueva ubicación. Decide si confías en este proveedor más que en el que se usa en la ubicación en caché de tu app.