Proyecto final de curso Android: Programación de aplicaciones (2ª edición online, junio-septiembre 2011) Nombre de la aplicación: MetroWidget Autor: Sanjaime Calvet, Vicent Qué hace la aplicación: Este pequeño widget permite conocer rápidamente los horarios de los metros de MetroValencia, que utilizas habitualmente para ir al trabajo y volver a casa. La aplicación se conecta a un servicio web, que utiliza la web de MetroValencia, que devuelve los horarios en html. Además, la aplicación tiene un mapa de Valencia con las paradas de metro. Licencia: GPL2 A destacar: Es un widget El widget actualiza los horarios cuando recibe el intent de SCREEN_ON La aplicación arranca un servicio que permite actualizar los horarios Los horarios se obtienen, al menos, una vez al día de un servicio web. Los horarios entre dos estaciones se reciben en html y se parsean con un parser adhoc Los horarios de ida y vuelta de cada día se almacenan en base de datos Posee una pantalla de preferencias para indicar estaciones de ida y vuelta, y los tiempos necesarios para llegar a las estaciones desde casa y trabajo. Tiene un mapa de Google Maps centrado en Valencia, con una nueva capa con todas las estaciones. Utiliza un handler para conectar el thread de consulta al servicio web y el thread principal de la aplicación. Las estaciones se cargan de un fichero XML que se encuentra en los recursos internos de la aplicación. Cómo lo hace: El widget es un AppWidgetProvider, por tanto es un receptor de anuncios. La clase del widget tiene una vista con una imagen de fondo y un texto. Además posee un servicio llamado UpdateService que tiene la función de actualizar el texto del widget cuando se pone en marcha. El widget es receptor de anuncios y es capaz de recibir el intent SCREEN_ON. Cuando recibe este anuncio se arranca el servicio que actualiza la información. El widget escucha el evento de onClick para lanzar una activity llamanda ActionsActivity que permite acceder al mapa o cambiarlos parámetros principales. El servicio UpdateService que actualiza el widget tiene una base de datos SQLite llamada TimetablesDB donde se realiza la consulta para ese día y entre las dos estaciones definidas. Si esa información se encuentra en la base de datos se actualiza el widget, en caso contrario, se lanza el thread llamado RequestThread que tiene la función de realizar una petición al servicio web de MetroValencia. La respuesta de este servicio es fichero html que se parsea con ayuda de la librería Jsoup en la clase MetroValenciaServiceParser, que funciona como DOM. Esta información se introduce en la base de datos y se vuelve a lanzar el proceso de actualización para que obtenga la información de la base de datos. La conexión entre el thread secundario y el principal se realiza con ayuda del handler MetroHandler. En el activity de funcionalidad auxiliar ActionsActivity, se puede lanzar la pantalla de preferencias o la pantalla de mapa. La clase del mapa MetroMap, además crea un nuevo overlay con las posiciones de las estaciones que se extraen de un fichero estaciones3.xml de los recursos internos de la aplicación. Este fichero XML se parsea con DOM. Captura de pantallas: