Вы находитесь на странице: 1из 12

UNI FIIS ST324U Sistemas Operativos TUTORIAL: USO DEL GPS EN ANDROID CONFIGURACION DEL ENTORNO Antes de empezar

r necesitamos algunos descargar e instalar algunos programas: El SDK de Android: http://developer.android.com/sdk/index.html El JDK y el JRE versin 6 o superior: http://www.oracle.com/technetwork/java/javase/downloads/index.html En entorno de programacin ser Eclipse Classic, la ltima versin disponible: http://www.eclipse.org/downloads/

Primero instalamos el JDK, en la ubicacin por defecto. Luego, ejecutamos el instalador del SDK de Android y lo situamos en C:/SDKAndroid. Cuando finalice ejecutamos el SDK Manager donde dejaremos los ya marcados y aadiremos, para el tutorial, el paquete de la versin Android 2.3.3 (API 10) y hacemos click en Install Packages. Una vez finalizada la descarga, agregamos una maquina virtual sobre la que se ejecutaran nuestras aplicaciones. Abrimos en AVD Manager y agregamos un dispositivo haciendo click en New y llenamos con estos datos:

UNI FIIS ST324U Sistemas Operativos Es importante que se fijen que en Hardware esta agregado GPS Support, para hacerlo debemos hacer click en New y buscarlo en la lista. Pulsamos Crete AVD y es todo. Ahora configuraremos Eclipse instalando el Android Development Toolkit (ADT). Para ello, una vez abierto el entorno, vamos a Help Install new software. Pulsamos en Add En Name escribimos ADT y en Location: https://dl-ssl.google.com/android/eclipse y luego OK. Esperamos a que carguen los plugins y seleccionamos todos los disponibles y pulsamos Next y aceptamos los trminos de contrato que aparezcan. Una vez terminado esto, reiniciamos el entorno Eclipse y estaremos listos para empezar a programar. PROGRAMACION Creamos un Proyecto: File - New Other y seleccionamos Android Application Project y Next Rellenamos con estos datos y Next.

Ahora pulsamos Next, dejamos igual, Next, dejamos igual, y Finish. En el Package Explorer buscamos MainActivity.java y lo abrimos:

UNI FIIS ST324U Sistemas Operativos

Como se habran dado cuenta, el lenguaje usado para programar en Android es Java, por lo que facilita la explicacin. Ahora importaremos las libreras necesarias para el uso del GPS del Android y de manejo del mapa de Google Maps:
import import import import import import java.util.ArrayList; com.google.android.maps.*; android.location.*; android.content.*; android.graphics.*; android.graphics.drawable.*;

public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true;

UNI FIIS ST324U Sistemas Operativos


} }

Me parece que no es necesario explicar cada paquete, ya que su nombre explica casi todo. Y no hay que alarmarse por las advertencias que salieron, solo indican que los paquetes se han declarado, pero no han sido usados. Ahora para usar el GPS del Android, la clase principal debe heredar de la clase MapActivity que indica que mostraremos un mapa, a diferencia de una Activity, que es para mostrar botones, cuadros de textos, etc. Y debe implementar un objeto LocationListener, que hara de receptor de los mensajes que emitar el GPS del dispositivo, Para eso cambiamos:
public class MainActivity extends Activity {

por:
public class MainActivity extends MapActivity implements LocationListener {

Una vez hecho, nos saldr un error al lado de la lnea editada. Click en el icono del error y luego seleccionamos Add unimplemented methods. Esto es porque el objeto LocationListener requiere que se sobrecargue algunos mtodos necesarios para su funcin.

Ahora para mostrar un punto en el mapa, debemos crear una clase que implemente este punto. Para ello creamos miOverlay dentro de la clase principal y que herede de la clase ItemizedOverlay<OverlayItem>, es decir una lista de capas que iran sobre el objeto. Es en esta lista que se guardara los puntos que queremos que se dibuje en el mapa, pero para este tutorial solo guardaremos un punto. Esta nueva clase tambin requiere mtodos a sobrecargar, por lo que hacemos el mismo procedimiento anterior y de la misma manera agregamos el constructor de la clase. Y para trabajar mejor con la lista, la declaramos como un ArrayList de OverlayItem:
private ArrayList<OverlayItem> ListaItemsOverlay = new ArrayList<OverlayItem>();

UNI FIIS ST324U Sistemas Operativos


public miOverlay(Drawable defaultMarker) { super(defaultMarker); // TODO Auto-generated constructor stub } @Override protected OverlayItem createItem(int i) { // TODO Auto-generated method stub return null; } @Override public int size() { // TODO Auto-generated method stub return 0; }

Cambiaremos cada mtodo segn se indica abajo, y adems sobrecargaremos el mtodo Draw de la clase y aadiremos el metodo addItem, que agregara un overlay dado unas coordenadas en el ArrayList quedando as:
class miOverlay extends ItemizedOverlay<OverlayItem>{ private ArrayList<OverlayItem> ListaItemsOverlay = new ArrayList<OverlayItem>(); public miOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } public void addItem(GeoPoint p, String title, String snippet){ OverlayItem newItem = new OverlayItem(p, title, snippet); ListaItemsOverlay.add(newItem); populate(); } @Override protected OverlayItem createItem(int i) { return ListaItemsOverlay.get(i); } @Override public int size() { return ListaItemsOverlay.size(); } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); } }

Borraremos lo de abajo porque ya no es necesario, ya que no haremos un men en este tutorial.


@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu);

UNI FIIS ST324U Sistemas Operativos


return true; }

Antes de continuar, debemos editar el archivo activity_main.xml autogenerado durante la creacin del proyecto. Lo reemplazaremos por estas lneas:

<?xml version="1.0" encoding="utf-8"?> <com.google.android.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:apiKey="0TFdNTjD4k_prXEsHKGFi60V3SbMrFhR3FPZogw" />

Los archivos XML se usan para crear las interfaces, lo que vera el usuario. Se hace esto aparte para poder separar lo que es lgica de la aplicacin de la interfaz del usuario y tener un cdigo mas limpio. En este cdigo com.google.android.maps.MapView indica que estamos colocando un objeto Mapa idntico al de Google Maps en la pantalla, android:id="@+id/mapview" asigna un cdigo al objeto para poder buscarlo y trabajarlo desde cdigo java, y las dems lneas son para indicar que se ajuste a toda la pantalla y se pueda navegar con el dedo. La ultima lnea es todo un caso. Ese cdigo es una clave que te da Google como desarrollador y que te otorga acceso al uso de sus APIs. La generacin de este cdigo se indica al final de esta parte del tutorial.

UNI FIIS ST324U Sistemas Operativos Ahora que estamos con los XML, aprovecharemos para editar el AndroidManifest.xml Este archivo es como un resumen de la aplicacin, muestra el nombre, que activades tendr, que permisos de acceso, que libreras usara, etc. Modificaremos su contenido para que quede asi:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.migps" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <uses-library android:name="com.google.android.maps" /> </application> </manifest>

Lo que aqu agregamos son los permisos para internet y para usar el GPS, y mas abajo indicamos que usaremos las libreras de googlemaps Luego de editar este cdigo volvemos a MainActivity.Java y agregamos lneas al metodo onCreate.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); mapView.setSatellite(true); Location fiis = new Location("gps"); fiis.setLatitude(-12.015511); fiis.setLongitude(-77.050411); updateLocation(fiis); LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

UNI FIIS ST324U Sistemas Operativos


locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); MapController mapController = mapView.getController(); mapController.setZoom(18); }

Este metodo es el primero que se llama cuando se inicia la actividad. Lo que hacemos en todo este metodo es:
super.onCreate(savedInstanceState); llama al metodo onCreate de la clase madre para que

responda a la estado que esta recibiendo. Esto es til cuando por ejemplo queremos que la aplicacin haga algo depues que se haya minimizado y volvamos a el.
setContentView(R.layout.activity_main); muestra en pantalla el achivo xml que hemos

editado antes.
MapView mapView = (MapView) findViewById(R.id.mapview); Obtenemos la referencia al

mapview insertado en el XML.


mapView.setBuiltInZoomControls(true); mostramos los controles de zoom mapView.setSatellite(true); y establecemos la vista satelital. new Location("gps"); Creamos una locacin y la llamamos fiis. Este objeto encapsulara las coordenadas de un punto inicial que ser la facultad. Location fiis = fiis.setLatitude(-12.015511); fiis.setLongitude(-77.050411);

updateLocation(fiis); este metodo lo implementaremos terminando con onCreate, pero lo que hace es insertar ese punto en el mapa LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); con estas lneas capturamos el contexto del servicio de locacin, y lo modificamos para

que el GPS nos informe sobre algn cambio lo mas pronto posible, por eso el valor de ceros como parmetros.
MapController mapController = mapView.getController(); mapController.setZoom(18); Obtenemos un controlador del mapview, para poder establecer

un nivel de zoom adecuado. Ahora el cdigo para el updateLocation:


protected void updateLocation(Location location){ MapView mapView = (MapView) findViewById(R.id.mapview); MapController mapController = mapView.getController(); GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6)); mapController.animateTo(point);

UNI FIIS ST324U Sistemas Operativos


Drawable marker=getResources().getDrawable(android.R.drawable.star_big_on); int markerWidth = marker.getIntrinsicWidth(); int markerHeight = marker.getIntrinsicHeight(); marker.setBounds(0, 0,markerHeight, markerWidth); miOverlay myItemizedOverlay = new miOverlay(marker); mapView.getOverlays().clear(); mapView.getOverlays().add(myItemizedOverlay); GeoPoint myPoint1 = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6)); myItemizedOverlay.addItem(myPoint1, "", ""); }

Lo primero que hacemos es volver a tener la referencia al mapview del cdigo XML, y un controlador para el mismo. Ubicamos las coordenadas recibidas como parmetro (location) dentro del mapa. Ahora definimos lo que queremos dibujar en pantalla. Usare un archivo que viene con la instalacin del api de google para no estar buscando otro. Luego a partir de su altura y anchura se crea los mrgenes de esta marca. Creamos un objeto miOverlay y le enviamos nuestra marca como parmetro. Capturamos las overlays antes dibujadas y las borramos y agregamos la nueva, asi solo habr un punto en el mapa. Ahora solo nos falta modificar el onLocationChanged por:
public void onLocationChanged(Location location) { updateLocation(location); }

Este metodo se lanza cuando el GPS detecta que hubo un cambio respecto al ultimo punto recibido.
Y eso es todo, ejecutamos: seleccionamos Android Application

UNI FIIS ST324U Sistemas Operativos

10

Esperamos un tiempo y la aplicacin habr cargado:

UNI FIIS ST324U Sistemas Operativos Para probar que funciona, podemos ingresar coordenadas en el Eclipse mediante el DDMS. Buscamos Location Controls y en la pesa manual ingresamos las coordenadas.

11

Ahora si quisiramos simular una camitana, seria ingresar un monton de puntos, pero es algo tedioso, por lo que la mejor solucin es crear un archivo KML e importarlo al Eclipse. Junto a este tutorial adjunto un archivo Puntos de Prueba.kml con lo que pueden simular una caminata en la universidad. OBTENER EL APIKEY DE GOOGLE Como lo haba dicho, el apikey es el cdigo que te otorga google como desarrollador y te permite usar sus apis en tus aplicaciones. Este cdigo es nico y ser necesario mientras desarrollemos la aplicacin. Ejecuta cmd, y ubica la carpeta donde tenemos instalado el jre con el comando cd: En mi caso seria esto:

UNI FIIS ST324U Sistemas Operativos Luego escriben esto: keytool.exe -list -keystore "C:\Users\NpsteR\.android\debug.keystore" -storepass android keypass android. Esta claro que la ruta que sale deben reemplazarlo por la de su sistema. Cuando lo ejecuten les saldra su codigo en MD5 para poder registrarse en Google Developers.

12

Esto es lo mas importante: Huella digital de certificado (MD5): 60:4E:12:06:1A:D9:ED:5F:3A:15:53:9A:6B:19:26:E2 Copiamos ese codigo y entramos a esta pagina: https://developers.google.com/android/maps-apisignup?hl=es Aceptamos los trminos, pegamos el codigo y click en el boton Generate Api Key Luego se abrira una nueva ventana donde saldra su clave android de Apimaps, en mi caso es: 0TFdNTjD4k_prXEsHKGFi60V3SbMrFhR3FPZogw Y este cdigo deben reemplazarlo en el archivo activity_main.xml exactamente en esta parte:
android:apiKey="0TFdNTjD4k_prXEsHKGFi60V3SbMrFhR3FPZogw"

Colocan su cdigo y listo.

Вам также может понравиться