
Hola amigos, haré este ejemplo de como obtener las coordenadas y dirección del gps en android studio, ya tenemos varios ejemplos en esta web como por ejemplo obtener las coordenadas del gps, pero decidí hacer este código como un ejemplo mas limpio que nos servirá para las clases que se esta haciendo en el canal de youtube, les recuerdo que hay varias formas de obtener los datos del gps pero hasta ahora este es funcional si en algún momento esta queda defaceada por alguna razón se escribirá uno nuevo mientras tanto usaremos esta, en ese sentido nos servirá de base para todos los ejemplos que veremos, sin mas que decir empezamos con el tutorial.
Ejemplo Base: Obtener Coordenadas y dirección en android studio
Contenidos
Empezaremos por dar los permisos, son permisos que el IDE de android estudio nos pide que ingresemos en el AndroidManifest para poder utilizar la ubicación y el permiso de Internet para poder convertir las coordenadas en una dirección. Lo puedes observar en la linea 4 y 5 del siguiente código.
AndroidManifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androfast.server.appbaseobtenergps"> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" 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> </application> </manifest>
Ahora necesitamos crear la parte gráfica donde tendremos que utilizar 3 textview donde vamos obtener por separado la longitud, latitud y la dirección de esta forma estamos representando los datos en un textview diferente y mas adelante darle un buen uso en futuros proyectos de esta pagina. A continuación te dejo una imagen de como debería quedar y mas abajo el código.
activity_main
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/txtLatitud" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="52dp" android:text="Latitud" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/txtLongitud" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="28dp" android:text="Longitud" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/txtLatitud" /> <TextView android:id="@+id/txtDireccion" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="40dp" android:text="Direccion" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/txtLongitud" /> <Button android:id="@+id/btnGuardar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="64dp" android:text="GUARDAR" android:textSize="18sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/txtDireccion" /> </android.support.constraint.ConstraintLayout>
Ahora solo falta la parte del código, este código lo que hace es obtener las coordenadas latitud y longitud luego con la clase Geocoder convertir estas coordenadas en una dirección, también como parte del código este nos permite ir actualizando en tiempo real tanto las coordenadas como la dirección, de este modo al estar caminando siempre estarán cambiando los datos.
MainActivity
import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import java.io.IOException; import java.util.List; import java.util.Locale; public class MainActivity extends AppCompatActivity { TextView latitud,longitud; TextView direccion; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); latitud = (TextView) findViewById(R.id.txtLatitud); longitud = (TextView) findViewById(R.id.txtLongitud); direccion = (TextView) findViewById(R.id.txtDireccion); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000); } else { locationStart(); } } private void locationStart() { LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Localizacion Local = new Localizacion(); Local.setMainActivity(this); final boolean gpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!gpsEnabled) { Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(settingsIntent); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000); return; } mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, (LocationListener) Local); mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, (LocationListener) Local); latitud.setText("Localización agregada"); direccion.setText(""); } public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1000) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { locationStart(); return; } } } public void setLocation(Location loc) { //Obtener la direccion de la calle a partir de la latitud y la longitud if (loc.getLatitude() != 0.0 && loc.getLongitude() != 0.0) { try { Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> list = geocoder.getFromLocation( loc.getLatitude(), loc.getLongitude(), 1); if (!list.isEmpty()) { Address DirCalle = list.get(0); direccion.setText(DirCalle.getAddressLine(0)); } } catch (IOException e) { e.printStackTrace(); } } } /* Aqui empieza la Clase Localizacion */ public class Localizacion implements LocationListener { MainActivity mainActivity; public MainActivity getMainActivity() { return mainActivity; } public void setMainActivity(MainActivity mainActivity) { this.mainActivity = mainActivity; } @Override public void onLocationChanged(Location loc) { // Este metodo se ejecuta cada vez que el GPS recibe nuevas coordenadas // debido a la deteccion de un cambio de ubicacion loc.getLatitude(); loc.getLongitude(); String sLatitud = String.valueOf(loc.getLatitude()); String sLongitud = String.valueOf(loc.getLongitude()); latitud.setText(sLatitud); longitud.setText(sLongitud); this.mainActivity.setLocation(loc); } @Override public void onProviderDisabled(String provider) { // Este metodo se ejecuta cuando el GPS es desactivado latitud.setText("GPS Desactivado"); } @Override public void onProviderEnabled(String provider) { // Este metodo se ejecuta cuando el GPS es activado latitud.setText("GPS Activado"); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { switch (status) { case LocationProvider.AVAILABLE: Log.d("debug", "LocationProvider.AVAILABLE"); break; case LocationProvider.OUT_OF_SERVICE: Log.d("debug", "LocationProvider.OUT_OF_SERVICE"); break; case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE"); break; } } } }
Este código esta completo y mejor ordenado y nos servirá como ya lo decía lineas mas arriba como base para futuros ejemplos y proyectos que desarrollaremos aquí, igual al final te dejo el código para que descargue y luego el primer vídeo de varios, de como estamos trabajando con los datos del gps, saludos amigos.
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!
13 comments on “Ejemplo Base: Obtener Coordenadas y dirección en android studio”
Miguel
12 julio, 2019 at 4:44 pmMuchas gracias por el ejemplo!
Me está sirviendo mucho!
SITO
5 septiembre, 2019 at 10:10 amHola Andro, copie todo lo que tienes aquí pero me salen muchos errores en el codigo y lo unico que he hecho ha sido copiar. Cual es el problema? Tienes correo electrónico para hablar mejor? El mío te lo pongo donde pone correo electrónico
Maria
6 septiembre, 2019 at 2:58 pmExcelente tutorial, justo lo que andaba buscando.
Marlen
15 marzo, 2020 at 8:03 pmMuchas gracias, man, este ejemplo me sirvió muchísimo! Mucho éxito.
José Luis
24 marzo, 2020 at 7:28 pmJava. Más de lo mismo. Nadie explica específicamente el acceso al recurso y uso de la librería. Pareciera que les fascina publicar código inútil.
ANDROFAST
26 marzo, 2020 at 10:53 pmtotal mente desubicado su comentario, este post tiene su propósito, en todo caso si no le gusta, no comente.Valla a Botar su veneno en otro lado, saludos!
Manuel
21 julio, 2020 at 7:54 pmHay gente que parece que quieren que les hagan su proyecto sin poner el mínimo esfuerzo de su parte en investigar siquiera un poquito.
ANDROFAST te felicito por tus conocimientos y por compartirlos con todos los desarrolladores que comenzamos y andamos algo perdidos.
P.D. El código ‘inútil’ funciona a la perfección 😉
Pedro
21 abril, 2020 at 8:12 amHola Alex, cuando abro tu programa en android studio me aparece el siguiente error:
ERROR: Failed to find target with hash string ‘android-26’
Soy nuevo en android studio y me vendría bien un empujoncito.
Gracias por hacer estos tutoriales, un saludo.
ANDROFAST
27 abril, 2020 at 6:27 pmsignifica que no tienes descargado la api 26 en tu repositorio de android studio, sigue esta guia : https://forums.bignerdranch.com/t/failed-to-find-target-with-hash-string-android-26-in/13827/2
miguel materano
16 mayo, 2020 at 12:21 pmHola amigo, me funciona pero tengo un detalle, como hago para detener el gps al cambiar de mi app a otra, ya que queda funcionando siempre el gps y no logro detenerlo
Javi
24 mayo, 2020 at 2:42 amDisculpe sirve para android 9.0 ?
Juan Manuel
26 agosto, 2020 at 7:10 pmHola Alex, gracias por compartir el código, funciono muy bien y fue de gran ayuda. Saludos Juan Manuel.
Luciano
27 septiembre, 2020 at 12:33 pmHola! Excelente tu tutorial! Recien comienzo con android Studio y estoy haciendo una app donde, el usuario al registrarse, guarda su domicilio. Cómo hago para que el metodo onLocationChange solo se ejecute una vez y no actualice mas? Muchas Gracias!!!