Logo Studenta

Desarrollo-de-la-aplicacion-movil-podcast-unamovil-para-el-sistema-operativo-Android

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO 
FACULTAD DE ESTUDIOS SUPERIORES 
 ARAGÓN 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 MÉXICO, 2015. 
 
T E S I S 
QUE PARA OBTENER EL TÍTULO DE: 
INGENIERO EN COMPUTACIÓN 
 
 P R E S E N T A: 
 
ROBERTO ENRIQUE GUDIÑO 
VÁZQUEZ 
 
 
 
 
 
 
 
 
 
 
ASESOR DE TESIS: 
M. EN I. ELIO VEGA MUNGUIA 
“DESARROLLO DE LA APLICACIÓN MÓVIL 
PODCAST UNAMÓVIL PARA EL SISTEMA 
OPERATIVO ANDROID” 
 
Lourdes
Texto escrito a máquina
Ciudad Nezahualcóyotl, Estado de México
 
UNAM – Dirección General de Bibliotecas 
Tesis Digitales 
Restricciones de uso 
 
DERECHOS RESERVADOS © 
PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL 
 
Todo el material contenido en esta tesis esta protegido por la Ley Federal 
del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). 
El uso de imágenes, fragmentos de videos, y demás material que sea 
objeto de protección de los derechos de autor, será exclusivamente para 
fines educativos e informativos y deberá citar la fuente donde la obtuvo 
mencionando el autor o autores. Cualquier uso distinto como el lucro, 
reproducción, edición o modificación, será perseguido y sancionado por el 
respectivo titular de los Derechos de Autor. 
 
 
 
 
UNAM – Dirección General de Bibliotecas 
Tesis Digitales 
Restricciones de uso 
 
DERECHOS RESERVADOS © 
PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL 
 
Todo el material contenido en esta tesis esta protegido por la Ley Federal 
del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). 
El uso de imágenes, fragmentos de videos, y demás material que sea 
objeto de protección de los derechos de autor, será exclusivamente para 
fines educativos e informativos y deberá citar la fuente donde la obtuvo 
mencionando el autor o autores. Cualquier uso distinto como el lucro, 
reproducción, edición o modificación, será perseguido y sancionado por el 
respectivo titular de los Derechos de Autor. 
 
 
 
1 
 
 
ÍNDICE 
 
Agradecimientos 
 
Índice de figuras 
 
Introducción 
 
1. Historia del desarrollo móvil 
1.1. ¿Qué es Android? 
1.2. ¿Por qué Android? 
1.3. Arquitectura de Android 
1.4. Componentes de una aplicación Android 
1.5. Procesos en Android 
1.6. Ciclo de vida de una aplicación Android 
1.7. Android y sus versiones 
1.8. Comparativa de Android frente a otras plataformas 
1.9. Mapa mental de Android 
 
2. Descripción del Podcast de la UNAM 
 
3. Objetivo de la aplicación Podcast UNAMóvil 
 
4. Desarrollo e Implementación 
 
5. Resultados 
 
6. Conclusiones 
6.1. Prospectiva a futuro 
Apéndice A. Diagrama UML de la aplicación Podcast UNAMóvil 
 
Apéndice B. Instalación y configuración de Eclipse y del SDK de Android 
 
Bibliografía 
A) Obras Citadas 
B) Referencias electrónicas 
 
 
 
 
 
 
 
 
 
2 
 
 
 
 
 
AGRADECIMIENTOS 
 
Primero y antes que nada doy gracias a Dios y le dedico éste trabajo ya que 
él es el que me ha dado la fuerza para la conclusión de éste proyecto y para 
dar lo mejor de mi todos los días, sé que él siempre está conmigo. 
 
Doy gracias a mis padres, a mi hermano y a mi sobrino por estar siempre a 
mi lado apoyándome en cada momento y en cada circunstancia siempre 
dándome los mejores consejos y alicientes. Agradezco también a mi prima 
Lilia, a mi primo Víctor y toda su familia por recibir siempre también su gran 
apoyo y compartir su preocupación por mi bienestar. También agradezco a 
Rosita García por todo su apoyo y por darme la fortaleza mental que he 
necesitado. Agradezco también a mi tía Teresa por todo su apoyo, a mi tía 
Alicia, a mi prima Mónica, a mi tía Eréndira y a mi tío Rodolfo por apoyarme 
desde mis primeros estudios y también a mi tío Francisco Vázquez por su 
apoyo. 
 
Agradezco a mi asesor, el profesor Elio Vega Munguía por su infinito apoyo, 
su guía, su paciencia, su experiencia y sabiduría para llevar a cabo y darle 
solidez a éste proyecto. De igual manera agradezco totalmente el apoyo de 
Karlita, Willie y Fabián, encargados del Podcast de la UNAM durante el 
servicio social, durante el desarrollo de éste proyecto y por brindarme toda 
la información para el desarrollo del mismo. Agradezco también todo el 
apoyo de Janet como diseñadora gráfica. Agradezco también infinitamente el 
apoyo del jefe de carrera el Ingeniero Felipe de Jesús. 
 
Agradezco a mi amigo José Roberto por siempre tener las palabras exactas 
para alentarme en cada momento. 
 
Agradezco de manera general a todas las personas cercanas a mi por estar 
en un camino de doble vía en el cual han aprendido de mi y he aprendido de 
todas ellas. 
 
Agradezco de manera general a la máxima casa de estudios que es la UNAM 
y a los profesores que me brindaron sus conocimientos y sabiduría en mi 
formación profesional de la cual estoy orgulloso portar en alto. 
 
 
 
 
 
3 
 
 
 
 
 
 
 
 
 
 
 
 
La confianza en uno mismo es el secreto del éxito 
 
Ralph Waldo Emerson 
 
 
4 
 
ÍNDICE DE FIGURAS 
 
 
Figura 1.2.1: Evolución de los dispositivos móviles……………………………..10 
Figura 1.3.1: Arquitectura de Android………………………………………………….11 
Figura 1.3.2: Ejecución de la Máquina Virtual Dalvik……………………………14 
Figura 1.4.1: Muestra de una Activity…………………………………………………..16 
Figura 1.4.2: Mensajes que lanza un Intent al recibir un SMS………………17 
Figura 1.4.3: Mensaje que lanza un Intent al insertar memoria SD………17 
Figura 1.4.4: Proveedor de Contenidos…………………………………………………18 
Figura 1.4.5. Servicio en segundo plano……………………………………………….19 
Figura 1.4.6. Mensaje de tipo Broadcast Receiver………………………………..20 
Figura 1.4.7. Mensaje de radiodifusión generado por una aplicación…..21 
Figura 1.6.1. Diagrama del ciclo de vida de una aplicación Android………23 
Figura 2.1. Sitio de Internet del Podcast de la UNAM……………………………34 
Figura 2.2. Categorías del Podcast de la UNAM…………………………………….34 
Figura 2.3. Canal RSS del Podcast de la UNAM………………………………………35 
Figura 2.4. Visualización de los videos en el sitio…………………………………..35 
Figura 2.5. Visualización de los videos en ventana emergente……………..36 
Figura 2.6. Descarga de un video del Podcast de la UNAM……………………37 
 
 
 
 
 
 
 
5 
 
 
 
INTRODUCCIÓN 
 
 
Actualmente vivimos en un mundo que se encuentra totalmente inmerso en la 
tecnología, cada vez son más usuarios los que se encuentran conectados de 
algún modo a internet en las redes sociales, viendo videos, conferencias 
escuchando música, audio libros y un largo etcétera. En nuestros días la 
tendencia es que la mayoría de las personas cuenten con un teléfono inteligente o 
Smartphone, y no sólo se limitan a mandar mensajes de texto, ahora también 
gracias a los Smartphones se abren más canales de comunicación y existen 
aplicaciones para que se puedan consultar y enviar correo electrónico, entrar en 
las redes sociales, chatear por medio de distintas aplicaciones, mandar mensajes 
de texto a través de distintas aplicaciones y no necesariamente por el servicio que 
provee el operador; ahora éstos buscan ofrecer los mejores servicios y los 
fabricantes las mejores tecnologías para dar cabida a nuevas plataformas 
móviles, ya que representan también nuevos canales para los desarrolladores lo 
que constituye el que los propios fabricantes ofrezcan las herramientas para éstos 
últimos, pues el desarrollo móvil para empresarios es un gran negocio entre 
fabricantes y operadores por lo que es conveniente para ellos abrir estos canales 
como oportunidades para los desarrolladores, cosa que en nuestras fechas el 
desarrollo móvil se convierte en el pan de cada día para tanto empresas 
desarrolladoras de software como para desarrolladores independientes. Con el 
desarrollo e implementación de la aplicación móvil Podcast UNAMóvil se supone 
y es posible el que se pueda tener un nuevo medio como acceso al conocimiento 
y a la cultura para que asítambién se fomenten el uso de éstos recursos digitales 
entre la comunidad universitaria. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6 
 
 
 
 
 
 
1. Historia del desarrollo móvil 
Durante más de una década los dispositivos móviles han tenido presencia en 
nuestras vidas, sólo que ahora los vemos diferentes por todas las funciones que 
nos ofrecen y que obviamente se han integrado en éstos. Veamos cómo han 
evolucionado y como han llegado a lo que tenemos ahora. 
 
En 1983 Casio lanzó el PF-300 que fue el primer diario digital. Está era una 
calculadora digital que incluía capacidades para agenda telefónica, calendario y 
notas. 
 
Por otro lado, desde 1987 las comunicaciones celulares se activaron en México. 
En esos momentos teléfono como el Motorola DynaTac de dimensiones similares 
a un ladrillo y pantalla de una línea abrían el camino de ésta industria. 
 
En 1992, IBM presentó el primer Smartphone, conocido como IBM Simon 
Personal Communicator; vendido en Estados Unidos por BellSouth. Este 
dispositivo ya incluia capacidades de agenda, calendario, calculadora, correo 
electrónico, envio/recepción de fax, pantalla táctil y escritura predictiva. Era un 
dispositivo muy avanzado para su época. 
 
El Apple Newton, lanzado en 1992 es considerado como el primer PDA (Personal 
Digital Assistant). De hecho, fue Apple quien acuñó este término para referirse al 
Newton. Este dispositivo contaba con un sistema operativo desarrollado en C++ e 
integraba funciones para envío e impresión de documentos, procesador de 
palabras, agenda, calendario y calculadora. Adicionalmente permitía el desarrollo 
de aplicaciones personalizadas mediante un lenguaje de programación propietario 
llamado NewtonScript. El ambiente de desarrollo para aplicaciones en Newton 
tenía un costo inicial de $1,000 dólares y sólo era soportado en sistemas 
Macintosh, lo cual limitó su popularidad. Eventualmente fue licenciado como 
shareware y finalmente sin costo, soportando adicionalmente Windows 
 
En 1996 Palm Computing lanza su línea Pilot. Estos eran dispositivos 
monocromáticos, algunos sin iluminación en la pantalla ni puerto de 
comunicaciones infrarrojo, con capacidad de almacenamiento que fluctuaba 
desde los 128 kb hasta 1Mb de memoria. Las Pilot rápidamente se hicieron 
populares por su precio y el sistema de reconocimiento de escritura conocido 
como Graffitti. Las funcionalidades esenciales de los PDAs empezaban a 
estandarizarse: todos deberían de incluir cuando menos agenda, calendario, bloc 
de notas y calculadora. Durante estos tiempos el desarrollo de aplicaciones 
estaba basado en C; el IDE preferido para Palm era CodeWarrior de Metrowerks, 
un ambiente de desarrollo originalmente creado para Macintosh que fue portado 
posteriormente a Windows. 
 
En 1998 se acelera la carrera de los PDAs con la incursión en el mercado de HP y 
su línea Jornada. Estos dispositivos estaban basados en el sistema operativo 
7 
 
Windows CE y tenía capacidades iniciales de 16 MB de RAM, pantalla a color 
VGA y modem integrado. Las aplicaciones se desarrollaban en lenguajes de 
programación como Embedded Visual Basic (eVB) y Embedded Visual C++ (eVC) 
usando un ambiente basado en Visual Studio conocido como Microsoft Embedded 
Tools. 
 
Los primeros esfuerzos para integrar comunicaciones inalámbricas en los PDAs 
se dieron a principios de la primera década de los años 2000. En 2001, el 
Handspring Visor ya soportaba un módulo de extensión llamado VisorPhone que 
lo habilitaba como teléfono usando la red GSM. En el 2002 Handspring lanzó el 
Treo 180, que ya integraba capacidades de teléfono celular sin necesidad de 
dispositivos externos. 
 
En el 2002 Research in Motion introduce al mercado los primeros dispositivos 
BlackBerry que incorporan correo electrónico y telefonía celular. Estas 
capacidades hizo del BlackBerry el primer dispositivo completamente integrado y 
optimizado para comunicaciones inalámbricas. 
 
Como consecuencia del incremento de plataformas y funcionalidades, durante 
este periodo los lenguajes de programación y ambientes de desarrollo para 
Smartphones aumentaron significativamente. Surgen RADs (Rapid Application 
Development) para dispositivos móviles, el más destacado: Satellite Forms que 
permite el diseño visual de formas y pantallas para PalmOS y Windows Mobile. 
Los lenguajes tradicionales de desarrollo para dispositivos móviles se consolidan, 
pero también los lenguajes modernos comienzan a permear: Java 2 Micro Edition, 
.Net Compact Framework, Phyton. Esto trae como consecuencia que el universo 
de desarrolladores para dispositivos móviles crezca significativamente y con ello 
la cantidad de aplicaciones móviles. 
 
Durante los años 2003 a 2007 los fabricantes tradicionales de PDA’s pasaron por 
momentos de silencio, seguían produciendo dispositivos con las mismas 
características, aunque incrementaban las capacidades de procesamiento y 
almacenaje. Palm produce nuevas versiones de Treo, algunas con el sistema 
operativo PalmOS y otras con Windows Mobile. HP tampoco incorpora grandes 
innovaciones, más allá de incorporar lectores de huella digital. BlackBerry se 
consolida en el mundo corporativo mediante su BlackBerry Enterprise Server. Por 
el lado de los fabricantes de teléfonos, Nokia incursiona en el sector de los 
Smartphones con la serie N con el modelo N70, basado en el sistema operativo 
Symbian, incorporando pantalla a color, cámara fotográfica, soporte de 
aplicaciones Java, mensajes multimedia, navegador Opera, radio y tonos 
polifónicos. Con esto se inicia una carrera entre los fabricantes de teléfonos 
celulares para brindar cada vez mayor convergencia en sus dispositivos. Por su 
parte ésta etapa los proveedores de redes celulares se dedicaron a madurar sus 
tecnologías y prepararse para la migración hacia GSM y 3G. 
 
El letargo se rompe en 2007 cuando Apple lanza al mercado el iPhone, el cual 
asombró al vender más de 270,000 dispositivos en las primeras 30 horas. Unas 
de las características más importantes del iPhone son su sistema operativo 
propietario con una interfaz de usuario única y un acelerómetro integrado, que 
permite cambiar la posición de la imagen en la pantalla de acuerdo con la posición 
8 
 
física del teléfono. Adicionalmente, el teléfono reconoce “gestos” realizado con los 
dedos sobre la pantalla, para ejecutar acciones. 
 
En 2008 México los principales proveedores de telefonía celular habilitan su red 
para soportar GSM / 3G lo cual abre camino para nuevos dispositivos y servicios. 
 
Apple libera el iPhone SDK, a través del cual se pueden desarrollar aplicaciones 
para el iPhone usando el ambiente de desarrollo XCode. Así mismo, Apple abre 
su App Store, una tienda de aplicaciones en línea donde los desarrolladores 
pueden ofrecer sus aplicaciones para que sean compradas y descargadas por los 
usuarios. En los primeros 9 meses de existencia, la App Store acumuló más de 
35,000 aplicaciones y ha superado el billón (mil millones) de descargas. Queda 
claro que el impacto de éste modelo para ofertar aplicaciones. De igual forma los 
demás proveedores, desde Microsoft hasta Research in Motion anunciaron sus 
propios App Stores. 
 
También en el 2008 se liberó Android, una plataforma Open Source para 
Smartphones. Detrás de éste lanzamiento está Google, Intel, eBay y otros que 
forma el Open Handset Alliance. Android está basado en el sistema operativo 
Linux y las aplicaciones se programan en Java, lo que lo hace atractivo a una 
gran cantidad de desarrolladores. 
 
En el 2009 Apple liberó el beta de iPhone SDK 3.0, Android se encontraba en la 
versión 1.5 y Microsoft liberó la versión 6.5 del Windows Mobile la cual ha 
incorporado capacidades de computo en la nube, Palm lanzó el Palm Pre con el 
sistema operativo WebOS, en el cual las aplicaciones se desarrollan usando 
tecnologías sencillas y conocidas como HTML, Javascript y CSS. 
 
En enero de 2010 Apple anuncia el iPad la cual es una tableta electrónica en la 
que se agreganlas funciones de los smartphones junto con las tareas de 
escritorio que se pueden hacer en una Mac y la cual actualmente es la iPad 3 y el 
iPhone está en la versión 4S, el SDK del mismo en la versión 6, el BlackBerry 
continua con la producción de nuevos modelos y series. 
 
Actualmente Android se encuentra en la versión 5.0 con nombre clave Lollipop 
versión para la cual Google renueva totalmente el sistema operativo cambiando la 
máquina virtual Dalvik por la máquina virtual Android Runtime (ART) y oficializa 
como entorno de desarrollo integrado (IDE) su herramienta Android Studio con la 
cual facilita el desarrollo no sólo para smartphones y tablets sino también para 
relojes inteligentes (smartwatch), televisores, dispositivos con arquitectura x86 y 
de 64 bits. 
 
 
 
 
 
 
 
 
 
9 
 
 
 
 
 
 
1.1. ¿Qué es Android? 
Android es una pila de software creada inicialmente para teléfonos móviles 
(smartphones). No es una plataforma de hardware. Incluye un sistema operativo 
basado en Linux, una completa interfaz de usuario, aplicaciones, bibliotecas de 
código, estructuras para aplicaciones compatibilidad multimedia para que el 
teléfono pueda realizar funciones más allá de los dispositivos que se usaban de 
antaño. 
 
Android era un sistema operativo para móviles prácticamente desconocido 
propiedad de una empresa llamada Android Inc hasta que en 2005 Google lo 
compró, el creador de éste sistema operativo se llama Andy Rubin. Android es un 
producto de Google, en concreto de la Open Handset Alliance, una alianza 
formada por aproximadamente 30 organizaciones dispuestas a instaurar una 
telefonía abierta y de mejor calidad en el mercado. En noviembre de 2007 sólo 
circulaban rumores de que el gigante de Internet tenía en planes lanzar un 
proyecto para móviles y precisamente por esas fechas se lanzó la Open Handset 
Alliance cuando se proporcionó la primera versión de Android, junto con el SDK 
para que los programadores empezaran a crear sus aplicaciones para este 
sistema 
 
 
1.2. ¿Por qué Android? 
Android es la primera plataforma de software a código abierto (OpenSource) para 
aplicaciones móviles con posibilidad de adecuarse a diferentes mercados. Android 
es un sistema operativo basado en el núcleo de Linux, por esa razón tiene 
inmersas las características de ser libre gratuito y multiplataforma. Cualquier 
desarrollador puede crear aplicaciones para Android sin la necesidad de pagar 
membresías anuales para obtener el kit de desarrollo y crear los elementos o 
aumentar las funciones de los que carece ya que como se ha mencionado es una 
plataforma abierta que se puede modificar. Del mismo modo, se pueden obtener 
codecs multimedia y librerías creadas por terceros y no es necesario depender 
de Google para disfrutar de nuevas funciones. 
 
El mercado de la tecnología móvil es muy cambiante y sus agentes tienen 
diferentes objetivos. Consideremos la extraña relación entre operadores, 
fabricantes y distribuidores de software. Los operadores de telefonía móvil quieren 
bloquear sus redes, para controlar y medir el tráfico. Los fabricantes de 
dispositivos desean diferenciarse a través de funciones, fiabilidad y precios. Los 
distribuidores de software desean un acceso sin trabas para proporcionar 
aplicaciones de primer nivel. Si a esto le unimos una base de exigentes clientes, 
tanto consumidores como corporaciones, adicta al teléfono gratuito y operadores 
que recompensan el cambio de servicio pero no la lealtad del cliente. 
 
10 
 
Android se comercializa bajo dos licencias de código abierto diferentes. El núcleo 
de Linux se comercializa bajo la licencia GPL (General Public License), como 
exige todo núcleo de sistema operativo de código abierto. La plataforma Android 
sin el núcleo, tiene una licencia ASL (Apache Software License). Aunque ambos 
modelos de licencia están orientados al código abierto, la principal diferencia es 
que la licencia de Apache se considera más proclive al uso comercial. 
 
Aunque los inicios fueron un poco lentos, debido a que se lanzó el sistema 
operativo antes que el primer móvil, Android rápidamente se ha colocado como 
una plataforma que ya se ha ganado muchos adeptos y que ha demostrado una 
velocidad de madurez importante debido a los diferentes fabricantes que han 
adaptado interesantes piezas de hardware para acompañar las diferentes 
funciones de Android 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 1.2.1. La evolución en la funcionalidad de los dispositivos móviles se ha 
englobado en los smartphones. 
Fuente: Ableson, F.; Collins, C.; Sen, R.; Android, Guía para desarrolladores; 2009: 35 
 
 
 
 
 
 
 
 
 
11 
 
 
 
 
 
1.3. Arquitectura de Android 
Para el desarrollo de aplicaciones para Android es importante conocer como está 
organizado éste sistema operativo. La arquitectura de Android está formada por 
varias capas esta distribución permite acceder a las capas más bajas mediante el 
uso de librerías para que así el desarrollador no tenga que programar a bajo nivel 
las funcionalidades necesarias para que una aplicación haga uso de los 
componentes de hardware de los teléfonos. Cada una de las capas utiliza 
elementos de la capa inferior para realizar sus funciones, es por ello que a este 
tipo de arquitectura se le conoce también como pila. A continuación se muestra el 
diagrama de la arquitectura de Android el cual aparece en la documentación 
oficial del mismo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1.4. Componentes de una aplicación Android 
 
1.5. Mapa mental de Android 
 
 
 
 
Figura 1.3.1. Arquitectura de Android 
Fuente: http://androideity.com/2011/07/04/arquitectura-de-android/ 
 
 
 
Explicaremos cada una de las capas comenzando por la capa más inferior hasta 
la más superior. 
 
12 
 
 
 
 
 
Kernel de Linux 
 
El núcleo del sistema operativo Android está basado en el kernel de Linux versión 
2.6, similar al que puede incluir cualquier distribución de Linux, como Ubuntu, solo 
que adaptado a las características del hardware en el que se ejecutará Android, 
es decir, para dispositivos móviles. 
 
El núcleo actúa como una capa de abstracción entre el hardware y el resto de las 
capas de la arquitectura. El desarrollador no accede directamente a esta capa, 
sino que debe utilizar las librerías disponibles en capas superiores. Así también se 
evita el complicarse al tener que conocer las características específicas de cada 
teléfono. Si necesitamos hacer uso de la cámara, el sistema operativo se encarga 
de utilizar la que incluya el teléfono, sea cual sea. Para cada elemento de 
hardware del teléfono existe un controlador (o driver) dentro del kernel que 
permite utilizarlo desde el software. 
El kernel también se encarga de gestionar los diferentes recursos del teléfono 
(energía, memoria, etc.) y del sistema operativo en sí: procesos, elementos de 
comunicación (networking), etc. 
 
Librerías 
La siguiente capa que se sitúa justo sobre el kernel la componen las bibliotecas 
nativas de Android, también llamadas librerías. Están escritas en C o C++ y 
compiladas para la arquitectura hardware específica del teléfono. Estas 
normalmente están hechas por el fabricante, quien también se encarga de 
instalarlas en el dispositivo antes de ponerlo a la venta. El objetivo de las librerías 
es proporcionar funcionalidad a las aplicaciones para tareas que se repiten con 
frecuencia, evitando tener que codificarlas cada vez y garantizando que se llevan 
a cabo de la forma “más eficiente”. 
Entre las librerías incluidas habitualmente encontramos OpenGL (motor gráfico), 
Bibliotecas multimedia (formatos de audio, imagen y video), Webkit (navegador), 
SSL (cifrado de comunicaciones), FreeType (fuentes de texto), SQLite (base de 
datos), entre otras. 
Entorno de Ejecución 
Como podemos apreciar en la figura 1.3.1, el entorno de ejecución de Android no 
se considera una capa en sí mismo, dado que también está formado por librerías. 
Aquí encontramos las librerías con las funcionalidadeshabituales de Java así 
como otras específicas de Android. 
El componente principal del entorno de ejecución de Android es la máquina virtual 
Dalvik la cual es una máquina virtual intérprete que ejecuta archivos en el formato 
Dalvik Executable (.dex), un formato optimizado para el almacenamiento eficiente 
y ejecución mapeable en memoria. Su objetivo fundamental es el mismo que 
13 
 
cualquier máquina virtual, permite que el código sea compilado a un bytecode 
independiente de la máquina en la que se va a ejecutar, y la máquina virtual 
interpreta este bytecode a la hora de ejecutar el programa. Una de las razones 
por las cuáles no se optó por utilizar la máquina virtual de Java es la necesidad de 
optimizar al máximo los recursos y enfocar el funcionamiento de los programas 
hacia un entorno dónde los recursos de memoria, procesador y almacenamiento 
son escasos. 
Dalvik está basada en registros y puede ejecutar clases compiladas (válgase la 
redundancia) por un compilador Java y que posteriormente han sido convertidas 
al formato nativo usando la herramienta “dx”. El hecho de que corra sobre un 
kernel Linux le permite delegar las tareas relacionadas con la gestión de hilos y 
memoria a bajo nivel. 
Otra característica importante de Dalvik es que ha sido optimizada para que 
múltiples instancias de ella puedan funcionar al mismo tiempo con un impacto 
muy bajo en el rendimiento de la memoria del dispositivo. El objetivo de esto es 
proteger a las aplicaciones, de forma que el cierre o fallo inesperado de alguna de 
ellas no afecte de ninguna forma a las demás. 
La máquina virtual de Java, que podemos encontrar en casi todas las 
computadoras personales actuales, se basa en el uso de las pilas. De modo 
contrario, Dalvik utiliza los registros, ya que los teléfonos móviles están 
optimizados para la ejecución basada en los mismos. 
Aunque utilizamos el lenguaje Java para programar las aplicaciones Android, el 
bytecode de Java no es ejecutable en un sistema Android. De igual forma, las 
librerías Java que utiliza Android son ligeramente distintas a las utilizadas en Java 
Standard Edition (Java SE) o en Java Mobile Edition (Java ME), guardando 
también características en común. 
El uso de Dalvik permite reducir bastante el tamaño del programa buscando 
información duplicada en las diversas clases y reutilizándola. 
Lo que llamamos en Java como “recolectar basura”, que libera el espacio en 
memoria de objetos que ya no utilizamos en nuestros programas, ha sido 
perfeccionada en Android con el fin de mantener siempre libre la máxima memoria 
posible. 
De igual forma, el hecho de que Android haga un uso extenso del lenguaje XML 
para definir las interfaces gráficas y otros elementos, implica que estos archivos 
deben ser linkeados a la hora de compilar y para que su conversión a bytecode 
pueda mejorar el rendimiento de nuestras aplicaciones. 
 
 
 
14 
 
 
 
 
 
 
 
Figura 1.3.2. Ejecución de la Máquina Virtual Dalvik 
Fuente: http://androideity.com/2011/07/07/la-maquina-virtual-dalvik/ 
 
Framework de Aplicaciones 
La siguiente capa está formada por todas las clases y servicios que utilizan 
directamente las aplicaciones para realizar sus funciones. La mayoría de los 
componentes de esta capa son librerías Java que acceden a los recursos de las 
capas anteriores a través de la máquina virtual Dalvik. De acuerdo a la figura 
1.3.1 encontramos: 
 
1. Activity Manager: Se encarga de administrar la pila de actividades de 
nuestra aplicación así como su ciclo de vida. 
2. Windows Manager: Se encarga de organizar lo que se mostrará en 
pantalla. Básicamente crea las superficies en la pantalla que 
posteriormente pasarán a ser ocupadas por las actividades. 
3. Content Provider: Esta librería crea una capa que encapsula los datos que 
se compartirán entre aplicaciones para tener control sobre cómo se accede 
a la información. 
4. View: En Android, las vistas los elementos que nos ayudarán a construir las 
interfaces de usuario: botones, cuadros de texto, listas y hasta elementos 
más avanzados como un navegador web o un visor de Google Maps. 
5. Notification Manager: Engloba los servicios para notificar al usuario cuando 
algo requiera su atención mostrando alertas en la barra de estado. Un dato 
importante es que esta biblioteca también permite jugar con sonidos, 
activar el vibrador o utilizar los LEDs del teléfono en caso de tenerlos. 
6. Package Manager: Esta biblioteca permite obtener información sobre los 
paquetes instalados en el dispositivo Android, además de gestionar la 
instalación de nuevos paquetes. Con paquete nos referimos a la forma en 
15 
 
que se distribuyen las aplicaciones Android, estos contienen el archivo 
.apk, que a su vez incluyen los archivos .dex con todos los recursos y 
archivos adicionales que necesite la aplicación, para facilitar su descarga e 
instalación. 
7. Telephony Manager: Con esta librería se puede realizar llamadas o enviar 
y recibir SMS/MMS, aunque no permite reemplazar o eliminar la actividad 
que se muestra cuando una llamada está en curso. 
8. Resource Manager: Ésta librería permite gestionar todos los elementos que 
forman parte de la aplicación y que están fuera del código, es decir, 
cadenas de texto traducidas a diferentes idiomas, imágenes, sonidos o 
layouts. En un post relacionado a la estructura de un proyecto Android 
veremos esto más a fondo. 
9. Location Manager: Permite determinar la posición geográfica del dispositivo 
Android mediante GPS o redes disponibles y trabajar con mapas. 
10. Sensor Manager: Nos permite manipular los elementos de hardware del 
teléfono como el acelerómetro, giroscopio, sensor de luminosidad, sensor 
de campo magnético, brújula, sensor de presión, sensor de proximidad, 
sensor de temperatura, etc. 
11. Cámara: Con esta librería podemos hacer uso de la cámara del dispositivo 
para tomar fotografías o para grabar vídeo. 
12. Multimedia. Permiten reproducir y visualizar audio, vídeo e imágenes en el 
dispositivo. 
Aplicaciones 
En la última capa se incluyen todas las aplicaciones del dispositivo, tanto las que 
tienen interfaz de usuario como las que no, las nativas (programadas en C o C++) 
y las administradas (programadas en Java), las que vienen preinstaladas en el 
dispositivo y aquellas que el usuario ha instalado. 
En esta capa encontramos también la aplicación principal del sistema: Inicio 
(Home) o lanzador (launcher), porque es la que permite ejecutar otras 
aplicaciones mediante una lista y mostrando diferentes escritorios donde se 
pueden colocar accesos directos a aplicaciones o incluso widgets, que son 
también aplicaciones de esta capa. 
 
 
1.4. Componentes de una aplicación Android 
Las aplicaciones Android se construyen mediante bloques esenciales de 
componentes, cada uno de los cuales existen como una entidad propia y 
desempeña un papel específico; cada elemento es una pieza única que ayuda a 
definir el comportamiento general de la aplicación. Es importante mencionar que 
algunos de estos elementos son el punto de entrada para que los usuarios 
16 
 
interactúen con la aplicación y en muchos casos veremos que unos elementos 
dependen de otros. 
Hay cuatro tipos de componentes en una aplicación Android. Cada uno de ellos 
tiene un propósito y un ciclo de vida distinto que define cómo se crea y se 
destruye el componente. 
Activities (Actividades) 
Es el bloque encargado de construir la interfaz de usuario. Puedes pensar en una 
actividad como el análogo de una ventana en una aplicación de escritorio. En las 
actividades recae la responsabilidad de presentar los elementos visuales y 
reaccionar a las acciones del usuario. 
Si bien podemos pensar en actividades que no posean una interfaz de usuario, 
regularmente el código en estos casos se empaqueta en forma de content 
providers (proveedores de contenido) y services (servicios) que detallaremos en 
un momento. 
Toda actividad se inicia como respuesta a un Intent.Figura 1.4.1. El área que se muestra en la llave es la Activity que contiene una 
interfaz gráfica de usuario 
Fuente: Elaboración propia (2014) 
Intents (Intenciones) 
Son los mensajes del sistema que se encuentran corriendo en el interior del 
dispositivo. Se encargan de notificar a las aplicaciones de varios eventos: 
cambios de estado en el hardware (ej. cuando se inserta una memoria SD al 
17 
 
teléfono), notificaciones de datos entrantes (ej. cuando llega un SMS) y eventos 
en las aplicaciones (ej. cuando una actividad es lanzada desde el menú principal). 
Así como podemos crear actividades que respondan a las intenciones, podemos 
crear también intenciones que lancen actividades o usarlas para detonar eventos 
ante algunas situaciones específicas (ej. que el teléfono nos notifique por medio 
de un mensaje cuando nuestra localización esté a 10 mts del punto de destino). 
Es importante mencionar que el sistema es el que elige entre las actividades 
disponibles en el teléfono y dará respuesta a la intención con la actividad más 
adecuada. 
 
 
 
 
 
 
 
 
 
Figura 1.4.2. Mensaje que lanza/genera un Intent al recibirse un SMS 
Fuente: Elaboración propia (2014) 
 
 
 
 
 
 
 
 
Figura 1.4.3. Mensaje que lanza/genera un Intent al insertarse una memoria SD 
Fuente: Elaboración propia (2014) 
18 
 
 
 
Content Providers (Proveedores de Contenido) 
Este elemento ofrece un conjunto de datos almacenados en el dispositivo para 
que se puedan accesar y compartir por varias aplicaciones. Nosotros podemos 
guardar datos en archivos del sistema, en una base de datos en SQLite, en la 
web o en cualquier otro lugar de almacenamiento persistente a la que la 
aplicación pueda tener acceso. A través del proveedor de contenido, otras 
aplicaciones pueden consultar o incluso modificar los datos (solamente si el 
proveedor de contenidos de esa aplicación lo permite). 
El modelo de desarrollo en Android nos invita a los desarrolladores a pensar 
siempre en hacer los datos de nuestras aplicaciones disponibles para otras 
aplicaciones. De manera que cuando creamos un proveedor de contenido, 
podemos tener un control completo de nuestros datos y definir la forma en que 
éstos serán accesados. 
Un ejemplo sencillo de esto es el proveedor de contenido que tiene Android para 
gestionar la información de contactos (agenda) del teléfono. Cualquier aplicación 
con los permisos adecuados puede realizar una consulta a través de un 
proveedor de contenido como ContactsContract.Data para leer y escribir 
información sobre una persona en particular. 
 
 
 
 
 
 
 
 
 
Figura 1.4.4. Otras aplicaciones pueden tener acceso a datos mediante el 
proveedor de contenidos de una aplicación 
Fuente: Ableson, F.; Collins, C.; Sen, R.; Android, Guía para desarrolladores; 2009: 54 
 
 
19 
 
 
Services (Servicios) 
Las actividades, las intenciones y los proveedores de contenido explicados arriba 
son de corta duración y pueden ser detenidos en cualquier momento. Por el 
contrario, los servicios están diseñados para seguir corriendo, y si es necesario, 
de manera independiente de cualquier actividad. Un ejemplo de un servicio es el 
uso de la aplicación de la radio, donde podemos estar escuchándola y a la vez 
utilizando otra aplicación, pues como se ha mencionado, este servicio es capaz 
de correr en segundo plano respecto a la o a las aplicaciones que estamos 
usando. En la siguiente figura 1.4.4 se observa la captura de pantalla donde se 
está usando la aplicación de notas y el servicio de la aplicación de la radio 
también está en ejecución. 
 
 
 
 
 
 
 
 
Figura 1.4.5. Aquí se ilustra cómo podemos estar en otra aplicación mientras el 
servicio de la aplicación de la radio continua en segundo plano 
Fuente: Elaboración propia (2014) 
 
Broadcast Receivers (Receptores de Radiodifusión) 
Este componente responde a las notificaciones de difusión de todo el sistema 
como por ejemplo que la pantalla se ha apagado, que la batería del teléfono está 
por terminarse o que una fotografía ha sido tomada. Las aplicaciones también 
pueden lanzar este tipo de notificaciones, un ejemplo de ello es el aviso de que 
alguna información ha terminado de descargarse en el dispositivo y se encuentran 
disponibles para su utilización. 
Aunque los broadcast receivers no muestran una interfaz de usuario, pueden 
crear notificaciones en la barra de estado del teléfono para avisarle al usuario 
cuando un evento de este tipo se genera. Podemos pensar en estos elementos 
como el medio por el cual otros componentes pueden ser iniciados en respuesta a 
20 
 
algún evento. Cabe mencionar que cada una de las emisiones de los broadcast 
receivers se representa como una intención. 
Un aspecto único y útil del diseño del sistema operativo Android es que cualquier 
aplicación puede hacer uso de otro componente de otra aplicación. Supongamos 
que la aplicación requiere que el usuario tome una fotografía con la cámara del 
teléfono; es probable que exista otra aplicación que haga exactamente eso, por lo 
que resultará más fácil reutilizar esa función que programar una específica en 
nuestra aplicación. Para ello no es necesario incluir o vincular el código de la 
aplicación de la cámara, simplemente hará falta iniciar la actividad que se 
encargue de capturar la foto. Una vez hecho, la foto estará disponible para usarla 
en la aplicación principal. Para el usuario parecerá que la cámara de su teléfono 
es una parte de la aplicación. 
Debido a que el sistema Android ejecuta cada una de las aplicaciones en un 
proceso separado con permisos de archivos que pueden restringir el acceso a 
otras aplicaciones, las aplicaciones no pueden activar de forma directa un 
componente de otra aplicación. El único que puede hacer esto es el sistema 
operativo en sí. Por lo tanto, para activar un elemento de otra aplicación, debemos 
pasarle un mensaje al sistema dónde se especifique qué elemento es el que 
necesitamos correr. De esta manera el sistema activará el componente y 
podremos manipularlo según sea nuestra necesidad. 
 
 
 
 
 
 
 
 
 
 
Figura 1.4.6. Mensaje que genera un Broadcast Receiver y que lanza a través de un 
Intent 
Fuente: Elaboración propia (2014) 
 
 
21 
 
 
 
 
 
 
 
 
 
 
Figura 1.4.7. Mensaje de radiodifusión generado por una aplicación 
Fuente: Elaboración propia (2014) 
1.5. Procesos en Android 
En la mayoría de los casos, una aplicación Android se ejecuta en su propio 
proceso de Linux. Este proceso es creado para la aplicación cuando la 
arrancamos y seguirá corriendo hasta que no sea necesario y el sistema reclame 
recursos para otras aplicaciones y se los de a éstas. 
Así es, el tiempo de vida de un proceso en Android es manejada por el sistema 
operativo, basándose en las necesidades del usuario, los recursos disponibles, 
etc. Si tenemos una aplicación que está consumiendo muchos recursos y 
arrancamos otra nueva aplicación, el sistema operativo probablemente le diga a la 
aplicación que se queda en segundo plano que libere todo lo que pueda, y si es 
necesario la cerrará. 
En Android los recursos son normalmente muy limitados y por eso el sistema 
operativo tiene más control sobre las aplicaciones que en programas de escritorio. 
Para determinar qué procesos eliminar ante un escenario dónde el dispositivo 
tenga poca batería u otros en los que sea de relevante importancia administrar los 
recursos, Android les asigna una prioridad a cada uno de ellos basándose en la 
siguiente jerarquía: 
1. Foreground Process 
Es la aplicación que contiene la actividad ejecutada en primer plano en la pantalla 
del usuario y con la cual está interactuando ahora mismo (Se ha llamado a su 
método onResume()). Por lo regular habrá muy pocos procesos de este tipo 
corriendo a la vez en el sistema y son aquellos que se eliminarán como última 
22 
 
opción si la memoria es tan baja que ni matando al resto de procesos tenemos los 
recursos necesarios. 
2.Visible Process 
Es un proceso que aloja una Activity que no se está ejecutando en primer plano 
(es decir, su método onPause() ha sido llamado). Un ejemplo puede ser la 
aplicación de correo en la cual demos click en algún enlace de interés que nos 
lance el navegador, este pasaría a ser el Foreground Process dejando a la 
aplicación de correo en el concepto de Visible Process. Este tipo de procesos se 
cerrarán únicamente cuando el sistema no tenga los recursos necesarios para 
mantener corriendo todos los procesos que estén en primer plano. 
3. Service Process 
Son aquellos que corren cuando un Service ha sido invocado. Estos procesos 
hacen cosas en segundo plano que normalmente son importantes para el usuario 
(conexión con servidores, actualización del GPS, reproductor de música, etc.), el 
sistema nunca va a liquidar un servicio a menos que sea necesario para mantener 
vivos todos los Visible y Foreground. 
4. Background Process 
Es un proceso que contiene una Activity que actualmente no es visible por el 
usuario y que ya no tienen demasiada importancia. Por ejemplo, los programas 
que ejecutó el usuario y que tarda en volver a usar, pasan a estar en background. 
Por eso es importante que cuando nuestra aplicación pase a Background, el 
sistema libere, en la medida de lo posible, todos los recursos que pueda para que 
su rendimiento sea óptimo. 
5. Empty Process 
Es un proceso que no aloja ningún tipo de componente. Su razón de ser es el de 
tener una caché disponible para la próxima aplicación que lance el usuario. Es 
común que el sistema elimine este tipo de procesos con frecuencia para así poder 
obtener memoria disponible. 
 
 
 
 
 
 
 
23 
 
1.6. Ciclo de vida de una aplicación Android 
Como se ha mencionado en los procesos de Android, el sistema operativo es el 
encargado de pausar, parar o destruir nuestra aplicación según las necesidades 
de recursos del dispositivo, aun así, nosotros como desarrolladores debemos 
aprender a controlar todos estos eventos para hacer nuestras aplicaciones 
robustas y mejorar el rendimiento de los teléfonos. 
Para explicar el ciclo de vida de una aplicación citamos el diagrama que se 
encuentra en la documentación oficial de Android. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 1.6.1. Diagrama del Ciclo de vida de una aplicación Android 
Fuente: http://developer.android.com/intl/es/reference/android/app/Activity.html 
A continuación explicaremos cada uno de los procesos del ciclo de vida 
 
24 
 
 
 
 onCreate() 
Se dispara cuando la Activity es llamada por primera vez. Aquí es donde debemos 
crear la inicialización normal de la aplicación, crear vistas, hacer los bind de los 
datos, etc. Este método da acceso al estado de la aplicación cuando se cerró. 
Después de esta llamada siempre se llama al onStart(). 
 onRestart() 
Se ejecuta cuando la Activity ha sido parada y se quiere volver a utilizar. Como se 
ilustra en el diagrama se puede ver que después de un onStop() se ejecuta el 
onRestart() e inmediatamente llama a un onStart(). 
 onStart() 
Se ejecuta cuando la Activity se está mostrando apenas en la pantalla del 
dispositivo del usuario. 
 onResume() 
Se ejecuta una vez que la Activity ha terminado de cargarse en el dispositivo y el 
usuario empieza a interactuar con la aplicación. Cuando el usuario ha terminado 
de utilizarla es cuando se llama al método onPause(). 
 onPause() 
Se ejecuta cuando el sistema arranca una nueva Activity que necesitará los 
recursos del sistema centrados en ella. Hay que procurar que la llamada a este 
método sea rápida ya que hasta que no se termine su ejecución no se podrá 
arrancar la nueva Activity. Después de esta llamada puede venir un onResume() 
si la Activity que haya ejecutado el onPause() vuelve a aparecer en primer plano o 
un onStop() si se hace invisible para el usuario. 
 onStop() 
Se ejecuta cuando la Activity ya no es visible para el usuario porque otra Activity 
ha pasado a primer plano. Si vemos el diagrama, después de que se ha ejecutado 
este método nos quedan tres opciones: ejecutar el onRestart() para que 
la Activity vuelva a aparecer en primer plano, que el sistema elimine este proceso 
porque otros procesos requieran memoria o ejecutar el onDestroy() para apagar la 
aplicación. 
 onDestroy() 
Esta es la llamada final de la Activity, después de ésta, es totalmente destruida. 
Esto pasa por los requerimientos de memoria que tenga el sistema o porque de 
25 
 
manera explícita el usuario manda a llamar este método. Si quisiéramos volver a 
ejecutar la Activity se arrancaría un nuevo ciclo de vida. 
 
1.7. Android y sus versiones 
Android en sus distintas versiones, desde la primera versión comercial contiene 
nombres claves en orden alfabético los cuales hacen alusión a distintos alimentos. 
Con cada versión de Android se agregan mejoras a la interfaz de programación 
de aplicaciones (API por sus siglas en inglés) las cuales se agregan a la biblioteca 
de clases y métodos de dicho sistema. A continuación se describirán cada versión 
de Android y su nivel de API correspondiente. 
Android Beta 
La versión Beta de Android fue lanzada el 5 de noviembre de 2007 mientras que 
las herramientas de desarrollo (Software Development Kit SDK) fue lanzado el 12 
de noviembre de 2007. 
 
Android Apple Pie 1.0 nivel de API 1 (septiembre 2008) 
Ésta es la primera versión comercial de Android, el primer dispositivo que la uso 
fue el HTC Dream que incorporó las siguiente características. 
 
Aparece Android Market como tienda digital para la descarga y actualización de 
aplicaciones. Soporte para cámara fotográfica pero con poca resolución y calidad 
en las fotos. Incorpora también la mensajería instantánea (chat) servicio de 
mensajes de texto (sms) y mensajes multimedia (mms). Con ello implementa 
también la versión móvil de YouTube para Android. Comienza a dar soporte a 
redes y conexiones inalámbricas por Wi-Fi y Bluetooth. 
 
Android 1.1 Banana Bread nivel de API 2 (febrero 2009) 
Fue lanzada inicialmente para el HTC Dream, no se añadieron funcionalidades 
simplemente se corrigieron algunos errores de la versión anterior y cambió la API. 
Alguna de las funcionalidades que implementó fue la posibilidad de adjuntar 
archivos en los mensajes de texto y mostrar la información de los negocios en su 
búsqueda en los mapas. 
 
Android Cupcake 1.5 nivel de API 3 (abril 2009) 
Es la primera versión que se publicó comercialmente. Como novedades se 
incorpora la posibilidad de teclado en pantalla con predicción de texto, los 
terminales ya no tienen que tener un teclado físico, así como la capacidad de 
grabación avanzada de audio y video. También aparecen los widgets de escritorio 
y live folders. Incorpora soporte para bluetooth estéreo, por lo que permite 
conectarser automáticamente a auriculares bluetooth. Las transiciones entre 
ventanas se realizan mediante animaciones. Además de la capacidad de subir 
videos a YouTube. 
 
Android Donut 1.6 nivel de API 4 (septiembre 2009) 
Permitió capacidades de búsqueda avanzada en todo el dispositivo, También 
incorporó gestos (gestures) y tecnología multitáctil (multi-touch). Permitió la 
26 
 
síntesis de texto a voz. Así mismo facilitó que una aplicación pueda trabajar con 
diferentes densidades de pantalla. Soporte para resolución de pantallas WVGA. 
Aparece un nuevo atributo XML, onClick, que puede especificarse en una vista. 
Aparece Play Store antes Android Market, en el cual se añade una mejora que 
permite una búsqueda más sencilla de aplicaciones. También se agregaron 
mejoras en la aplicación de la cámara. Actualización de soporte para la tecnología 
CDMA/EDVO, 802.1x y VPNs 
 
Android Éclair 2.0 nivel de API 5 (octubre 2009) 
Ésta versión de API contó con pocos usuarios, dado que la mayoría de los 
fabricantes permitieron actualizar directamente de la versión 1.6 a la versión 2.1. 
Como novedades cabría destacar que incorpora un API para manejar el bluetooth 
2.1. Nueva funcionalidadque permite sincronizar adaptadores para conectarlo a 
cualquier dispositivo. Ésta versión ofreció un servicio centralizado de manejo de 
cuentas de correo electrónico y de redes sociales. Mejoró la gestión de contactos 
y ofreció más ajustes en la cámara. Optimizó la velocidad del hardware. Se 
aumentó el número de tamaños de ventana y resoluciones soportadas. Nueva 
interfaz del navegador y comenzó a dar soporte para el Lenguaje Marcado de 
Hipertexto en su versión 5 (HTML5). Añadió mejoras en la aplicación del 
calendario y dio soporte para Microsoft Exchange. Se añade la clase MotionEvent 
para soportar eventos en pantallas multitactiles. En la versión 2.0.1 tuvo cambios 
menores en la API. 
 
Android 2.1 nivel de API 7 (enero 2010) 
Se consideró una actualización menor, por lo que le siguieron su nombre clave 
continuó siendo Éclair. Se destacó el reconocimiento de voz que permitió 
introducir un campo de texto dictado sin necesidad de utilizar el teclado. También 
permitió desarrollar fondos de pantalla animados. Se podía obtener información 
sobre la red de la señal actual que posea el dispositivo. En el paquete WebKit se 
incluyen nuevos métodos para manipular bases de datos almacenadas en la web. 
También comenzó a permitir obtener los permisos de geolocalización y 
modificarlos en WebView. Incorporó mecanismos para administrar la 
configuración de la memoria caché de aplicaciones, almacenamiento web y 
modificar la resolución de la pantalla. 
 
Android Froyo 2.2 nivel de API 8 (mayo 2010) 
Como característica más destacada se puede indicar la mejora de velocidad de 
ejecución de las aplicaciones (ejecución del código de la CPU de 2 a 5 veces más 
rápido que en la versión anterior). Esto se consiguió con la introducción de un 
nuevo compilador JIT de máquina virtual Dalvik 
 
Se añadieron varias mejoras relacionadas con el navegador Web, como el 
soporte de Adobe Flash 10.1 y la incorporación del motor Javascript v8 utilizado 
en chrome o la incorporación del campo subir archivo en un formulario. 
 
El desarrollo de aplicaciones permite las siguientes novedades en esta versión: se 
puede preguntar al usuario si desea instalar una aplicación en un medio de 
almacenamiento externo (como una tarjeta SD), como alternativa a la instalación 
en la memoria interna del dispositivo. Las aplicaciones comenzaron a actualizarse 
de manera automática cuando aparece una nueva versión. Proporcionó un 
27 
 
servicio para la copia de seguridad de datos que se puede realizar desde la propia 
aplicación para garantizar al usuario el mantenimiento de sus datos. Por último se 
facilita que las aplicaciones interaccionen con el reconocimiento de voz y que 
terceras partes proporcionen nuevos motores de reconocimiento. 
 
Se comenzó a mejorar la conectividad: en ésta versión de pudo comenzar a 
utilizar el teléfono celular para dar acceso a internet a otros dispositivos, tanto por 
conexión usb como por Wi-Fi. También se añadió el soporte a Wi-Fi IEEE 802.11n 
y notificaciones de tipo push. 
 
Se añadieron varias mejoras en diferentes componentes: en el API gráfica 
OpenGL ES comenzó a soportar la versión 2.0. También se pueden tomar fotos o 
video en cualquier orientación, vertical u horizontal y configurar otros ajustes de la 
cámara. Para finalizar, permite definir modos de interfaz de usuario como 
“automóvil” y “noche” para que las aplicaciones se configuren según el modo 
seleccionado por el usuario. 
 
Android Gingerbread 2.3 nivel de API 9 (diciembre 2010) 
Debido al éxito de android en las nuevas tabletas ahora soporta mayores tamaños 
de pantalla y resoluciones (WXGA y superiores). En ésta versión incorporó una 
nueva interfaz de usuario con un diseño actualizado, dentro de éstas mejoras se 
destaca la funcionalidad de cortar, copiar y pegar y un teclado en pantalla con 
capacidad multitáctil. 
 
Se incluye soporte nativo para varias cámaras, pensando en la segunda cámara 
usada para videoconferencia. La incorporación de ésta segunda cámara ha 
propiciado la inclusión de reconocimiento facial para identificar el usuario del 
terminal. 
 
La máquina virtual Dalvik introduce un nuevo recolector de basura que minimiza 
las pausas de la aplicación ayudando a garantizar una mejor animación y el 
aumento de la capacidad de respuesta en juegos y aplicaciones similares. Se 
trata de corregir así uno de los errores de este sistema operativo móvil, que en 
versiones previas no ha sido capaz de cerrar bien las aplicaciones en desuso. Se 
dispone de mayor apoyo para el desarrollo del código nativo (NDK). También se 
mejoró la gestión de energía y control de las aplicaciones y se cambió el sistema 
de ficheros que pasa de YAFFSS a ext4. 
 
Entre otras novedades se destaca el soporte nativo para telefonía sobre internet 
VoIP/SIP. El soporte para reproducción de video WebM/VP8 y codificación de 
audio AAC. El soporte para la tecnología Near Field Communication (NFC). Las 
facilidades en el audio, gráficos y entradas para los desarrolladores de 
videojuegos. El soporte nativo para más sensores como giroscopios y barómetros. 
Un gestor de descargas para descargas largas. 
 
Android Honeycomb 3.0 nivel de API 11 (febrero de 2011) 
Para mejorar la experiencia de Android en las nuevas tabletas se lanza la versión 
3.0 optimizada para dispositivos con pantallas grandes. La nueva interfaz de 
usuario ha sido completamente rediseñada con paradigmas nuevos para la 
interacción, navegación y personalización. La nueva interfaz se pone a 
28 
 
disposición de todas las aplicaciones incluso las construidas para versiones 
anteriores de la plataforma. 
 
Las principales novedades de este SDK son las siguientes: 
 
Con el objetivo de adaptar la interfaz de usuario a pantallas más grandes se 
incorporan las siguientes características: resolución por defecto WXVGA 
(1280x800) escritorio 3D con widgets rediseñados, nuevos componentes y vistas, 
notificaciones mejoradas, arrastrar y soltar, nuevo, cortar, y pegar, barra de 
acciones para que las aplicaciones dispongan de un menú contextual siempre 
presente y otras características para aprovechar las pantallas más grandes. 
 
Se mejora la reproducción de animaciones 2D/3D gracias al renderizador OpenGL 
acelerado por hardware. El nuevo motor de gráficos Rederscript saca un gran 
rendimiento de los gráficos en Android e incorpora e incorpora su propia API. 
 
Primera versión de la plataforma que soporte procesadores multinúcleo. La 
máquina virtual Dalvik ha sido optimizada para permitir multiproceso, lo que 
permite una ejecución más rápida de las aplicaciones, incluso aquellas que son 
de hilo único. 
 
Se incorporaron varias mejoras multimedia, como listas de reproducción a través 
de HTTP Live Streaming, soporte a la protección de derechos musicales (DRM) y 
soporte para la transferencia de archivos multimedia a través de USB con los 
protocolos MTP y PTP. 
 
En esta versión se añaden nuevas alternativas de conectividad, como las nuevas 
API de Bluetooth A2DP y HSP con streaming de audio. También se permite 
conectar teclados completos por USB o Bluetooth. 
 
El uso de los dispositivos en un entorno empresarial es mejorado. Entre las 
novedades introducidas destacamos las nuevas políticas administrativas con 
encriptación del almacenamiento, caducidad de contraseña y mejoras para 
administrar los dispositivos de empresa de forma eficaz. 
 
A pesar de la nueva interfaz gráfica optimizada para tabletas, Android 3.0 es 
compatible con las aplicaciones creadas para versiones anteriores. La tecla de 
menú, inexistente en las nuevas tabletas, es reemplazada por un menú que 
aparece en la barra de acción (ActionBar) 
 
Android 3.1 nivel de API 12 (mayo 2011) 
Se permite manejar dispositivos conectados por USB (tanto host como 
dispositivo). Protocolo de transferencia de fotos y video (PTP/MTP) y de tiempo 
real (RTP). Bloqueo de Wi-Fi de alto rendimiento, manteniendo conexiones Wi-Fi 
de alto rendimientos cuando la pantalla del dispositivo está apagada. 
 
Android3.2 nivel de API 13 (julio 2011) 
Mejoras de soporte de hardware, incluyendo optimizaciones para un amplio rango 
de tabletas. Se incrementó la capacidad de las aplicaciones para acceder a 
archivos de las tarjetas SD, por ejemplo para sincronización. Se implementó el 
29 
 
modo de vista de compatibilidad para aplicaciones que no han sido optimizadas 
para resoluciones de pantallas de tabletas. Se añaden nuevas funciones de 
soporte de pantalla, dando a los desarrolladores un mayor control sobre la 
apariencia de la pantalla en diferentes dispositivos. 
 
Android Ice Cream Sandwich 4.0 nivel de API 14 (octubre 2011) 
La característica más importante es que se unifican las dos versiones anteriores 
(2.x para teléfonos y 3.x para tabletas) en una sola compatible con cualquier tipo 
de dispositivo. Entre las características más interesantes destacamos: 
 
Se introduce un nuevo interfaz de usuario totalmente renovado. Por ejemplo se 
reemplazan los botones físicos por botones en pantalla (como ocurría en las 
versiones 3.x). 
 
Un nuevo API de reconocedor facial que permite, entre otras muchas aplicaciones 
desbloquear el dispositivo a su propietario. También se mejora en el 
reconocimiento de voz. Por ejemplo se puede empezar a hablar en cuanto 
pulsamos el botón. 
 
Aparece un nuevo gestor de tráfico de datos por internet, donde podremos ver el 
consumo de forma gráfica y donde podremos definir los límites a ese consumo 
para evitar cargos inesperados con la operadora. Incorpora herramientas para la 
edición de imágenes en tiempo real, con herramientas para distorsionar, 
manipular e interactuar con la imagen al momento de ser capturada. Se mejora el 
API para comunicaciones por NFC y la integración con redes sociales. 
 
En diciembre de 2011 aparece una actualización de mantenimiento (versión 4.0.2) 
que no aumenta el nivel de API 
 
Android 4.0.3 nivel de API 15 (diciembre 2011) 
Se añaden numerosas optimizaciones y corrección de errores. Mejoras en los 
gráficos, calendario, bases de datos, corrección ortográfica y funcionalidades 
Bluetooth. Se implementa una nueva API para desarrolladores, incluyendo una 
API de actividad social en el proveedor de contactos. Se agregan nuevas 
aplicaciones de la cámara en mejora de la estabilidad en los videos y resolución 
QVGA. Se implementan mejoras de accesibilidad tales como la mejora de acceso 
al contenido para lectores de pantalla. 
 
Android 4.0.4 (noviembre 2012) 
Se añadieron a ésta versión, mejoras de estabilidad, un mejor rendimiento de la 
cámara, rotación de la pantalla más fluida y mejoras en el reconocimiento de los 
números en el teléfono. 
 
Android Jelly Bean 4.1 nivel de API 16 (julio 2012) 
En ésta versión se hace hincapié en mejorar un punto débil de Android: la fluidez 
de la interfaz de usuario. Con este propósito se incorporan varias técnicas, como: 
sincronismo vertical, triple búfer y aumentar la velocidad del procesador al tocar la 
pantalla. 
 
30 
 
Se mejoran las notificaciones con un sistema de información expandible 
personalizada. Los widgets de escritorio pueden ajustar su tamaño y tomar su 
espacio de forma automática al situarlos en el escritorio. El dictado por voz puede 
realizarse sin conexión a Internet. 
Se introducen varias mejoras en Google Search. Se potencia la búsqueda por voz 
con resultados en forma de ficha. La función Google Now permite utilizar 
información de posición, agenda y hora en las búsquedas. 
 
Se incorporan nuevos soportes para usuarios internacionales: como texto 
bidireccional y teclados instalables. Para mejorar la seguridad, las aplicaciones 
son cifradas. También se permiten actualizaciones parciales de aplicaciones. 
 
Android 4.2 nivel de API 17 (noviembre 2012) 
Una de las novedades más importantes es que podemos crear varias cuentas de 
usuario en el mismo dispositivo. Aunque, esta característica solo está disponible 
en tabletas. Cada cuenta tendrá sus propias aplicaciones y configuración. 
 
Los widgets de escritorio pueden aparecer en la pantalla de bloqueo. Se incorpora 
un nuevo teclado predictivo deslizante al estilo Swype. Posibilidad de conectar 
dispositivo y TVHD mediante Wi-Fi (miracast). Mejoras menores en las 
notificaciones. Nueva aplicación de cámara que incorpora la funcionalidad Photo 
Sphere para hacer fotos panorámicas inmersivas en 360°. 
 
Android 4.3 nivel de API 18 (julio 2013) 
Soporte para Bluetooth de baja energía. Incorpora la versión 3.0 de OpenGL ES. 
Implementa el modo de perfiles con acceso restringido. Se mejora la escritura, la 
seguridad, el modo de conexión externa y de desarrollador. Se añade el soporte 
para más de 5 idiomas algunos de ellos son el hebreo y árabe. Se agrega la 
función de autocompletar en el marcado. 
 
Permite enviar a la impresora fotos, documentos y páginas web desde el 
Smartphone o tableta de manera inalámbrica mediante Google Cloud Print. Se 
implementa una nueva máquina virtual de ejecución experimental Android 
Runtime (ART). Además de implementar una nueva funcionalidad cuando se 
recibe la llamada de un número desconocido, el dispositivo buscará coincidencias 
en una lista local de Google Maps. 
 
Android KitKat 4.4 nivel de API 19 (octubre 2013) 
 
Se implementa de manera opcional para desarrolladores la máquina virtual ART. 
La barra de estado y la barra de navegación ahora poseen transparencia, estas 
misma se ocultan en determinadas aplicaciones para permitir la visualización en 
pantalla completa. Se mejora el rendimiento del sistema. Se corrigen los 
problemas en el sonido de las aplicaciones. Se implementó el acceso directo a las 
fotos desde la aplicación de la cámara, siendo este un paso más hacia la 
integración como galería por defecto. Existe la posibilidad de impresión por Wi-Fi. 
Los monitores de actividad de red y señal son desplazados al menú de ajustes 
rápidos. Así mismo el widget de acceso rápido a Ajustes que hasta ahora permitía 
activar y desactivar la localización, ahora permite cambiar también los modos de 
ahorro de energía. En Android 4.3 se añadía soporte a Bluetooth Smart pero sólo 
31 
 
permitía sincronizar hasta 4 dispositivos, ahora a partir de Android 4.4.1 el límite 
se aumentó hasta 7 dispositivos 
 
 
Android Lollipop 5.0 nivel de API 20 (noviembre de 2014) 
 
Las características esenciales y de manera general de ésta nueva versión de 
Android son las siguientes: 
 
Material Design: Un diseño intrépido, colorido y sensible interfaz de usuario para 
las experiencias coherentes e intuitivos en todos los dispositivos. Movimiento de 
respuesta natural, iluminación y sombras realistas y familiares elementos visuales 
hacen que sea más fácil de navegar su dispositivo. Nuevos colores vivos, 
tipografía e imágenes de ayuda de borde a borde de enfocar su atención. 
 
Notificaciones: Nuevas formas de controlar cuándo y cómo se reciben mensajes - 
sólo ser interrumpido cuando se quiere ser. Ver y responder a mensajes 
directamente desde la pantalla de bloqueo. Incluye la capacidad de ocultar 
contenido sensible para estas notificaciones. Se puede programar el tiempo 
durante el cual sólo las notificaciones de prioridad aparecen. También, las 
llamadas entrantes no interrumpen lo que estés haciendo. Se puede optar por 
responder a la llamada o simplemente seguir haciendo lo que se esté haciendo. 
Clasificación más inteligente de notificaciones. Ver todas las notificaciones en un 
solo lugar tocando la parte superior de la pantalla. 
 
Batería: Una característica de ahorro de batería que se extiende el uso de 
dispositivos de hasta 90 minutos. El tiempo estimado de batería restante aparece 
cuando el dispositivo está enchufado. El tiempo restante de batería antes de tener 
que cargar el dispositivo de nuevo ahora se puede encontrar en la configuración 
de la batería. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32 
 
1.8. Comparativa de Android frente a otras plataformas 
 
A continuación se presentará una tabla comparativa de Android en su versión más 
reciente frente a otrasplataformas. 
Tabla 1. Android frente a otras plataformas 
Fuente: http://www.androidcurso.com/index.php/tutoriales-android-fundamentos/31-unidad-1-
vision-general-y-entorno-de-desarrollo/98-comparativa-con-otras-plataformas 
 
 
 
 
 
 
Apple iOS 8 Android 5.0 Windows Phone 8 BlackBerry 10 Firefox OS 2.2 
Compañía 
Apple 
Open Handset 
Alliance 
Microsoft BlackBerry 
Mozilla 
Foundation 
Núcleo S.O. Mac OS X Linux Windows NT QNX Linux 
Licencia Propietaria Libre y abierto Propietaria Propietaria Libre y abierto 
Año de lanzamiento 2007 2008 2010 1999 2013 
Fabricante único Si No No Si No 
Variedad de 
dispositivos Modelo único Muy Alta Media Baja Muy baja 
Soporte memoria 
externa 
No Si Si Si Si 
Motor del navegador 
web 
WebKit 
WebKit/Chromium 
(Blink) 
Trident WebKit WebKit 
Tienda de aplicaciones App Store Google Play 
Windows 
Marketplace 
BlackBerry 
World 
Firefox 
Marketplace 
Número de aplicaciones 
800,000 
(marzo 2013) 
800,000 (marzo 
2013) 
130,000 (enero 2013) 100,000 (enero 
2013 
Costo de publicar $99 / año $ 25 una vez $ 99 / año Sin costo Sin costo 
Otras tiendas sin 
supervisión 
No Si No Si Si 
Familia CPU soportada ARM ARM, MIPS, x86 ARM ARM ARM, x86 
Soporte 64 bits Si Si No No No 
Maquina Virtual No Dalvik / ART .net No Navegador Web 
Lenguaje de 
programación 
Objective-C, 
C++ 
Java, C++ C#, Visual Basic, C++ C, C++, Java HTML5, CSS, 
Javascript 
Plataforma de 
desarrollo 
Mac Windows, Mac, 
Linux 
Windows Windows, Mac Windows, Mac, 
Linux 
Multiusuario No Si No No No 
Modo Invitado Si Si No No No 
3
3
 
 
1
.9
. 
M
a
p
a
 m
e
n
ta
l d
e
 A
n
d
ro
id
 
 
 
Fuente: E
laboración propia (2014) 
 
4
Cti
V¡0'40'"" 
PrCNeedores 
de contenldo 
.. ,¡."'iIP' 
.. 
~ 
'\~~ 
~" 
1'. Jl.1)o¡c:-. 
" ~ 
(.1 !,l.{ 
oC 
Qli'ftrl ,.IIdIO 
.;' 
~ .<0 
<1'" 
"""''' .. ~ "'-'" "4,:. 
R, 
Linux 
Gr! 
"'. . ..... ~ , 
1/ 
! ~# 
' .. 
34 
 
2. Descripción del Podcast de la UNAM 
El proyecto Podcast, tiene como objetivo promover en audio y video, actividades 
académicas, cursos, talleres, diplomados y conferencias, previamente grabados 
para su consulta en Internet. 
 
 
 
Figura 2.1. Sitio de internet del Podcast de la UNAM 
Fuente: Elaboración propia (2014) 
 
En el panel de la derecha se pueden observar las categorías que existen dentro 
del mismo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2.2. Categorías del Podcast de la UNAM 
Fuente: Elaboración propia (2014) 
35 
 
El Podcast de la UNAM cuenta con más de 30 categorías y algunas contienen 
varias subcategorías. Un Podcast cuenta con un archivo índice (feed) que 
almacena todas las entregas publicadas en el programa, lo que facilita su 
publicación digital. En la siguiente figura podemos ver el feed RSS del mismo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2.3. Canal RSS del Podcast de la UNAM 
Fuente: Elaboración propia (2014) 
 
Sobre el sitio se pueden visualizar los videos como vemos en la figura 2.4. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2.4. Visualización de los videos en el sitio 
Fuente: Elaboración propia (2014) 
 
36 
 
 
Así mismo se pueden reproducir en una ventana emergente, si así se desea. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2.5. Visualización de los videos en una ventana emergente 
Fuente: Elaboración propia (2014) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37 
 
 
 
 
Y también se encuentran disponibles para su descarga 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2.6. Descarga de un video del Podcast de la UNAM 
Fuente: Elaboración propia (2014) 
 
 
 
 
 
 
 
 
 
 
 
 
38 
 
 
3. Objetivo de la aplicación Podcast UNAMóvil 
 
El objetivo de la aplicación Podcast UNAMóvil es el brindar y facilitar un nuevo 
canal de acceso al Podcast de la UNAM con la finalidad de compartir y fomentar 
la cultura y el aprendizaje para toda la comunidad universitaria a través del 
material de audio y video que existe en dicho Podcast. 
 
4. Desarrollo e implementación 
El formato de Sindicación Realmente Simple (RSS por sus siglas en inglés, Really 
Simple Syndication), es un formato XML para sindicar o compartir contenido en la 
web. Se utiliza para difundir información actualizada frecuentemente a usuarios 
que se han suscrito a ésta fuente de contenidos de algún sitio. El Podcast de la 
UNAM cuenta con su canal RSS, el cual ha sido aprovechado para el desarrollo 
de dicha aplicación móvil ya que se implementó para que el Podcast de la UNAM 
se visualice de forma correcta en un dispositivo móvil con el sistema operativo 
Android. Para ello se implementó una clase con la cual se procesa el parseo1 del 
archivo xml mediante el Modelo de Objetos del Documento o Modelo en Objetos 
para la representación de Documentos (DOM por sus siglas en inglés, Document 
Object Model) el cual proporciona un conjunto estándar de objetos para 
representar documentos html y xml, un modelo estándar sobre cómo pueden 
combinarse dichos objetos, y una interfaz estándar para acceder a ellos y 
manipularlos. A través de DOM, los programas pueden acceder y modificar el 
contenido, estructura y estilo de los documentos html y xml, que es para lo que se 
diseñó principalmente. 
 
A continuación se describirá cada segmento de código de la clase que procesa 
dicho parseo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
Es el proceso de transformar una entrada de texto en una estructura de datos 
39 
 
Inicialmente se importan todos los paquetes de las clases que se ocuparán, en 
primera instancia se importan los paquetes de java que se utilizarán para la 
obtención de los datos de la url del Podcast de la UNAM, posteriormente se 
importan los paquetes que nos ayudan a construir un documento xml, por último 
como se mencionó anteriormente se importan los paquetes de DOM que se 
utilizarán. 
 
En las siguientes líneas de código, inicialmente se crea una nueva clase pública 
llamada XMLParser, a esta clase se le agregan dos variables globales, una 
variable privada de tipo URL y llamada del mismo modo como url, una variable 
estática de tipo int llamada numItems. Posteriormente se crea el constructor de 
la clase el cual recibe como parámetro una variable de tipo String que para éste 
caso se le llama url, lo que se inicializa en el constructor es la variable global url 
asignando lo que se reciba en la variable local url del constructor, a su vez se 
maneja la excepción de ésta variable si la url que se reciba como una cadena de 
tipo String no está escrita de forma correcta en alguna de sus partes arrojando 
como resultado la parte errónea de la misma. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Posteriormente se crea un método llamado parse() el cual es un método público 
y de tipo LinkedList<HashMap<String, String>> ya que para ordenar los se 
formaran pares de clave y valor dentro del HashMap y para evitar las colisiones 
dentro de éste mismo se organizan en una lista ligada. Dentro del método se 
comienza por instanciar un objeto de la clase DocumentBuilderFactory llamado 
factory para que se pueda construir el documento xml y pueda ser leído por 
DOM. Seguido de esto se crea un objeto del tipo LinkedList<HashMap<String, 
String>> llamado listaDatos y un objeto de tipo HashMap<String, String> 
llamado entrada para formar los pares de datos. 
 
 
 
 
 
 
 
 
40 
 
Posteriormente se abre un bloque try-catch donde se instancia un objeto de tipo 
DocumentBuilder llamado builder a través del objeto factory que se creó 
anteriormente, seguido de esto se instancia un objeto de tipo Document llamado 
dom que inicializa una conexión mediante el método parse() del objeto builder 
a la url que se ha recibido como parámetro a través de los método 
openConnection() y del método getInputStream(), en la siguiente línea se 
crea un objeto de tipo Element llamado root al cual se le asigna lo que se 
obtiene del método getDocumentElement() del objeto dom, después de estose 
crea un objeto llamado ítems de tipo NodeList al cual se le asigna lo que se 
obtiene del método getElementByTagName() el cual obtiene los elementos del 
documento xml de la cadena que se le haya indicado como parámetro que en 
este caso es ítem, éste método corresponde al objeto root que se instanció en la 
línea inmediata superior. Por último se asigna a la variable numItems lo que que 
se obtuvo del método getLength() el cual obtiene el número de elementos con la 
cadena ítem dentro del documento xml, éste método corresponde al objeto ítems 
que se creó en la línea anterior a ésta 
 
 
 
 
Una vez que se ha realizado lo anterior, se inicia un ciclo for el cual se inicializa 
desde cero hasta la cantidad de ítems que se hayan obtenido en la variable 
numItems y se va incrementando ésta variable de control de tipo entera. Dentro 
del ciclo, se termina de instanciar el objeto entrada de tipo HashMap que se creó al 
inicio del método, se crea un objeto de tipo Node llamado ítem al cual se le asigna 
lo que se obtenga en el objeto ítems para que con la variable de control del ciclo 
for se realice un recorrido de los elementos que se especifiquen dentro del 
documento xml lo cual se indica en la línea siguiente de código donde con el 
objeto nodos de tipo NodeList se obtienen a través del método 
getChildNodes() los nodos hijos en este caso de cada elemento o nodo ítem del 
documento xml 
 
 
 
 
 
 
 
 
 
 
 
 
 
41 
 
 
Posteriormente se abre un nuevo ciclo for anidado el cual se inicializa desde cero 
con la variable j de tipo int hasta el número de nodos que haya dentro de cada 
elemento ítem lo cual se indica en la primera línea dentro del ciclo para que se 
realice el recorrido de éstos elementos y es asignado a una variable de tipo Node 
llamada itemData, después de esto a través de ésta misma variable se obtienen 
mediante el método getNodeName() los nombres de los elementos que contienen 
los nodos ítems y se asignan a una variable de tipo String llamada nombre. 
 
 
 
 
Enseguida de lo anterior se abre una condición if-else-if, dentro de la 
condición if se evaluará con el método equalsIgnoreCase() una búsqueda 
comparando la cadena dada como parámetro, en este caso “title” con los 
elementos del nodo ítem y a su vez ignorando aquellos que no sean iguales, si 
esta condición se cumple entonces se añade como clave con el método put() del 
objeto entrada que es de tipo HashMap. Para la condición de else-if la condición 
se evalúa del mismo modo, sólo que en éste caso la cadena a buscar y comparar 
es “link” y de la misma forma, si ésta condición se cumple entonces de la misma 
manera se añade lo que exista en la cadena link a la tabla de HashMap como 
valor, de esta forma la tabla de HashMap se llena con pares de clave-valor con 
cada iteración del ciclo for interno, por último se cierra dicho ciclo 
 
 
 
 
 
 
 
 
 
 
 
Culminando con la función que se implementa en la clase XMLParser, con el 
método add() del objeto listaDatos, se agregan todos los datos obtenidos del 
parseo y ordenados en la tabla HashMap a la lista ligada, de ésta forma como se 
mencionaba se evita que los datos colisionen dentro de la tabla HashMap. En la 
línea subsecuente se cierra el ciclo for externo. Se cierra el bloque try y se 
maneja la excepción en la sentencia catch donde se puede obtener alguna 
excepción en tiempo de ejecución y se cierra el cuerpo de dicha sentencia. En la 
línea subsecuente la clase regresa el objeto listaDatos como se indicó al inicio 
del método en el tipo de valor de retorno por lo que la clase que reciba estos 
datos para su presentación debe de instanciar y parametrizar un objeto del mismo 
tipo para procesar correctamente todos los datos. Por último se cierra la clase 
XMLParser. 
42 
 
 
 
 
 
Continuando con el desarrollo de la aplicación, se crea una clase llamada Datos 
(línea 3 a la 21), con el único propósito de mantener protegida la variable que va a 
contener la url a la que se conecte y evitar que en el código que se utilice 
posteriormente se modifique arbitrariamente. La clase Datos contiene la variable 
de acceso privado y de tipo String llamada feedUrl (línea 5). En el constructor 
de ésta clase (línea 7 a 9) se inicializa dicha variable global con la variable local 
del constructor del mismo tipo String llamada urlCanal. Posteriormente de la 
línea 11 a la 14 se crea un método setUrl() que recibe como parámetro una 
variable de tipo String llamada urlCanal para que en el momento en que se 
requiera se establezca alguna otra url a la que se desee conectar, asignando un 
nuevo valor hacia la variable feedUrl mediante su variable local urlCanal, 
seguido de esto, de la línea 16 a la 19 se crea el método getUrl() para obtener 
de manera inmediata el valor que al momento exista en la variable feedUrl. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43 
 
Posteriormente, se crea la actividad principal que va a contener y mostrar todos 
los datos al usuario, en éste caso estos mismos se trataran como las 
publicaciones más recientes que existan en el Podcast de la UNAM, para ello se 
implementó una vista en forma de lista, dicho elemento gráfico de la interfaz de 
usuario se le conoce en Android como un adaptador, el cual como su nombre lo 
indica, adaptará los datos que se obtuvieron del parseo gracias a la clase anterior 
a una lista que puede ser visualizada por el usuario, dicho adaptador se le conoce 
como ListView, el cual se comienza definiendo y diseñando desde código xml con 
ciertos atributos en específico como se puede observar en el código siguiente. 
 
 
 
 
 
En la línea 1 se declara el documento xml. Para el diseño de una actividad en 
Android se comienza definiendo un elemento raíz, este elemento raíz se le 
conoce como el contenedor padre de los elementos o vistas que contenga, el cual 
se conoce como LinearLayout (línea 3 a la 9), para éste caso se engloban sus 
atributos donde en primer lugar se tiene un identificador el cual se crea con el 
atributo android:id = “@+id/LL01” llamado LL01. Posteriormente se indica el 
ancho con el atributo android: layout_width = “match_parent” el cual indica 
que va a cubrir todo el ancho de la actividad. De la misma forma en el atributo 
android: layout_height = “match_parent” indica que el alto del 
LinearLayout cubrirá todo el alto de la actividad. 
 
 
 
 
44 
 
Con el atributo android: orientation = “vertical” se indica si la orientación 
de la actividad será vertical u horizontal, en este caso es vertical. En la línea 8 con 
el atributo android: background = “@drawable/fondo2 se define un fondo 
personalizado para la aplicación. En la línea 9 indica la url donde Android provee 
todos los recursos para los esquemas de diseño. 
 
Posteriormente de las líneas 12 a 15 se define una vista, la cual es una franja de 
color que cubre todo el ancho del LinearLayout que lo contiene y de altura como 
se indica en la línea 14 tiene una medida de 5dp lo cual significa densidad en 
pixeles. En la línea 15 con el atributo background se define un color con efecto 
degradado. Este efecto, es un recurso de tipo drawable que se definió en otro 
archivo xml llamado degradado.xml, en el siguiente listado de código se puede 
observar que se define como gradient, en sus atributos se establece un color 
inicial, un color final y un ángulo el cual puede ser de 0, 90, 180 o 270 grados, 
para este caso es de cero. 
 
A su vez, los colores que podrán utilizarse en la aplicación se definieron en otro 
archivo xml de recurso el cual se llama colors.xml 
 
Dentro de éste archivo se encuentran definidos con nombres personalizados, 
todos los colores y para cada uno de ellos se especifica su valor hexadecimal. 
45 
 
Continuando con el diseño de nuestra actividad principal de las líneas 17 a la 22 
se define el ListView, el cual, como se mencionaba, ayudará a que la actividad 
adapte una forma de lista, en sus atributos podemos observar que se le asigna un 
identificador llamado list_data para que posteriormente

Continuar navegando