Hoy veremos como obtener la ubicación (dirección y coordenadas del gps) en android studio, de forma básica pero muy bien explicado y puedan aplicarlo a sus proyectos.
Primero entenderemos por GPS que es una herramienta incluida en cualquier dispositivo móvil el cual nos permite enviar o recibir todo lo relacionado con nuestra ubicación.
Este ejercicio consiste en un ejercicio simple de mostrar en un TexView la dirección, y en otro TexView la latitud y longitud de nuestro gps si quieres ver ejercicios mas elaborados, al final del post tendrás algunos enlaces que puedes revisar.
Actualizado: 23/03/2017
-Se arreglo el error Permission
-Cuando el Gps esta desactivado, te lleva automáticamente a la configuración del GPS
-Al caminar la latitud y longitud se actualiza de forma automática
——————————————————————————————————————–
Como obtener la Ubicación (dirección y coordenadas) la latitud y longitud del GPS?
Contenidos
Me puse a investigar en algunos sitios e hice un tutorial paso a paso, como siempre comento en mis tutos les voy a dar filete Mignon «nada de hueso» y puedan degustarlo con facilidad.
Importante:
Una vez creado el proyecto debemos de agregar a nuestra aplicación permisos para usar el GPS dispositivo y para ello nos vamos al fichero AndroidManifest.xml y agregamos el siguiente permiso
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingTop="16dp" android:paddingRight="16dp" android:paddingBottom="16dp" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:orientation="vertical"> <TextView android:id="@+id/mensaje_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/mensaje_id2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="1" android:src="@drawable/logo" /> </LinearLayout> </RelativeLayout>
Un LocationListener, no es mas que una clase que se encarga de estar siempre atenta a cualquier cambio de localidad recibido en el GPS del dispositivo.
MainActivity
public class MainActivity extends AppCompatActivity { TextView mensaje1; TextView mensaje2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mensaje1 = (TextView) findViewById(R.id.mensaje_id); mensaje2 = (TextView) findViewById(R.id.mensaje_id2); 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); mensaje1.setText("Localización agregada"); mensaje2.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); mensaje2.setText("Mi direccion es: \n" + 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 Text = "Mi ubicacion actual es: " + "\n Lat = " + loc.getLatitude() + "\n Long = " + loc.getLongitude(); mensaje1.setText(Text); this.mainActivity.setLocation(loc); } @Override public void onProviderDisabled(String provider) { // Este metodo se ejecuta cuando el GPS es desactivado mensaje1.setText("GPS Desactivado"); } @Override public void onProviderEnabled(String provider) { // Este metodo se ejecuta cuando el GPS es activado mensaje1.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; } } } }
Analizamos el código:
Ahora que tenemos creada nuestra clase Localización debemos de implementarla y para ello debemos llamar al servicio LocationManager del sistema Android y agregar un nuevo LocationListener de actualizaciones de ubicación, que en este caso sería una instancia de nuestra clase Localización
.
Para este ejemplo vamos hacer esto en el método onCreate de nuestra clase MainActivity. Recordemos que el método onCreate se ejecuta durante la creación de la actividad y permite inicializar nuestros componentes tanto de UI como de Lógica de negocio.
¿Como Obtengo las Coordenadas?
Dentro del método onLocationChanged pasamos como parámetro a la clase Location, esta clase en particular nos permitirá utilizar sus dos atributos que son getLatitude y getLongitude y con ella obtenemos las coordenadas, si quieres profundizar en la clase te dejo el siguiente enlace haciendo clic aquí .
¿Como Obtengo la Dirección?
«Geocoder es una clase para manejar geocodificación y geocodificación inversa. La geocodificación es el proceso de transformar una dirección de calle u otra descripción de una ubicación en una coordenada (latitud, longitud). La geocodificación inversa es el proceso de transformar una coordenada (latitud, longitud) en una dirección (parcial)».
En ese sentido nosotros usaremos la geocodificacion inversa y de las coordenadas obtenidas la transformaremos a nuestra dirección. si quieres profundizar en el tema lee el siguiente enlace, Aquí.
¿Que son los Permission?
Conclusiones:
- Obtener las coordenadas no son ningún reto para un programador con conocimientos intermedios.
- Se pudo obtener la dirección a partir de las coordenadas geocodificadas de forma inversa.
- A partir de la Api 23 hay que ingresar permisos sobre el tiempo de ejecución para usar el GPS.
Bueno ha llegado la hora de ejecutar el apk del millón de dolares xD
Espero les haya gustado, a continuación les dejo el proyecto para que lo prueben.
Nota: para que funcione correctamente el gps en genymotion debes pasar por acá primero instalar paso a paso google play servicios en Genymotion.
Enlaces de Interés:
Enviar mi ubicación (latitud y longitud) a una base de datos
Mostrar mi ubicación del gps en un fragment
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!
Gracias me ha servido.
Una pregunta solo me aparece las coordenadas y no sale el nombre de la calle, lo estoy probando en mi celular android, descargue el archivo que dejaste no he cambiado nada, como lo hago funcionar.
Usaste una API y la KEY tambien o no ???
Disculpa la demora, en este ejercicio, no se utiliza
ninguna key, es sencillo el ejercicio, solo
toma la dirección de gps, para keys apis y demás
es cuando, incluyes mapas de
googleMap dentro de tu aplicación.Si
tienes mas dudas, escribeme
Recuerda cambiar esto según, donde lo pruebes.
1. LocationManager.GPS_PROVIDER permite tomar tu ubicación del gps
2 .LocationManager.NETWORK_PROVIDER permite tomar tu ubicación de Internet
Estoy tratando de hacer un Panic Button para enviar mi nombre, localizacion y hacer una llamada a el primer panic contact.
como le harias para eso. ya que me estoy confundiendo con las clases. por ejemplo para que funcionan las clases:
public MainActivity getMainActivity() {
return mainActivity;
}
public void setMainActivity(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
Este codigo lo probe en mi celular. me gustaria saber como enviarlo por un SMS.
Saludos
Hola, la clase MainActivity, se crea por defecto al crear una aplicación en Android. envíame un correo con mas detalles de lo que necesitas, mas abajo hay un formulario de contacto
Aqui esta lo que necesitas https://www.androfast.com/2016/06/como-enviar-por-mensaje-de-texto-mi.html
Tengo una duda yo ya descargue la version mas reciente del sdk y ayer me funcionaba una app con el AppCompatActivity pero hoy me lo pone en rojo y el import android.support.v7.app. hasta ahi esta en gris y ya el AppCompatActivity esta en rojo tambien, en mi build.gradle mi buildToolsVersion "24.0.0 y el compile 'com.android.support:appcompat-v7:24.0.0' alguien me podria ayudar a resolver este problema
Hola Nando ya te respondimos por imbox, para todos los que tengan el mismo error es porque no actualizaron su sdk
Buenas tardes, he introducido el código tal cual y solo me sale Localización agregada, nada de coordenadas ni dirección, que puede pasar? Un saludo
Para las coordenadas tu gps debe estar activo y para tomar la dirección debes tener acceso a internet.
Hice todo tal cual como lo explicaste pero al ejecutar la app esta se detiene en el emuador y se cierra 🙁
no importa ya lo solucione 😀
Que bueno te felicito
Hola, en la parte de:
obtenerUbicacion.requestLocationUpdates(LocationManager.NETWORK_PROVIDER , 0, 0,(LocationListener)local);
me aparece un error de permisos, hice todo tal cual pero me da el error de CALL REQUIRES PERMISSION. Ocupo tu ayuda man :'(
Hola Ivan eso es un problema de actualización, recuerda que este es un tutorial un poco antiguo, pero no te preocupes igual corre a pesar del error, aunque no es un error, en Apis nuevas de android necesitas ingresarle un permiso para que el usuario elija si quiere o no mostrar su ubicación, te prometo hacer un tutorial al respecto para explicar mejor este tema
Hola , tengo un porblema quiero poder ver la ubicacion de un dispositivo y ver mi ubicacion , no se si me entiendes , pero mi dispositivo esta en movimiento y quiero poder ver donde esta en el mapa , me podes ayudar?
perdón la ignorancia pero no me funciona se cierra y no encuentro como solucionarlo
perdón como lo solucionaste
Hola, me funciona bastante bien esta aplicacion. Pero a la hora de usarla en un celular Moto G3 con android 6.0 no funciona… ni si quiera funciona un boton que implemente que envia coordenadas a una base de datos. Funciona perfectamente en mi celular con android 4.4.
Alguien me explica? 🙁
sucede que lo diseñe hace mucho tiempo es funcional desde la 3.0 hasta la 5… seria cuestión de que crees un nuevo ejercicio con compatibilidad a la 6.0
sucede que lo diseñe hace mucho tiempo es funcional desde la 3.0 hasta la 5… seria cuestión de que crees un nuevo ejercicio con compatibilidad a la 6.0
Ya lo habia hecho pero no funciona. lo raro es que ni siquiera funciona el boton de ese activity pero el de un inicio de sesion que cree si funciona 🙁
hola , necesito que desde un botón de mi actividad aparezca una dirección .. un restaurante, y se abra desde google maps o waze… sabes como hacerlo
si tienes informacion sobre esto puedes agregarme al correo [email protected] .. gracias
Para los que tienen una version mas reciente de android studio y se cierra la aplicacion una vez que la prueban, intenten ir al menu "Build" seleccionar "edit flavors" y en ese menu busquen "Target SDK version" seleccionen la version API 21: Android 5.0 (Lollipop) pulsen OK y prueben la applicacion
Si anteriormente ya habian probado la app en el emulador de android, les muestre el mensaje : "Application installation failed" simplemente presionen "OK" para que desinstale la aplicacion y correra sin problemas
Quiero honestamente agradecer tu aporte…llevaba horas intentando realizar esto.
que bueno que te sirvió, saludos
Todo funciona bien, pero no me aparece nada en los textview, simplemente detecta si el gps esta activado o desactivado, y que la localización esta agregada, ¿como puedo solucionar este error?
1. El dispositivo o emulador debe tener acceso a Internet
2. Si te fijas en el tutorial claramente se explica que se debe cambiar una parte en el código si es emulado en un celular y cambiar otro código si es usado en un emulador.
una pregunta amigo soy nuevo en esto tengo una duda sobre obtener las ubicaciones y es si puedo obtener la ubicación sin tener acceso a Internet como puedo hacer para que funcione el gps sin internet
Hola Angel este ejercicio funciona con internet, en teoría debería también poder hacerse otro tipo de código que permita descargar los map de una zona x y luego poder consultarle donde se encuentra el dispositivo.
Esta al final, por favor vea el video actualizado ahí puede resolver cualquier duda
Hola amig@s me parece que aquí hay un mal entendido, en este ejercicio en ninguna parte controlamos la actualizacion del movimiento, eso lo hace de forma automatica la Api, en el ejercicio pasado se tenia que abrir y cerrar la aplicacion para que cambie las posiciones, aunque a mi siempre me funciono bien en android 4.0 creo que el problema viene con apis superiores, pero al agregar el onStatusChanged se esta forzando a que haga una comprobacion del estado, quizas deseen leer algo al respecto les dejo el siguiente enlace https://developer.android.com/reference/android/location/LocationListener.html
sinceramente muchas gracias y claro que corre bien solo que quería desactivarlo para que no gaste muchos datos al estar actualizando el gps una y otra vez tambien aparece como consumo de batería alto. y leere el enlace.
@Anonimo, que bueno que todo quedo aclarado,saludos.
Este comentario ha sido eliminado por el autor.
Este comentario ha sido eliminado por el autor.
hola gracias por el tutorial, esperando que me puedas ayudar el como colocar un marcador a posición actual y que se vallan guardando. podrás ayudarme, deja te menciono que apenas voy aprendiendo android
saludos
hola q tal… hice tal cual como esta en tu tutorial con permisos y todo… pero siempre me sale que el GPS esta desactivado y si tiene encendido el emulador el Gps… hay q hacer algo mas?
Por fa ayudeme
Hola, estoy haciendo una app de geolocalizacion en la cual introduzco las coordenadas en el DDMS…. en el eclipse android me salia bien, pero ahora que se actualizo y se introduce desde la virtualizacion me provoca un error, cambio la forma en que debo programarlo? no quiero poner todo el codigo que es largo…
Hola Android Facil.
Me parece muy interesante tu información.
Por favor podrias decirme a que correo te puedo enviar mi inquietud ?
Mi correo es [email protected]
Gracias.
Amigo descargué y probé tu programa, y no me muestra el nombre de la calle, solo la latitud y longitud.
He puesto solamente este: mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, (LocationListener) Local);
como dice en el vídeo pero nada sigue sin mostrarme nada.
Gracias por la antención
Genial! Un monstruo.
Probe la app y funciona espectacular. Me muevo y va actualizxando las coordenadas. Solo me registre para felicitarte.
Que bueno que le sirvió, saludos.
Hola, David para que te muestre las calles debes cumplir con lo siguiente que tengas acceso a internet en tu dispositivo y que estés en una zona urbanizada, en zonas rurales o por donde no paso el automovil de google no funciona. Solo te enviara las coordenadas.
[email protected]
Difícil de saber tu error con poca información, pero seguro es porque no has puesto los permission antes de ejecutar tu app.
gracias eres un crack
Que bueno que le sirvió, no olvide apoyarnos agregándose a nuestras redes sociales, saludos.
Muchas gracias por estas tutoriales, quería preguntarte si te puedo enviar un correo para ver si me puedes guiar con un problema que tengo con el gps, o bien crear un tutorial si lo ves que puede interesar a más seguidores.
Hola Socu, puedes escribirnos cualquier duda y trataremos en responderte cuando regresemos de vacaciones a partir de el 11 del presente mes, checa este link: https://www.androfast.com/2017/02/como-pedir-ayuda.html
Muchas gracias, correo enviado, igual me he extendido un poco intentando explicarlo lo mejor posible para no dejarme ningun dato.
Pingback: como mostrar la direccion y coordenadas del gps en un fragment en android studio – ANDROFAST
Hola, gracias por compatirnos tu conocimiento. Nos es de mucha ayuda.
Por favor podrias decirme en que puedo estar fallando si la app toma la ubicacion en el emulador pero no en el celular ya una vez instalada la APK
Saludos
Difícil saber si no se revisa los errores de su android monitor, pero es común que no te muestre nada cuando no tienes activo el gps u si has creado una aplicación nueva debes revisar si pusiste bien los permisos.
he usado varios de tus ejemplos y no he tenido problemas, aqui no me muestra la direccion solo las coordenadas, tengo activado el gps en el celular pero nada mas no resuelve la direccion, saludos
Huy Ivonne necesito mas información como por ejemplo si tienes acceso a internet, que versión de api que usas y así toda la información posible para tener una idea de lo que esta pasando y si fuera posible mostrar si hay algún error de tu android monitor.
Pingback: como guardar la direccion y coordenadas del gps a una base de datos en android studio - ANDROFAST
Pingback: como enviar la direccion y coordenadas del gps a una base de datos de forma automatica en android studio | ANDROFAST
Pingback: Como obtener la altitud latitud y logintud del gps | ANDROFAST
Pingback: Como extraer la direccion de google map en un texview en android | ANDROFAST
Estimado, el codigo funciona sin problemas en un emulador, pero en el celular con android 8 no toma. El GPS esta activado y aplique el codigo para emularlao en un celular. Me podrías ayudar?
Hola Patricio, te cuento que el problema es de Android 8 estamos esperando respuesta de google sobre este error pero hasta ahora no se manifiesta sobre este tema.
Y si quiero implementarlo en android 10 api 29