Es el 15.º aniversario de Google Maps Platform: consulta las noticias y los anuncios más recientes.

Datos de ubicación

Una de las funciones exclusivas de las aplicaciones para dispositivos móviles es el conocimiento de la ubicación. Los usuarios de dispositivos móviles los llevan a todas partes. Por eso, si agregas la función de conocimiento de la ubicación a tu app, podrás brindarles una experiencia más contextual.

Muestras de código

El repositorio ApiDemos en GitHub incluye ejemplos que muestran el uso de la ubicación en un mapa:

Cómo trabajar con datos de ubicación

Entre los datos de ubicación disponibles para un dispositivo Android, se incluyen la ubicación actual del dispositivo (identificada a través de una combinación de tecnologías), la dirección y el método de movimiento, y si el dispositivo cruzó un límite geográfico predefinido, lo que también se conoce como perímetro virtual. Según las necesidades de tu aplicación, puedes elegir entre varias formas de trabajar con datos de ubicación:

  • La capa Mi ubicación proporciona una forma sencilla de mostrar la ubicación de un dispositivo en el mapa. No proporciona datos.
  • La API de ubicación de Servicios de Google Play se recomienda para todas las solicitudes programáticas de datos de ubicación.
  • La interfaz LocationSource te permite definir un proveedor de ubicación personalizado.

Permisos de ubicación

Si tu app necesita acceder a la ubicación del usuario, primero debes solicitar el permiso correspondiente. Para ello, agrega el permiso de ubicación de Android pertinente a tu app.

Android ofrece dos permisos de ubicación: ACCESS_COARSE_LOCATION y ACCESS_FINE_LOCATION. El permiso que elijas determinará la exactitud de la ubicación que mostrará la API. Solo debes solicitar uno de los permisos de ubicación de Android, según el nivel de exactitud que necesites:

  • android.permission.ACCESS_COARSE_LOCATION: Permite que la API utilice Wi-Fi o datos móviles (o ambos) para determinar la ubicación del dispositivo. La API muestra la ubicación con una exactitud que equivale aproximadamente a una manzana.
  • android.permission.ACCESS_FINE_LOCATION: Permite que la API determine la ubicación más precisa posible mediante los proveedores de ubicación disponibles, incluido el sistema de posicionamiento global (GPS), así como Wi-Fi y datos móviles.

Agrega los permisos al manifiesto de la app

Agrega uno de los siguientes permisos como componente secundario del elemento <manifest> en tu manifiesto de Android. Puedes optar por el permiso de ubicación básico:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  ...
</manifest>

O por el permiso de ubicación precisa:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  ...
</manifest>

Solicita permisos de tiempo de ejecución

Android 6.0 (Marshmallow) presenta un nuevo modelo para administrar los permisos, que simplifica el proceso de instalación y actualización de apps para los usuarios. Si tu app se orienta a una API nivel 23 o posterior, puedes utilizar el nuevo modelo de permisos.

Si tu app admite el nuevo modelo de permisos y el dispositivo ejecuta Android 6.0 (Marshmallow) o una versión posterior, el usuario no tendrá que otorgar ningún permiso al instalar o actualizar la app. Esta deberá comprobar si tiene los permisos necesarios de tiempo de ejecución y solicitarlos en caso de no tenerlos. El sistema le mostrará un diálogo al usuario para solicitarle los permisos correspondientes.

Para ofrecer una mejor experiencia del usuario, es importante solicitar los permisos en contexto. Si conocer la ubicación es fundamental para el funcionamiento de tu app, debes solicitar el permiso de ubicación cuando se inicia la app. Se recomienda hacerlo con una pantalla de bienvenida o mediante un asistente que les explique a los usuarios por qué se requiere el permiso.

Si la app requiere el permiso de ubicación solo para una parte de su funcionalidad, deberás solicitarlo cuando la app esté por realizar la acción que lo necesita.

La app debe manejar correctamente los casos en los que los usuarios no otorguen su permiso. Por ejemplo, si el permiso se necesita para una función específica, la app puede inhabilitarla. Si el permiso es fundamental para que la app funcione, esta podrá inhabilitar todas sus funcionalidades y notificarle al usuario que es indispensable conceder el permiso.

La siguiente muestra de código comprueba si se otorgó el permiso con la biblioteca de compatibilidad antes de habilitar la capa Mi ubicación:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    if (mMap != null) {
        mMap.setMyLocationEnabled(true);
    }
} else {
    // Permission to access the location is missing. Show rationale and request permission
    PermissionUtils.requestPermission(this, LOCATION_PERMISSION_REQUEST_CODE,
        Manifest.permission.ACCESS_FINE_LOCATION, true);
}

El siguiente ejemplo controla el resultado de la solicitud de permiso mediante la implementación de ActivityCompat.OnRequestPermissionsResultCallback desde la biblioteca de compatibilidad:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {
        return;
    }

    if (PermissionUtils.isPermissionGranted(permissions, grantResults, Manifest.permission.ACCESS_FINE_LOCATION)) {
        // Enable the my location layer if the permission has been granted.
        enableMyLocation();
    } else {
        // Permission was denied. Display an error message
        // ...
    }
}

Para obtener más muestras de código y conocer las prácticas recomendadas en torno a los permisos de tiempo de ejecución que se deben solicitar para Android, consulta la documentación sobre el modelo de permisos de Android.

Capa Mi ubicación

Puedes utilizar la capa y el botón Mi ubicación para mostrarle al usuario su posición actual en el mapa. Llama a mMap.setMyLocationEnabled() para habilitar la capa Mi ubicación en el mapa.

A continuación, se muestra un ejemplo de uso simple de la capa Mi ubicación:

public class MyLocationDemoActivity extends FragmentActivity
    implements OnMyLocationButtonClickListener,
        OnMyLocationClickListener,
        OnMapReadyCallback {

  private GoogleMap mMap;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_location_demo);

    SupportMapFragment mapFragment =
        (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
  }

  @Override
  public void onMapReady(GoogleMap map) {
    mMap = map;
    // TODO: Before enabling the My Location layer, you must request
    // location permission from the user. This sample does not include
    // a request for location permission.
    mMap.setMyLocationEnabled(true);
    mMap.setOnMyLocationButtonClickListener(this);
    mMap.setOnMyLocationClickListener(this);
  }

  @Override
  public void onMyLocationClick(@NonNull Location location) {
    Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
  }

  @Override
  public boolean onMyLocationButtonClick() {
    Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();
    // Return false so that we don't consume the event and the default behavior still occurs
    // (the camera animates to the user's current position).
    return false;
  }
}

Cuando la capa Mi ubicación está habilitada, aparece el botón correspondiente en la esquina superior derecha del mapa. Cuando un usuario hace clic en el botón, la cámara centra el mapa en la ubicación actual del dispositivo, si se conoce. La ubicación se indica en el mapa con un pequeño punto azul si el dispositivo está quieto o como una comilla angular si está en movimiento.

En la siguiente captura de pantalla, se muestra el botón Mi ubicación en la esquina superior derecha y el punto azul de Mi ubicación en el centro del mapa:

Si no deseas mostrar el botón Mi ubicación, llama a UiSettings.setMyLocationButtonEnabled(false).

Tu app puede responder a los siguientes eventos:

Pautas de nuestras Condiciones del Servicio

Protege la privacidad de los usuarios
y mantenlos informados

Siempre informa cómo utilizarás los datos de los usuarios y no permitas que se los pueda identificar de forma individual. Obtén el consentimiento de los usuarios antes de utilizar su ubicación y permite que lo revoquen en cualquier momento.

Más información

API de ubicación de Servicios de Google Play

La API de ubicación de Servicios de Google Play es el método preferido para agregar la función de conocimiento de la ubicación a tu aplicación para Android. Incluye funcionalidades que te permitirán hacer lo siguiente:

  • Determinar la ubicación del dispositivo
  • Escuchar cambios en la ubicación
  • Determinar el medio de transporte si el dispositivo está en movimiento
  • Crear y supervisar regiones geográficas predefinidas, conocidas como "geovallas"

Las API de ubicación te permiten compilar fácilmente aplicaciones con capacidad de ahorro de energía y conocimiento de la ubicación. Al igual que Maps SDK for Android, la API de ubicación se distribuye como parte del SDK de Servicios de Google Play. Para obtener más información sobre la API de ubicación, consulta la clase de capacitación de Android Cómo conocer la ubicación con tu app o la Referencia de la API de ubicación. Los ejemplos de código se incluyen como parte del SDK de Servicios de Google Play.