Google Maps con Threads

In: Android| Tutoriales

28 Sep 2009

No cabe duda de que una de las grandas posibilidades que podemos aprovechar en un dispositivo Android es la geo-localización. Uno de los primeros pasos que podemos dar en este campo es la utilización de Google Maps.

Desde hace mucho tiempo Google Maps es sinónimo de geo-localización en Internet, gracias a la estupenda API de la que disponemos podemos hacer uso de sus funciones en nuestras aplicaciones Android.

A continuación desarrollaremos un primer ejemplo, en el que aprovecharemos para introducir el concepto de thread y cómo influyen en el funcionamiento de nuestra aplicación.

¿Qué es esto?

En éste tutorial vamos a crear una aplicación que utiliza Google Maps y threads para que mientras realizamos una búsqueda mostraremos un diálogo de espera.

¿Qué voy a aprender?

  • Acceso a Google Maps
  • Utilización de threads
  • Introducción al uso del geocoder.

¿Cómo quedará?

threadgooglemaps1

Pasos a seguir:

Se trata de una aplicación bastante sencilla, en ella vamos a necesitar una sola Activity y un solo layout. Antes de poder utilizar un objeto de Google Maps es necesario que os registreis para utilizar la API de Google Maps, en éste enlace se explican los sencillos pasos que debéis seguir.

Lo primero que vamos a necesitar es el XML donde reside el layout de la aplicación.

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/address"
android:layout_x="11px"
android:layout_y="5px"
>
</TextView>
<EditText
android:id="@+id/et_direccion"
android:layout_width="240px"
android:layout_height="wrap_content"
android:hint="@string/input"
android:textSize="18sp"
android:layout_x="12px"
android:layout_y="30px"
>
</EditText>
<Button
android:id="@+id/btn_busqueda"
android:layout_width="59px"
android:layout_height="wrap_content"
android:text="@string/go"
android:layout_x="256px"
android:layout_y="30px"
>
</Button>
<com.google.android.maps.MapView android:id="@+id/mapa"
android:layout_width="fill_parent"
android:layout_height="310px"
android:apiKey="Copia aqui la clave API asignada"
android:layout_x="2px"
android:layout_y="100px"
android:clickable="true" />
</AbsoluteLayout>

Como veis es un layout muy simple. Tenemos un área de texto donde escribiremos la dirección que queremos buscar y y un botón al que asignaremos la tarea de comenzar la búsqueda de resultados. En el campo “apiKey” del MapView debéis copiar la clave que se os haya asignado al acabar el proceso citado anteriormente.

Pasamos ahora a la chicha de la aplicación, el evento de buscar y el manejo del thread.

La idea de todo esto es separar dos procesos, en uno de ellos haremos la búsqueda de las coordenadas y en la otra actualizaremos el layout de la aplicación. Para hacerlo necesitamos un Handler.

ThreadGoogleMaps.java:

private Handler showAdressResults = new Handler() {
 @Override
 public void handleMessage(Message msg) {
 pd.dismiss();

 if (foundAdresses.size() == 0) {
 //Sino encuentra la dirección mostramos un diálogo de error
 Dialog locationError = new AlertDialog.Builder(
 ThreadGoogleMaps.this).setIcon(0).setTitle(
 "Error").setPositiveButton(R.string.ok, null)
 .setMessage(
 "Error, no se ha encontrado la dirección.")
 .create();
 locationError.show();

 } else { // else display address on map
 for (int i = 0; i < foundAdresses.size(); ++i) {
 //Guardamos el resultado en formato latitud y longitud
 Address x = foundAdresses.get(i);
 lat = x.getLatitude();
 lon = x.getLongitude();
 }
 //Mostramos la dirección en el mapa
 navigateToLocation((lat * 1000000), (lon * 1000000),myMap);
 }
 }
 };

El Handler se ocupa de actualizar el mapa, en función de si la búsqueda de coordenadas ha devuelto algún resultado. Para rellenar buscar ésas coordenadas utilizamos una función del geocoder, se trata de la función getFromLocationName.

Como veis es un ejemplo bastante sencillo, obviamente se le podría añadir soporte de GPS o cualquier otra idea pero para el propósito de éste tutorial.

Código fuente:

http://mobile.davidocs.com/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: ThreadGoogleMaps (34.98KB)
added: 28/09/2009
clicks: 159
description: Ejemplo que añade el tratamiento de threads y Google Maps

Comparte:
  • Facebook
  • Bitacoras.com
  • Meneame
  • Wikio IT
  • Digg
  • del.icio.us
  • FriendFeed
  • HackerNews
  • Technorati

Entradas relacionadas:

  1. Cómo añadir iconos a un ListView en Android
  2. Diseñando la aplicación, uso de TabHost en Android
  3. Tratamiento de ficheros XML con Android
  4. Primeros pasos con Android
  5. Creando la primera aplicación con Android

2 Comentarios to Google Maps con Threads

Avatar

Carlos

Enero 25th, 2010 at 3:54 PM

Buenas,

Enhorabuena por el ejemplo, me parece muy útil.

¿Sabríais cómo se hace para que pinte alguna marca que indique la localización exacta en la pantalla?

Un saludo y gracias.

Avatar

xavier encarnacion

Mayo 6th, 2010 at 10:26 AM

Hola mil gracias por esta valiosa información me gustaria ponerme en contacto contigo porque necesito realizar un tema de investigacion para la universidad gracias.

xle2911@hotmail.com

Comment Form

De qué va esto?

La comunidad de desarrollo sobre Android e iPhone en castellano es algo limitada, así que hay que sumar, desde aqui intentaré aportar mi granito de arena y ayudar a quien lo necesite. No dudes en preguntar cualquier duda, entre todos los solucionaremos.

Tutoriales

Photostream

tuto3-1tuto2-1tuto1-8tuto1-7