may
Utilizar el GPS en Android y mostrar ubicación actual
En (tutoriales) por benoffi7 el 18-05-2011
Vamos avanzando con los tutoriales y con el nivel de programación en los mismos. En este caso utilizaremos un recurso de hardware de nuestros teléfono como es el GPS. El uso del GPS es bastante sencillo en las clases Java y no requiere mucho esfuerzo. Pero para mostrar nuestras coordenadas en algo más amigable que un TexView necesitamos un Google Map. Google no deja que cualquiera use sus mapas. Solo permite el uso de los mismos con una API Key.
El tutorial se dividirá en dos partes. La primera es como obtener una API Key de Google y configurar el emulador. La segunda estará centrada en la parte del código Java.
Primera Parte: Configurando el entorno.
Configuración del Emulador:
- Crear un nuevo AVD con Google Apis. A mi me funcionaron la de la plataforma 2.2 (Nivel 8). Con 2.3 tuve muchos problemas.
- En la parte de Harware crear una nueva Propiedad. Busquen GPS Support y verifiquen que su Value sea true.
Configuración del MapView
-
En main.xml agregar un MapView y un TextView. [CODIGO]
-
Definir el target de nuestro proyecto con Google Apis y en el manifiesto de dicho proyecto avisarle que vamos a utilizar librerías externas y establecer permisos de internet y localización. [CODIGO]
Configuración de la API Key
-
Buscar el archivo debug.keystore. Para usuarios de WIN7 esta en C:\Users\MiNombre\.android. Para usuarios de otras versiones u otros SO dirigirse en Eclipse a Window >> Preferences >> Android >> Build y en Default debug keystore les dice donde se almacena la key. Esta key se genera cuando descargamos el SDK de Android. Es un clave para decirle a Google que somos desarrolladores y nos permita usar sus herramientas publicas en nuestras aplicaciones. Lamentablemente no esta en el formato que Google necesita para los MapView así que utilizaremos un servicio de Java para que nos de la key en el formato correcto.
-
Abrí la consola de Sistema. Y buscar la carpeta C:\Program Files\Java\jre6\bin
-
Tipiar lo siguiente: keytool -list -alias androiddebugkey –keystore <Ruta completa del keystore con la extension> -storepass android -keypass android. Si en alguna parte de la ruta hay algún espacio, utilizar “” al principio y al final de la misma.
-
Obtenido el MD5 como muestra la imagen iré a Android Maps API Key Signup e ingresar dicho código. Es indiferente si ponemos los “:”. Cuando presionemos el botón Generate Api Key, Google nos dará la API Key para colocarla en nuestro componente MapView en el main.xml.
Segunda parte: Escribiendo el código.
Nuestra actividad tendrá que extender de MapActivity para poder mostrar y controlar nuestro mapa. Además utilizaremos los siguientes campos.
[sourcecode language="java"]
public class main extends MapActivity
{
MapController mapController;
int zoom=7;
private Location location;
MapView mapView;
TextView tw_zoom=17;
[/sourcecode]
El mapControler es un componente para manipular nuestro mapas. Tanto las propiedad como los eventos los manejara esta variable. Podemos establecer que tipo de vista queremos o cual es el nivel de zoom, entre otras cosas.
[sourcecode language="java"]
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tw_zoom=(TextView)findViewById(R.id.tw_zoom);
mapView= (MapView)findViewById(R.id.map_view);
mapView.setSatellite(true);
mapView.setStreetView(true);
mapView.setTraffic(true);
mapController = mapView.getController();
[/sourcecode]
En esta parte no hacemos muchas cosas importantes, solo levantamos los componentes de nuestro XML, establecemos las vistas del mapa y obtenemos el controlador de nuestro MapView.
[sourcecode language="java"]
String serviceString = Context.LOCATION_SERVICE;
LocationManager locationManager = (LocationManager)getSystemService (serviceString);
String proovedor = LocationManager.GPS_PROVIDER;
locationManager.getLastKnownLocation(proovedor);
locationManager.requestLocationUpdates(proovedor, 5000, 5, new LocationListener()
{
@Override
public void onStatusChanged(String arg0, int arg1,Bundle arg2) { }
@Override
public void onProviderEnabled(String arg0) {}
@Override
public void onProviderDisabled(String arg0) {}
@Override
public void onLocationChanged(Location Location)
{
location=Location;
posicion();
}
});
[/sourcecode]
Ahora esto se puso lindo no? Lo que realizamos acá son las configuraciones del GPS. Obtenemos el servicio de localización del contexto, instancio un locationManager con ese servicio y elijo mi proovedor de coordenadas (yo utilizo el GPS porque es más preciso pero consume más batería. Se puede utilizar el NETWORK también pero no es tan preciso). Por ultimo establezco el Listener que estará atento a los cambios de localización del teléfono. Por eso nuestra lógica debería ir en el método onLocationChanged.
Ahora veamos que hace la función posicion().
[sourcecode language="java"]
private void posicion()
{
if (location!=null)
{
Double lat = location.getLatitude()*1E6;
Double lng = location.getLongitude()*1E6;
TextView tw_mensaje=(TextView)findViewById(R.id.tw_mensaje);
tw_mensaje.setText(“Latitud: “+location.getLatitude()+“; Longitud:
“+location.getLongitude());
GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());
mapController.setCenter(point);
mapController.setZoom(zoom);
}
}
[/sourcecode]
El código es bastante sencillo. Obtenemos la longitud y la latitud de nuestro objeto Location y guardamos esos valores en variables del tipo Double. Luego creamos un GeoPoint con esos valores. Por último le decimos al mapController que se centre en es punto y establezca un zoom para vernos mejor.
¿Como hago para mandarle coordenadas al teléfono?
-
En Eclipse abrir la perspectiva DDMS (con el emulador abierto) y elegir nuestro emulador en Devices.
-
Ir a Emulator Control y en la parte inferior Location Controls. Establecer las coordenadas que queramos y presionar Send.
(unas coordenadas validas serian Longiutde: -57,587929 | Latitude -37,981484)
![]()
En el siguiente tutorial veremos como dibujar nuestra posicion en el mapa.
Cualquier duda sobre el código o el tutorial, no dejen de escribir un comentario que con mucho gusto responderé.
Post Footer automatically generated by Add Post Footer Plugin for wordpress.





