Android

Creando aplicación de Bizkaibus para Android (Parte 2)

En este segundo post voy a explicar la parte mas importante de la aplicación: como obtener los tiempos de llegada de los autobuses a cada parada.

Como en toda aplicación web, lo normal es la mayoría de aplicaciones de diseñen en forma de Web Services a los que hacer peticiones HTTP para consultar cierta información. Una de los protocolos que durante bastante tiempo fue muy popular es SOAP (Simple Object Access Protocol), que básicamente es una petición http utilizando el metodo POST en la cual el cuerpo de la petición es una estructura xml con un formato determinado que nos permitirá enviar cierta información que será analizada por el Servicio Web que nos responderá con una estructura XML con la información solicitada.

Utilizando un sniffer de red tipo Wireshark es posible capturar una petición y respuesta de este tipo. La petición de información sobre la parada 48036029 tendrá la siguiente estructura:

[code lang="xml"]
POST http://apli.bizkaia.net/APPS/DANOK/TQWS/TQ.ASMX HTTP/1.1
Host: apli.bizkaia.net
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,eu;q=0.8,es;q=0.7,en-us;q=0.5,en;q=0.3,de-de;q=0.2
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: idioma=CA; RealApli=1056775084.20480.0000
Referer: http://apli.bizkaia.net/apps/danok/tq/Resize.swf?horaEntrada=4885&idiomaEntrada=es
Content-type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/LANTIK_TQWS/TQ/GetPasoParada"
Content-length: 393





*
48036029



[/code]

Como vemos es una petición POST donde destacan la cabecera “SOAPAction” y el cuerpo del mensaje que se trata de una estructura XML donde en la etiqueta <strParada> esta completada con el ID de la parada que queremos consultar.

Si la petición esta correctamente formateada, obtendremos una respuesta con la siguiente información:

[code lang="xml"]
HTTP/1.0 200 OK
Date: Mon, 27 Sep 2010 09:16:37 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 5812
X-Cache: MISS from escorpimc03.pandasoftware.local
Proxy-Connection: keep-alive






<GetPasoParadaResult><PasoParada><cabecera>False</cabecera><e1><minutos>47</minutos><metros>17145</metros><tipo>SIN COMUNICACION</tipo></e1><e2><minutos>107</minutos><metros>39990</metros><tipo>NORMAL</tipo></e2><linea>A2610</linea><parada>48036029</parada><ruta>UPV/EHU</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>62</minutos><metros>16803</metros><tipo>NORMAL</tipo></e1><e2><minutos>122</minutos><metros>37277</metros><tipo>NORMAL</tipo></e2><linea>A3511</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>7</minutos><metros>754</metros><tipo>NORMAL</tipo></e1><e2><minutos>27</minutos><metros>5529</metros><tipo>NORMAL</tipo></e2><linea>A3621</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>11</minutos><metros>1979</metros><tipo>NORMAL</tipo></e1><e2><minutos>71</minutos><metros>21043</metros><tipo>NORMAL</tipo></e2><linea>A3631</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>12</minutos><metros>3728</metros><tipo>NORMAL</tipo></e1><e2><minutos>56</minutos><metros>14889</metros><tipo>NORMAL</tipo></e2><linea>A3641</linea><parada>48036029</parada><ruta>ARRIGORRIAGA</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>2</minutos><metros>481</metros><tipo>NORMAL</tipo></e1><e2><minutos>64</minutos><metros>23008</metros><tipo>NORMAL</tipo></e2><linea>A3911</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>27</minutos><metros>12575</metros><tipo>NORMAL</tipo></e1><e2><minutos>146</minutos><metros>38793</metros><tipo>NORMAL</tipo></e2><linea>A3912</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>16</minutos><metros>7537</metros><tipo>NORMAL</tipo></e1><e2><minutos>77</minutos><metros>31963</metros><tipo>NORMAL</tipo></e2><linea>A3917</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>53</minutos><metros>14084</metros><tipo>NORMAL</tipo></e1><e2><minutos></minutos><metros>-1</metros><tipo>INV</tipo></e2><linea>A3919</linea><parada>48036029</parada><ruta>OROZKO (Ibarra)</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>113</minutos><metros>36355</metros><tipo>NORMAL</tipo></e1><e2><minutos></minutos><metros>-1</metros><tipo>INV</tipo></e2><linea>A3919</linea><parada>48036029</parada><ruta>OROZKO Uribiarte</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>38</minutos><metros>20112</metros><tipo>NORMAL</tipo></e1><e2><minutos>157</minutos><metros>85232</metros><tipo>NORMAL</tipo></e2><linea>A3925</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>282</minutos><metros>138213</metros><tipo>NORMAL</tipo></e1><e2><minutos></minutos><metros>-1</metros><tipo>INV</tipo></e2><linea>A3925</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada><PasoParada><cabecera>False</cabecera><e1><minutos>96</minutos><metros>33686</metros><tipo>NORMAL</tipo></e1><e2><minutos>216</minutos><metros>80815</metros><tipo>NORMAL</tipo></e2><linea>A3925</linea><parada>48036029</parada><ruta>BILBAO</ruta></PasoParada></GetPasoParadaResult>




[/code]

La información que nos interesa esta dentro de la etiqueta <GetPasoParadaResult> y comos e puede ver los caracteres no alfanuméricos están codificados en HTML. Decodificando esta parte obtenemos una estructura xml, esta vez con la información que nos interesa.

[code lang="xml"]


False

47
17145
SIN COMUNICACION


107
39990
NORMAL

A2610 48036029 UPV/EHU


False

62
16803
NORMAL


122
37277
NORMAL

A3511 48036029 BILBAO

...
...

[/code]

Comos e puede ver la estructura resultante dispone de diferentes estructuras <pasoParada> que tiene dos elementos <e1> y <e2> que son las dos estimaciones de tiempo que se dan por línea (tanto en minutos como tiempo). En la etiqueta <linea> tenemos información de la línea que sigue dicho autobús y en la etiqueta <ruta> el destino final.

Una vez conocido el sistema de consulta de tiempos toca la labor de chinos de consultar cada parada en la interfaz grafica para obtener su código y así tener una lista que relacione: nombre de la parada, población, dirección, código de la parada, latitud, longitud.

[code lang="css"]
Bengoetxe, Galdakao,Galdakao,48036002,43.23198189686291,-2.857748866081238
Bengoetxe, Galdakao,Bilbao,48036015,43.23243136604213,-2.859540581703186
Aperribai, Galdakao,Bilbao,48036016,43.240374698213465,-2.8738126158714294
Aperribai, Galdakao,Galdakao,48036001,43.24008942056928,-2.873823344707489
Urbi, Galdakao, Galdakao,48036052,43.2392355336108,-2.8744053840637207
Kukullaga, Etxebarri, Bilbao,48029002,43.24677550835569,-2.888430655002594
Kukullaga, Etxebarri, Etxebarri,48029001,43.246728618419084,-2.8887444734573364
...
...
[/code]

Creando aplicación de Bizkaibus para Android (Parte 1)

Hace tiempo que escribí un mail a las direcciones de contacto que aparecen en la pagina de Bizkaibus (infobizkaibus@bizkaia.net y lantik@bizkaia.net ) comentándoles que estaba interesado en desarrollar una aplicación para consultar los tiempos de espera de los autobuses en las paradas de Bizkaibus. Básicamente la informacion que aparece en los paneles de información de algunas paradas, pero en tu teléfono móvil. Este servicio permitiría acceder a dicha información tanto a los usuarios de paradas que no disponen de estos paneles informativos como a quienes quieran gestionar su tiempo de forma mas optima sabiendo cuando va a pasar el autobús por una parada determinada.

Actualmente Bizkaibus ofrece este servicio a través de la pagina web que usa una aplicación flash diseñada para ser navegada a través de un PC o a través de un servicio de SMS (por tanto no actualizable). Estas alternativas no son muy útiles o en caso del SMS incluso son costosas, por lo que una aplicación adhoc para androide podría ser de gran utilidad para muchos usuarios.

En el mail dejaba claro que mi intención era la d realizar una aplicación gratuita y que la realizaba de forma amateur en mi tiempo libre. Hoy por hoy no he recibido respuesta desde aquel 3 de mayo que envíe el mail. Por eso desde hace tiempo llevo desarrollando una primera versión de dicho cliente para Android con más o menos éxito.

Por tanto voy a escribir una serie de post contando como estoy realizando el desarrollo de esta aplicación.

En el próximo post explicare como obtener la información de los tiempos por cada parada.

Curso sobre “Introducción a la programación en Android” en la universidad de Deusto

Los pasados día 1,2 y 3 de septiembre impartí un curso sobre “Introducción a la programación en Android” en la universidad de Deusto, dentro de los cursos de Julio Septiembre que el e-ghost y otros grupos de la universidad celebran cada año. A continuación voy a dejar un resumen de lo que se hizo y algunas referencias de webs para el que quiera seguir avanzando un  poco mas.

Introducción a la programación en Android


Día 1



El primer día se hizo una introducción de la plataforma Android: estado actual, situación del mercado, cosas a tener en cuenta a la hora de realizar una aplicación y por ultimo una breve introducción a la estructura de las aplicaciones Android. Las transparencias se pueden encontrar en los siguientes enlaces:

A pesar de que la sdk estaba prácticamente instalada (para no perder tiempo) se enseño a manejar las herramientas de la sdk y se termino de realizar la instalación de Eclipse. Podéis encontrar mas info de cómo instalar la SDK de Android en eclipse en los siguientes posts:

Dentro de los ejercicios prácticos empezamos a desarrollar un cliente sencillo de Twitter, para lo cual usando DroidDraw diseñamos la base de nuestra aplicación.

El primer día no dio para más y el código de la aplicación como quedó el día 1 esta disponible aquí.

Día 2



Seguimos con la practica del cliente Twitter, en este caso empezamos a crear las clases necesarias para rellenar el elemento ListView con los Twitts que contienen el hashtag #android (utilizando la APi de Twitter – http://search.twitter.com/search.atom?q=%23android  - ).

Por tanto creamos la clase Twitt para almacenar la información del Twitt (imagen, nombre de usuario y comentario) y convertimos el xml en un array de elementos Twitt (lo idea seria usando un parser de XML – SAXParser – pero por no perder tiempo en la practica lo hicimos a mano). Luego creamos una clase ListViewAdapter que se encargaría de recoger los elementos del array e insertarlos en el ListView utilizando una plantilla twitt.xml diseñada previamente).

El código de la aplicación como quedó el día 2 esta disponible aquí.

Día 3



Se completo la aplicación mostrando como crear menús y lanzar otros Activitys mediante Itents.

El código de la aplicación como quedó el día 3 esta disponible aquí.

Para el que quiera más…



Para el que quiera seguir avanzando les recomiendo que prueben estos ejemplos (que estaban pensados para el curso pero no dio tiempo):

Puede ser interesante que intentéis crear una aplicación con dos Tabs, en uno de los Tabs un ListView y en el segundo un mapa. Si tenéis alguna pregunta no dudéis en comentar este post para que así todas las dudas sean públicas. Si, ya, necesitáis algún ejemplo de código o algo mas completo, podéis enviarme un correo a Iker [at] ikeralbeniz [dot] net.

Android Application Widget

Plugin para WordPress que permite mostrar la información de tu propia aplicación o aplicación preferida para Android. Se conecta automáticamente a Android Market descargando de forma periódica la información sobre tu aplicación como: valoración de los usuarios, descargas, comentarios, versión,.. etc.

Además facilita la instalación de la aplicación por parte de los usuarios ya que al pulsar “Instalar” se muestra un código de barras que permite acceder a la aplicación en Android Market directamente.

La aplicación se conecta a Androd Market mediante una pequeña implementación de protocolo usado por Google para acceder al Market a través de los terminales Android. Esta implementación es aun muy simple y se ira mejorando en próximas versiones.

WordPress plugin for displaying the information of your own or preferred Android application. Widget automatically connects to Android Market downloading the information about your application like: rating, downloads, reviews, release, .. etc.

It also facilitates the installation of the application by users. Pressing “Install” shows a bar code that allows access to the Android Market application directly.

The application connects to Androd Market with a small implementation of the protocol used by Google to access the Market through the Android terminals. This implementation is still very simple and it will be improved in future releases.

Mas información/More info:

http://wordpress.org/extend/plugins/android-application-widget/

Instalando ANDROID + ECLIPSE en WINDOWS (2000 o XP)

En el artículo anterior explicábamos como instalar ANDROID y ECLIPSE en UBUNTU. Ahora toca el turno a Windows y puesto que la configuración de eclipse es la misma en ambos sistemas operativos solo se explicara como se instalan el SDK y ECILPSE en el ordenador.

El primer paso es instalar el SDK, para lo cual nos lo descargaremos de esta dirección:

http://dl.google.com/android/android_sdk_windows_m3-rc20a.zip

Una vez descargado y descomprimida cambiamos el nombre de la carpeta “android_sdk_windows_m3-rc20a” por “android_sdk” y la movemos a nuestro C:\Archivos de Programa\.

Para terminar la instalación solo falta añadir la ruta del SDK al path, para lo cual vamos a INICIO> Configuración > Panel de Control y entramos en Sistema.

Dentro del panel de Sistema vamos a la pestaña Opciones Avanzadas y pulsamos en Variables de Entorno

Se nos mostraran dos listas de variables: Variables de usuario para usuario y variables del sistema. En nuestro caso añadiremos una variable y cambiaremos el path en la lista de Variables del sistema para que todos los usuarios tengan acceso al SDK.

Por tanto pulsaremos en Nueva y nos aparecerá un cuadro de dialogo donde meteremos el nombre de la variable y su ruta. En el caso del SDK pondremos como nombre SDK_ROOT y la ruta C:\Archivos de Programa\android_sdk y pulsamos Aceptar. La nueva variable se añadirá a la lista.

Ya solo falta añadir la ruta al path, por tanto, buscamos la variable PATH de la lista de Variables del sistema, y pulsamos sobre ella dos veces. Se nos aparecerá el mismo cuadro de dialogo de antes peor esta vez completo con el nombre PATH un montón de rutas que están añadidas al path separadas por “;”. Por tanto añadiremos los siguiente al final del campo Valor de la variable: ;%SDK_ROOT%\tools

NOTA: no olvidar el “;” ni los “%”

Pulsamos Aceptar a todas las ventanas hasta cerrarlas todas y ya tenemos el SDK instalado.

Y asolo faltaría instalar Eclipse. Para instalar eclipse solo hay que descargarse eclipse del siguiente enlace, descomprimirlo y mover la carpeta a C:\Archivos de Programa\. (para que esté todo mas ordenado..)

A partir de aquí faltaría configurar y plugin de android para eclipse. Los pasos son idénticos que en Ubuntu así que podéis seguir los mismos pasos que se indican en el articulo anterior.

Instalando ANDROID + ECLIPSE en UBUNTU

En este artículo vamos a explicar mas detalladamente la instalación de ANDROID SDK, ECLIPSE y el PLUGIN DE ANDROID para eclipse en UBUNTU. Básicamente son las mismas instrucciones que aparecen en la pagina de google pero un poco mas comentadas y con imágenes, para que aquellos que siempre se os atraviesan las instalaciones lo tengáis mas fácil.

NOTA: En esta guía supondremos que hacemos una instalación para el usuario de nombre “user”.

Lo primero descargar ABDROID SDK, podes hacerlo con vuestro navegador o por consola con wget. Por tanto abrimos una consola y nos situamos en nuestro home. Descomprimimos y cambiamos en nombre del directorio “android_sdk_linux_m3-rc20a” por “android_sdk”

user@ubuntu:~$ wget http://dl.google.com/android/android_sdk_linux_m3-rc20a.zip
user@ubuntu:~$ unzip android_sdk_linux_m3-rc20a.zip
user@ubuntu:~$ mv android_sdk_linux_m3-rc20a android_sdk

Finalmente para terminar la instalación tendremos que añadir el SDK al path, por tanto editaremos el archivo .bashrc de nuestro /home con cualquier editor de texto (vi, gedit, kate…) y añadiremos las siguientes des lineas al final del documento:

user@ubuntu:~$ vi /home/user/.bashrc

export SDK_ROOT=/home/user/android_sdk
export PATH=$SDK_ROOT/tools:$PATH

Y atenemos el SDK instalado y es posible acceder a sus aplicaciones desde consola, por tanto ahora nos queda instalar un IDE para programar cómodamente nuestras aplicaciones. Para eso el IDE idóneo es ECLIPSE ya que existen plugins para trabajar con ABDROID de forma sencilla.

Por tanto, en caso de que no lo hubiéramos instalado, pasamos a instalar ECLIPSE:

user@ubuntu:~$ apt-get install eclipse

Tras descargarse, se instalara automáticamente gracias a APT por lo que una vez finalizada la instalación ya podremos lanzar eclipse. En caso de que no dispongas de ningún acceso directo a la aplicación podéis acceder por consola.

user@ubuntu:~$ eclipse

Una vez iniciado eclipse nos vamos al menú Help > Software Updates > Find and Install….

Seleccionamos Search for new features to install y pulsamos Next.

Pulsamos New Remote Site y se nos mostrara un dialogo que nos pedirá una URL y un nombre para identificar el “repositorio”. Por nombre podemos poner “Android” y en la URL introducimos la siguiente dirección:

https://dl-ssl.google.com/android/eclipse/

y pulsamos OK.

Se nos añadirá un repositorio a la lista, lo seleccionamos (si no lo esta) y pulsamos Finish.

Nos aparecerá ahora un árbol con la siguiente estructura: Android Plugin > Eclipse Integration > Android Development Tools, los seleccionamos todos y pulsamos Next.

Aceptamos las condiciones de la licencia y pulsamos Next.

Finalmente nos aparecerá una lista de tareas a instalar, y nos aparecerá “Android Developm..”, y pulsamos Finish.

El instalador descargara el paquete y lo instalara automáticamente.

NOTA: El plugin ADT no esta firmado por lo que deberemos aceptar su instalación a pesar de ello.. por lo que pulsaremos Install All.

Ya esta el plugin completamente instalado, y solo falta reiniciar eclipse.

Una vez reiniciado solo falta configurar el plugin indicándole la ruta al SDK, por lo tanto accedemos al menú Window > Preferences…

seleccionamos ANDROID e introducimos la ruta a nuestro SDK, que en nuestro ejemplo era /home/user/android_sdk/.

Finalmente pulsamos Apply y nos aparecerá una ventana con un aviso de que el plugin ya esta instalado y configurado correctamente.

Ya tenemos nuestro entorno de desarrollo completamente instalado. En siguientes artículos explicaremos como hacer pequeñas aplicaciones paso a paso!!!

1 2 Scroll to top