Android-Utilizando recursos del telefono. El GPS

después del articulo anterior, acerca de como programar la linterna de Android, llega el momento de hacer un acercamiento al GPS, para ver como podemos utilizarlo.

Lo primero que necesitamos es añadir un par de campos al layout, para presentar los mensajes; esto lo hacemos abriendo en Android Studio el fichero:

res>layout>activity_presentacion

2014-10-22_20h21_06

y nos ponemos cómodos para diseñar:

AndroidStudio_PasandoAdiseño

Pulsando en los sitios indicados, si es necesario, para cerrar los paneles que nos sobran,  y activando el modo diseño.

2014-10-22_20h36_14

Para crear los dos campos, arrastramos dos “Plain TextView” al teléfono, y luego seleccionándolos en el panel “Component Tree”, pasamos a indicarles los nombres, “coordenadas”, y “direccion”

2014-10-22_21h09_13

Lo primero que hacemos a continuación, es crear una clase que se va a encargar de conseguir nuestra localización; para ello, nos situamos en el paquete, y con el botón derecho de ratón, podemos seleccionar New->Java Class

2014-11-07_13h07_01A esa clase le he dado como nombre “MiPosicion” y el fichero que la contiene será “MiPosicion.java”

El contenido de la clase es:

clase_locationlistener

La clase implementa lLocationListener por lo que debo definir los métodos que me indica, y que los tenéis en la imagen. Cuando active el modulo, suscribiré la clase para que cada vez que el GPS detecte que he cambiado de posición, llame al método “onLocationChanged” que es el que se encarga de guardar las coordenadas que me indica el sistema en mis campos, y así hacerlo visible para el programa que implementa la clase.

El resto de texto, creo que es bastante claro. La clase recibe información acerca del estado del GPS y la guarda en sus variables

Ahora, podemos volver a abrir el fichero “presentacion.java” para empezar a codificar.

Primero, definimos los campos

campos_GPS

A continuación, en la actividad principal, que se ejecutara cuando iniciemos la app, llamamos al método que se encarga de inicializar datos para el GPS

llamada_GPS_AndroidY ya solo nos queda el escribir dicho método, que será así:

Preparar_GPS_AndroidEn las lineas 117 a 119, establecemos los enlaces con los elementos definidos en el entorno gráfico; los TextView y el Button

A continuación, en las lineas 120 a 149 lo que hacemos es definir la función que queremos que se ejecute cuando pulsamos el botón del GPS (setOnClickListener)

En 124 conseguimos un puntero al servicio de localización, en la 125 instanciamos nuestra clase, y en la 126 la suscribimos a las notificaciones de GPS.

La siguientes lineas son mas claras, en 128 comprobamos el estado del GPS, y en caso de que este activo, en 129 comprobamos si hemos recibido datos de posicion; si es asi cargamos los datos recibidos en los textView (131 y 132) para visualizarlo, y en 133 llamamos a un método escrito un poco mas abajo, en donde en función de las coordenadas, solicitamos la dirección

Las lineas 135 a 142 se encargaran de generar un cuadro de dialogo para cuando el GPS no nos proporcione información.

Sabemos que este no es el mejor metodo para utilizar el GPS ya que la primera vez que pulsamos el botón, el GPS no tiene tiempo para conseguir la situación, por lo que casi siempre sale por la alerta…pero si volvéis a activar el botón, y el GPS ha tenido tiempo de sincronizar, todo funciona.

En una aplicación real, nos quedaríamos a la espera de cualquier cambio de posición para enviarlo en pantalla, pero eso…ya lo haremos mas adelante.

Vamos a ver por ultimo, la función que me permite conseguir la direccion en la que me encuentro:

Android_GeocoderTras comprobar en la linea 153 que el objeto Location es correcto, instancia un objeto “Geocoder” y utiliza el método “getFromLocation” para conseguir un “list” con los datos de dirección. Por motivos de simplificacion, nos limitamos a obtener la dirección que se encuentra en el primer elemento del “list”, y en la linea 160 publicamos el texto y el valor de la calle (getAddressLine(0).

también podríamos obtener la ciudad con “address.getLocality()”, o la ciudad con   address.getCountryName().

De cualquier forma, con esto podéis experimentar un poco, en el siguiente articulo, jugaremos un poco con la cámara.

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Android, Formacion y etiquetada , , . Guarda el enlace permanente.

4 respuestas a Android-Utilizando recursos del telefono. El GPS

  1. Joaquín Bresan dijo:

    Buen aporte amigo. Gracias por compartir.

  2. Antonio dijo:

    Que dato le envias al obtenDireccion(Location loc)?

    • Miguel dijo:

      Tengo que pasarle un objeto Location; mira la linea 133, por ejemplo, en donde he conseguido un objeto “MiPosicion”, y le paso el Location

  3. Ale dijo:

    Se tiene que tener encendido el gps previamente o existe alguna manera de activarlo desde la misma aplicacion, con un boton por ejemplo?

Deja un comentario