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 ahora te dejo para que descargues el paquete del proyecto.
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
muy bueno, te voy a enviar un correo necesito que me ayudes en algo por favor.
justo lo que necesitaba
Estimado gracias por tus aportes, por cierto esta bonita la pagina.
No me funciona en nada el botón, no hace nada
debe tener internet,activado GPS
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
Hola @Anonimo si quiere enviar su dirección, hay un ejercicio donde se envía por mensaje de texto: https://www.androfast.com/2016/06/como-enviar-por-mensaje-de-texto-mi.html
Buenisimo, si ese mismo ejemplo, solo que en ves de que llegue un sms o mensaje de texto que llegue o mande el mapa, alguna idea como lo haria?
Hola Juan en teoría no puedes enviar el mapa, pero si puedes enviar las coordenadas y luego convertirlas de forma automática al google map, te dejo un ejemplo al respecto en el siguiente enlace: https://www.androfast.com/2017/03/como-obtener-coordenadas-del-gps-y.html
Pingback: Como implementar un Place Picker (selector de lugares) en android studio | ANDROFAST