Aprendiendo Android V: Inicialización a la API del GPS

Aprendiendo Android V: Inicialización a la API del GPS

Desarrollo y programación

Aprendiendo Android V: Inicialización a la API del GPS

1 agosto, 2010 09:00

Unos van de vacaciones y otros vuelven, en mi caso, me identifico con el segundo grupo, para los que ahora van a tener más tiempo y para los que buscan el tiempo donde lo haya, vamos con una nueva entrega de códigos, snippets o usos de programación android.

En esta entrega vamos a hablar de la iniciación a una aplicación de android por la que ya habéis preguntado en más de una ocasión, el acceso al GPS.

Como es bien sabido, la mayoría de los terminales android vienen equipados con un GPS al que de un tiempo a esta parte se le están encontrando diversos y estupendos usos en diferentes aplica

ciones, aparte de la ya conocida de localización o navegación. La realidad aumentada, las redes sociales localizadas, la geolocalización de fotos, etc. Todo esto es posible por la localización que nos proporciona nuestro GPS… Sería injusto no comentar que actualmente también gana mucho terreno la localización por triangulación de antenas, es un método sencillo, pero en la gran mayoría de los casos, mas impreciso que la localización por GPS.

Android brinda el acceso a este GPS desde su SDK de una forma sencilla y clara, en esta entrega vamos a crear un listado básico donde solicitaremos al programa nos facilite las coordenadas de nuestra localización. Una vez tengamos aprendido como realizar esto, podremos investigar sobre como convertir esas coordenadas en direcciones, etc.

Como siempre que se empieza, empecemos por el principio. Vamos a mostrar el código completo y después lo iremos diseccionando para que sepamos en todo momento lo que estamos haciendo.

package vierco.com.androideLibreLoc;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class androideLibreLoc extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(B

undle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

LocationManager milocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

LocationListener milocListener = new MiLocationListener();

milocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, milocListener);

}

public class MiLocationListener implements LocationListener

{

public void onLocationChanged(Location loc)

{

loc.getLatitude();

loc.getLongitude();

String coordenadas = «Mis coordenadas son: » + «Latitud = » + loc.getLatitude() + «Longitud = » + loc.getLongitude();
Toast.makeText( getApplicationContext(),coordenadas,Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String provider)
{
Toast.makeText( getApplicationContext(),«Gps Desactivado»,Toast.LENGTH_SHORT ).show();
}
public void onProviderEnabled(String provider)
{
Toast.makeText( getApplicationContext(),«Gps Activo»,Toast.LENGTH_SHORT ).show();
}
public void onStatusChanged(String provider, int status, Bundle extras){}
}

Ya tenemos el código, ahora veamos que le estamos pidiendo a nuestro android.
El resultado sería algo así:


En primer lugar, como en todos los códigos, tenemos lo “imports” que hemos necesitados para hacer correr correctamente nuestra actividad, en este caso vamos a destacar:
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationListener;
La importación de estas tres opciones es la que nos está permitiendo usar las apis correctas, con ellas podemos, el mismo orden que vemos arriba, acceder, gestionar y escuchar nuestro GPS
También como en todos las actividades que se precien, tenemos nuestro onCreate y la llamada a nuestro main, tras esto vamos a detallar que lo que queremos es acceder al servicio de localización (LOCATION_SERVICE) e indicaremos igualmente como vamos a acceder a el, en nuestro caso por GPS.
// Usamos la LocationManager para acceder a la localización o uso del GPS

LocationManager milocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

LocationListener milocListener = new MiLocationListener();

milocManager.requestLocati
onUpdates( LocationManager.GPS_PROVIDER, 0, 0, milocListener);
Como hemos comentado, hemos especificado el acceso a la localización, hemos indicado que vamos a solicitar el saber la ubicación (LocationListener) y donde vemos “GPS_PROVIDER“, es la forma de indicar que el acceso será mediante GPS.
En caso de preferir dicho acceso no mediante GPS, lo haremos por triangulación, para lo cual el “GPS_PROVIDER“, habría de ser sustituido por “NETWORK_PROVIDER“.
Una vez aclarado estos puntos de cara a nuestro código, pidamos por fin la localización. Esta solicitud  la haremos mediante LocationListener, para intentar aclarar al máximo esta acción comentar que la traducción literal de este comando sería algo como “Escuchador de localización”.
LocationListener ofrece inicialmente tres opciones posibles a la hora de buscar la localización, que el GPS esté activo, que esté desactivado y el escuchar los cambios de coordenadas, en tal caso actualizará la localización por cada cambio que vaya detectando.
public void onLocationChanged(Location loc) // Escucha cambios de coordenadas
public void onProviderDisabled(String provider) // GPS desactavido
public void onProviderEnabled(String provider) // GPS Activo
Veámoslo sobre código:
public void onLocationChanged(Location loc)
{
loc.getLatitude();
loc.getLongitude();
String coordenadas = «Mis coordenadas son: » + «Latitud = » + loc.getLatitude() + «Longitud = « + loc.getLongitude();
Toast.makeText( getApplicationContext(),coordenadas,Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String provider)
{
Toast.makeText( getApplicationContext(),»Gps Desactivado«,Toast.LENGTH_SHORT ).show();
}
public void onProviderEnabled(String provider)
{
Toast.makeText( getApplicationContext(),»Gps Activo«,Toast.LENGTH_SHORT ).show();
}
Las opciones que hemos detallado como GPS activado y desactivado, vistas anteriormente, tan solo muestran un mensaje por pantalla (utilizando nuestros viejos amigos Toast) indicando esto mismo, el estado de la conexión. Por defecto estamos solicitando las coordenadas utilizando la actualización en cada cambio, este el  código incluido por lo tanto dentro de la opción “onLocationChanged“

Detallamos dicho código con los comentarios:
loc.getLatitude(); // Indicamos loc proveniente de onLocationChanged, getLatitude tal como su propio nombre indica nos va a solicitar la latitud de nuestra ubicación

loc.getLongitude(); // Realizamos la misma operación anterior, con la diferencia que en este caso solicitamos la longitud de la posición

String coordenadas = «Mis coordenadas son: » + «Latitud = « + loc.getLatitude() + «Longitud = » + loc.getLongitude(); // Estamos creando una cadena de texto String indicando un texto elegido por nosotros al que sumamos con + la longitud y latitud

Toast.makeText( getApplicationContext(),coordenadas,Toast.LENGTH_LONG).show(); // Creamos el mensaje en pantalla dando salida a la String “coordenadas” anteriormente definida
Con este código que acabamos de ver tenemos acceso a las coordenadas, como hemos comentado.

Estas coordenadas pueden ser reinterpretadas por android para ser convertidas en un dirección tipo calle, ciudad, país, etc. Para realizar esta modificación sería necesario el uso de Geocoder, API encargada de dicha acción.
La actualización de la posición que realizamos en este código se repite de forma continua hasta que es cerrado el programa que lo contiene, si queremos detener nuestro onLocationChanged, habríamos de usar removeUpdates sobre nuestros LocationManager y LocationListener.
Como siempre tenemos que tener presente los todopoderosos permisos de nuestras aplicaciones, nada de esto será funcional si android no tiene confirmación del desarrollador sobre que hemos dotado a nuestra aplicación de permisos para acceder al GPS. Esto lo realizaremos añadiendo a nuestro manifest:

<uses-permission android:name=«android.permission.ACCESS_FINE_LOCATION»>uses-permission>

El GPS, en el contexto de los smartphone,  es actualmente un mundo lleno de posibilidades que está prácticamente empezando. Espero que este tutorial haya servido para despertar la curiosidad de algún lector sobre el tema. Lo que hoy puede ser curiosidad, mañana puede convertirse en una buena idea… y pasado mañana en una aplicación que nos haga la vida más sencilla. Si este tema es del agrado de quienes nos leen, siempre podemos profundizar en el.

Como siempre, ánimo a todos, los que empezáis, los que ya lleváis tiempo y a los que podéis enseñarnos muchas cosas. Estos últimos sabrán muy bien, como digo siempre, que la programación requiere de más o menos conocimientos, pero sobre todo requiere de ganas, ilusión y originalidad.

Un saludo, Vierco.