He agregado PlaceAutocompleteFragment en mi aplicación de Android y funciona perfectamente cuando busco un lugar. Mi pregunta es, ¿cómo dejo que el usuario ingrese los valores de latitud y longitud y coloque un marcador en esa coordenada? Solo me gustaría ocultar la sección "No se encontraron resultados" y dejar que el usuario presione enter y obtener las coordenadas.

A continuación se muestra lo que tengo hasta ahora.

<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"
        />

Código cuando se selecciona un lugar:

PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
          getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            String placeName = place.getName().toString();
            LatLng latLng = place.getLatLng();
            mMap.addMarker(new MarkerOptions().position(latLng).title(placeName));
            mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
        }
        @Override
        public void onError(Status status) {
            Log.i(TAG, "An error occurred: " + status);
        }
    });

enter image description here

Quiero implementar una barra de búsqueda que se parezca mucho a Google Maps.

1
Parth Bhoiwala 27 dic. 2016 a las 00:47

3 respuestas

La mejor respuesta

En lugar de usar un PlaceAutoCompleteFragment, use un PlaceAutocompleteIntent:

    try {
        Intent intent = new   
PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY)
                                .build(getThis());
        startActivityForResult(intent, RequestCodes.PLACE_AUTOCOMPLETE_REQUEST_CODE);

    } catch (GooglePlayServicesRepairableException e) {     
//Do something
    } catch (GooglePlayServicesNotAvailableException e) {
//Do something                
    }

Esto enviará una intención en lugar de mostrar directamente un fragmento. Luego, a través del método onResult, puede detectar las fallas y realizar la geocodificación inversa allí:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {

        switch(requestCode){
            case RequestCodes.PLACE_AUTOCOMPLETE_REQUEST_CODE:
                switch(resultCode){
                    case RESULT_OK:
                        Place place = PlaceAutocomplete.getPlace(this, data);
                       //Do something with the address you got.
                        break;
                    case RESULT_ERROR:
                        Status status = PlaceAutocomplete.getStatus(this, data);
                        //In this case, if you typed coordinates instead of an address, 
                        //you can use them to perform a reverse geocoding as you want.
            break;
                    case RESULT_CANCELED:
                        break;
                }
                break;
        }
    } catch (NullPointerException ex) {
        ex.printStackTrace();
    }
}
2
Fco P. 6 ene. 2017 a las 03:25

@ parth-bhoiwala Siga el siguiente enlace para su solución.
https://developers.google.com/places/android-api / autocomplete # add_an_autocomplete_widget
En ese enlace, desplácese hacia abajo para ir a la sección "Obtener predicciones de lugar mediante programación"

Puede crear una interfaz de usuario de búsqueda personalizada como alternativa a la interfaz de usuario proporcionada por el widget de autocompletar. Para hacer esto, su aplicación debe obtener predicciones de lugar mediante programación. Su aplicación puede obtener una lista de nombres y / o direcciones de lugares predichos del servicio de autocompletar llamando a GeoDataApi.getAutocompletePredictions ()

0
Sri Kanth 6 ene. 2017 a las 12:22

[La API de Google Place traduce] una dirección legible por humanos en una ubicación en un mapa.

Lo que intenta hacer es geocodificación inversa.

Android tiene un Geocoder que puede usar para este propósito. Tendría que implementar su propio fragmento para hacer esto, pero no funcionará con PlaceAutocompleteFragment.

1
Ngako Kgothatso 4 ene. 2017 a las 12:48