web-dev-qa-db-fra.com

Comment implémenter PlaceAutocompleteFragment et PlaceAutocompleteActivity pour obtenir les détails de Place

J'utilise Google Place pour obtenir les détails du lieu. Google fournit différentes façons d'implémenter l'API Google Place pour obtenir des détails sur les lieux. Différentes méthodes sont comme PlaceAutocompleteFragment , PlaceAutocompleteActivity . Comment les différencier et comment les mettre en œuvre pour obtenir des détails sur les lieux à l'aide de l'API Google Place.

10
pRaNaY

Tout d'abord, vous devez clé API et activer l'API Google Place pour rechercher et obtenir des détails sur le lieu. Ajoutez votre clé API à votre manifeste d'application, vous devez remplacer YOUR_API_KEY par votre propre clé 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);
    }
});

Sortie:

enter image description here

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) {

        }
    }
}

Sortie:

enter image description here

J'espère que son aide.

Modifier: changer requestCode == RESULT_CANCELED à resultCode == RESULT_CANCELED

38
pRaNaY