Como extraer la direccion de google map en un texview en android

Buenas, hoy veremos un tutorial avanzado de como obtener la dirección de google map y guardarlo en un textview.
Este ejercicio me lo pidieron desde Mexico, yo justamente estaba haciendo algo parecido para un proyecto, así que voy a utilizar parte del código que estoy trabajando para darle una mano a todos los interesado.
En la parte gráfica necesitaremos
Activity 1 (activity_main.xml)
– 1 button
– 1 textview

Activity 2 (activity_seleccionar_direccion.xml)
– 1 fragment

como lo muestro en la siguiente imagen.

 

 

Bien ahora empezaremos la parte del código:

MainActivity.java

 

public class MainActivity extends Activity implements View.OnClickListener{
    Button btnDireccion;
    TextView lblDireccion;
    public static double lat = 0;
    public static double lon = 0;
    public static boolean checked = false; //Se ha chequeado el mapa.
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //  getActionBar().setDisplayHomeAsUpEnabled(true);
        setContentView(R.layout.activity_main);

        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        btnDireccion = (Button) findViewById(R.id.btnDireccion);
        lblDireccion = (TextView) findViewById(R.id.lblDireccion);
        
    }

    public void onWindowFocusChanged(boolean hasFocus){
        if (hasFocus){
            if (checked){
                checked = false;
                this.lblDireccion.setText(F.getDireccionLL(lat, lon));
            }
        }
    }

    public void onClick(View v) {
        Intent pantalla = new Intent(this, SeleccionarDireccion.class);
        this.startActivity(pantalla);
    }

}

SeleccionarDireccion.java

 

public class SeleccionarDireccion extends AppCompatActivity {
    private LatLng latlong = new LatLng (-6.760644,-79.863413);
    private GoogleMap map;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seleccionar_direccion);
        MapFragment fMap = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
       // fMap.getMapAsync((OnMapReadyCallback) this);
        map = fMap.getMap();

        map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
            public void onMapLongClick(LatLng LL)  {
                MainActivity.lat = LL.latitude;
                MainActivity.lon = LL.longitude;
                regresar();

            }

        });
        MainActivity.checked = true;
        if (map!=null){
            iniciarGPS();

        }

    }
    private void iniciarGPS(){
        map.addMarker(new MarkerOptions().position(latlong)
                .title("Ubicación actual"));
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(latlong,15));
    }
    public void regresar() {
        Intent intent = new Intent(this, MainActivity.class);
        intent .setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(intent);
        this.finish();

    }

}

 

si te fijas hay unas coordenadas, esas son para cuando cargue el mapa, te indique donde empezar, las que yo puse iniciaran en mi ciudad dentro de una universidad, puedes cambiarlo por las coordenadas de tu ciudad. Aquí te dejo un ejercicio que saca tus coordenadas donde te encuentres, por si lo necesitas.

NOTA: Las siguientes clases son de validaciones y de envíos por http, pues como les comente e cogido una parte de mi proyecto para hacerles este tuto, dependerá de ustedes si lo limpian un poco o no, yo lo dejo así, porque en unos días lo reutilizare para hacer la continuación y hacer que el programa también pueda guardar las direcciones en una base de datos.”me da flojera limpiar código estoy cansado y es domingo 

 

F.java

public class F {
    public static String getDireccionLL(double latitud, double longitud){
      String googleapi = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+
                String.valueOf(latitud)+"%2C"+
                String.valueOf(longitud);

        String resultado = null;
        try {
            resultado = new Http().enviarGet(googleapi);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            JSONObject json = new JSONObject(resultado);
            JSONArray jsonArray = json.getJSONArray("results");

            JSONObject jsonData = jsonArray.getJSONObject(0);

            return jsonData.getString("formatted_address");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "Lat / Long inválidas";
    }

}

 

Http.java

public class Http {

 public String enviarGet(String url) throws Exception {
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(url);

  HttpResponse response = client.execute(request);
  BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

  StringBuffer result = new StringBuffer();
  String line = "";
  while ((line = rd.readLine()) != null) {
   result.append(line+"n");
  }

  return result.toString();
 }

}

 

Bien Ahora debemos editar nuestro AndroidManifest.xml debemos poner los permisos para que se nos muestre el mapa de google y también nuestra key para los permisos, yo lo dejare sin key y tendrás que crear tu propia key, sino sabes de que hablo échale un vistazo a estos links:
como crear keys sha1 api para android studio
Como obtener una clave API v2 para google map

 

AndroidManifest.xml 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidmorefast.moden.appcapturardireccion">

    <permission
        android:name="com.androidmorefast.moden.appcapturardireccion.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="com.androidmorefast.moden.appcapturardireccion.permission.MAPS_RECEIVE"/>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_LOGS"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity android:name=".SeleccionarDireccion"></activity>
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AQUI VA TU CLAVE API V2" />
    </application>

</manifest>

 

Bien el resultado seria como las siguientes imágenes:
Cada ves que hagas click 2 segundos sobre alguna dirección del mapa automáticamente te llamara la dirección.

 

 

 

Bien ahora te dejo para que descargues el paquete del proyecto.

 

 

10 comentarios en «Como extraer la direccion de google map en un texview en android»

  1. Anónimo

    Muy buen aparte amigo, quiero que me ayude como es que puedo enviar mi ubicacion con un boton a otro movil… no se si me entiende, ya he visto tus tutoriales y si son de ayuda pero quiero enviar la ubicacion al igual que el ejemplo del buttonPanico solo que llegue el mapa al otro dispositivo

  2. Pingback: Como implementar un Place Picker (selector de lugares) en android studio | ANDROFAST

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

WhatsApp chat