android google-play-services google-places-api

android - Cómo implementar PlaceAutocompleteFragment y PlaceAutocompleteActivity para obtener detalles de Place



google-play-services google-places-api (1)

Estoy usando Google Place para obtener detalles del lugar. Google proporciona una forma diferente de implementar la API de Google Place para obtener detalles del lugar. Las diferentes formas son como PlaceAutocompleteFragment , PlaceAutocompleteActivity . Cómo diferenciar todo esto y cómo implementarlo para obtener detalles del lugar utilizando la API de Google Place.


En primer lugar, necesita la clave API y habilitar la API de Google Place para buscar y obtener detalles del lugar. Agregue su clave API al manifiesto de su aplicación, debe reemplazar YOUR_API_KEY con su propia clave API:

<application> ... <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_API_KEY"/> </application>

1) PlaceAutocompleteFragment

Xml:

<fragment android:id="@+id/place_autocomplete_fragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" />

Java:

PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); /* * The following code example shows setting an AutocompleteFilter on a PlaceAutocompleteFragment to * set a filter returning only results with a precise address. */ AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS) .build(); autocompleteFragment.setFilter(typeFilter); autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { // TODO: Get info about the selected place. Log.i(TAG, "Place: " + place.getName());//get place details here } @Override public void onError(Status status) { // TODO: Handle the error. Log.i(TAG, "An error occurred: " + status); } });

Salida:

2) PlaceAutocompleteActivity

private void callPlaceAutocompleteActivityIntent() { try { Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN) .build(this); startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE); //PLACE_AUTOCOMPLETE_REQUEST_CODE is integer for request code } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) { // TODO: Handle the error. } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //autocompleteFragment.onActivityResult(requestCode, resultCode, data); if (requestCode == PLACE_AUTOCOMPLETE_REQUEST_CODE) { if (resultCode == RESULT_OK) { Place place = PlaceAutocomplete.getPlace(this, data); Log.i(TAG, "Place:" + place.toString()); } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) { Status status = PlaceAutocomplete.getStatus(this, data); Log.i(TAG, status.getStatusMessage()); } else if (resultCode == RESULT_CANCELED) { } } }

Salida:

Espero que sea de ayuda.

Editar: cambie requestCode == RESULT_CANCELED a resultCode == RESULT_CANCELED