Google Places

SESIÓN 14

UMSA - LASIN - 2016.1

Lugares cerca la ubicación

Información del lugar, contacto, fotos

Autocompletado de lugares

Configuración

Configuración

Se puede usar la misma API Key de Google Maps.

 

Para Android tenemos los servicios de PlacePicker, GeoDataApi y PlaceDetectionApi.

 

  • GeoDataApi ofrece información de los lugares registrados en Google.
  • PlaceDetectionApi ofrece la posibilidad de obtener lugares cercanos al usuario.

 

Para ambas es necesario tener configurado el GoogleApiClient.

Google API Client

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,
                                                    GoogleApiClient.OnConnectionFailedListener {

    private GoogleApiClient googleApiClient;

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

        googleApiClient = new GoogleApiClient
                .Builder(this)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    @Override
    protected void onStart() {
        super.onStart();
        googleApiClient.connect();
    }

    @Override
    protected void onStop() {
        googleApiClient.disconnect();
        super.onStop();
    }
}

Habilitar API key para Google Places

Places

Tipos de Places

Todo Place tiene su ID que tiene la apariencia de ChIJrTLr-GyuEmsRBfy61i59si0 que se usa en las bases de datos de Google Maps y Google Places.

 

Los tipos soportados y disponibles se encuentran en la dirección:

Place

Algunos de los métodos que tiene un objeto Place.

Método Descripción
getId() Retorna el identificador único en la base de datos
getAddress() Dirección
getLatLng() Latitud y longitud. Accesible con .latitude y .longitude
getName() Nombre del lugar
getWebsiteUri() Dirección web, si no está disponible retorna null
getPhoneNumber() Teléfono, si no está disponible retorna null

PlacePicker

PlacePicker

Cuadro de diálogo con UI que muestra un mapa y lista de sitios cercanos.

 

Requiere el permiso ACCESS_FINE_LOCATION.

PlacePicker

Abrir el díalogo

PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
startActivityForResult(builder.build(this), 777);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 777) {
        if (resultCode == RESULT_OK) {
            Place place = PlacePicker.getPlace(this, data);
            String nombre = place.getName();
            Toast.makeText(this, nombre, Toast.LENGTH_LONG).show();
        }
    }
}

Manejar la respuesta

PlaceDetectionApi

PlaceDetectionApi

Permite obtener el lugar o lugares cerca la ubicación.

 

En caso de obtener varios lugares se nos presenta con una probabilidad de cercanía entre 0 y 1.

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(googleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
    @Override
    public void onResult(@NonNull PlaceLikelihoodBuffer placeLikelihoods) {
        for (PlaceLikelihood placeLikelihood : placeLikelihoods) {
            Toast.makeText(MainActivity.this,
                  placeLikelihood.getPlace().getName() + ", " + placeLikelihood.getLikelihood(),
                  Toast.LENGTH_SHORT).show();
        }
        placeLikelihoods.release();
    }
});

Predicción de lugares

Predicción de lugares

Mediante el query deseado, un filtro y un rango es posible obtener los ids y nombres de los lugares

AutocompleteFilter autocompleteFilter = new AutocompleteFilter.Builder()
                .setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
                .build();

PendingResult<AutocompletePredictionBuffer> result = 
             Places.GeoDataApi.getAutocompletePredictions(googleApiClient,
                                                          "La Paz",
                                                          null,
                                                          autocompleteFilter);

result.setResultCallback(new ResultCallback<AutocompletePredictionBuffer>() {

    @Override
    public void onResult(@NonNull AutocompletePredictionBuffer autocompletePredictions) {
        for (AutocompletePrediction prediction : autocompletePredictions) {
            Toast.makeText(MainActivity.this,
                           prediction.getPlaceId() + ": " + prediction.getFullText(null),
                           Toast.LENGTH_SHORT).show();
        }
        autocompletePredictions.release();
    }
});

GeoDataApi

GeoDataApi

Obtener toda la información de un lugar por su Id.

PendingResult<PlaceBuffer> pendingResult =
             Places.GeoDataApi.getPlaceById(googleApiClient, "ChIJrTLr-GyuEmsRBfy61i59si0");

pendingResult.setResultCallback(new ResultCallback<PlaceBuffer>() {

    @Override
    public void onResult(PlaceBuffer places) {
        if (places.getStatus().isSuccess() && places.getCount() > 0) {
            final Place lugar = places.get(0);
            Toast.makeText(MainActivity.this, lugar.getName(), Toast.LENGTH_SHORT).show();
        } else {

        }
        places.release();
    }
});

Obtener el ID de un lugar

Q&A

Android UMSA 2016.1: Sesión 14

By Daniel Alvarez

Android UMSA 2016.1: Sesión 14

Google Places. Parte del curso de desarrollo de aplicaciones Android.

  • 97