1. Que es Android? es un sistema operativo mvil basado en Linux, que junto con aplicaciones middleware, est enfocado para ser utilizado en dispositivos mviles como telfonos inteligentes, tabletas, Google T ! otros dispositivos" #s desarrollado por la $pen %andset &lliance" 2. Cmo emular android? 'omo nos imaginaremos, los c(icos de Google pensaron en todo" %asta (an puesto en marc(a un emulador )*+ para que podamos conocer ! familiarizarnos con &ndroid, antes de comprar un mvil con este sistema operativo" $tra de las ventajas que posee trabajar con emuladores de &ndroid, es que podemos probar las aplicaciones antes de instalarlas ! adems no ponemos en riesgo los datos de nuestro mvil cuando estamos cambiando de versiones o actualizando" Lo bueno que tiene ,indows, es que Google, en su pgina para desarrolladores )*+, nos pone a disposicin un instalable automtico, donde podemos ejecutar &ndroid como un emulador dentro de ,indows" $tra opcin es bajarnos un comprimido o -./ donde se encuentran los arc(ivos de &ndroid, (acindolo completamente porttil, sin necesidad de instalar nada" #n esta imagen vemos las dos opciones que podemos encontrar en la pgina para desarrolladores de Google Luego, elegimos cul queremos descargar, que generalmente se nos recomienda el #0#, !a que es el de ms fcil instalacin" 1na vez descargado, le damos instalar ! tendremos a nuestra carpeta de &ndroid 2generalmente '34&rc(ivos de /rograma4&ndroid5, donde podremos ejecutar el emulador" &ll6 la comenzar el sistema operativo" /or otro lado, si (emos elegido la versin zip, entonces simplemente la descomprimiremos ! ejecutaremos el )*+ 7anager 2que casualmente tiene el 6cono de &ndroid5 ! seguiremos las instrucciones en pantalla" 'omo podemos ver, si somos desarrolladores o simplemente queremos probar &ndroid en nuestro ordenador antes de instalrselo al mvil, entonces esta es una de las mejores ! ms fciles opciones de todas" 3. Ventajas de android frente a otros sistemas #l gran bene8cio que ofrece &ndroid es que no es solo un sistema operativo ms, sino que se trata de un ecosistema completo que (a logrado cautivar a los usuarios, desarrolladores, fabricantes ! operadores en una relacin gana9gana #st desarrollado bajo una plataforma de cdigo abierto, lo que permite una amplia interaccin por parte de los desarrolladores ! usuarios" 'omunidad de desarrolladores" &ndroid tiene la ventaja de contar con la ms grande comunidad de desarrolladores, lo que (a generado un concurrido entorno de eventos, foros, grupos de participacin ! concursos que optimizan los servicios ! aplicaciones ofrecidos a usuarios" #s un sistema operativo creado por Google, lo que facilita ! acelera el uso de varios de los principales servicios de .nternet, como Gmail, Gtal:, Google 7aps ! ;ouTube" & pesar de ser un sistema operativo abierto creado por una sola 8rma, (a! varias empresas fabricantes que lo apo!an a travs de $pen %andset &lliance ! que lo inclu!en en los nuevos telfonos que lanzan al mercado" /recios ms bajos" &l existir un amplio mercado de productos con &ndroid, los precios de los dispositivos son ms bajos a los ofrecidos con otros sistemas" *e igual forma, en el mercado &ndroid se encuentran equipos de todos los precios ! diferentes gamas" &cceso a aplicaciones" *e <="=== aplicaciones que se ten6an en la tienda de &ndroid en <==> 2cuando se lanz5 se (a pasado a un poco ms de <=="=== en el <=?? ! en la actualidad es la que ms aplicaciones gratuitas ofrece a los usuarios" $tros dispositivos" #l sistema operativo est presente en telfonos mviles, pero tambin en otros aparatos 2por ejemplo tabletas5 por lo que es mu! fcil ! @amigableA continuar con los bene8cios del sistema en otros ambientes" Tienda desde el /'" #l reciente lanzamiento de la tienda &ndroid disponible desde la web (ttps344mar:et"android"com4 permite a los usuarios descargar juegos, widgets, libros, fotograf6as ! mBltiples aplicaciones de entretenimiento ! comunicacin desde sus navegadores" Liderazgo compartido" La posibilidad de que todos ganen con un sistema que cerrar el <=?? como l6der en su categor6a crea un escenario ideal para que cada vez ms actores se sumen a este universo, lo que fortalecer el ecosistema ! generar nuevas econom6as de escala" 4. Describa las siguientes caractersticas de android !rame"or# de a$licaciones Los desarrolladores tienen acceso a las mismos &/.s utilizadas en las aplicaciones base 2core5" La arquitectura est diseCada para simpli8car el reus de componentesD cualquier aplicacin puede publicar sus capacidades ! cualquier otra aplicacin puede luego (acer uso de esas capacidades 2sujeto a reglas de seguridad del framewor:5" Este mismo mecanismo permite que los componentes sean reemplazados por el usuario" %a m&'uina (irtual Dal(i# Dalvik es la mquina virtual que utiliza la plataforma para dispositivos mviles &ndroid" *alvi: (a sido diseCada por *an Fornstein con contribuciones de otros ingenieros de Google" *alvi: est optimizada para requerir poca memoria ! est diseCada para permitir ejecutar varias instancias de la mquina virtual simultneamente, delegando en el sistema operativo sub!acente el soporte de aislamiento de procesos, gestin de memoria e (ilos" & menudo *alvi: es nombrada como una mquina virtual Gava, pero esto no es estrictamente correcto, !a que el b!tecode con el que opera no es Gava b!tecode" )in embargo, la (erramienta dx incluida en el )*+ de &ndroid permite transformar los arc(ivos 'lass de Gava compilados por un compilador Gava al formato de arc(ivos *ex" #l nombre de *alvi: fue elegido por Fornstein en (onor a *alv6:, un pueblo de #!jafjHrIur, .slandia, donde vivieron antepasados su!os" )r&ficos o$timi*ados 'on librer6as gra8cas <*, gra8cas J* basadas en $penGL #) ?"=" +Q%ite SQLite es un sistema de gestin de bases de datos relacional compatible con &'.*, contenida en una relativamente pequeCa 2K<LM :iF5 biblioteca escrita en '" )NLite es un pro!ecto de dominio pBblico creado por *" Oic(ard %ipp" & diferencia de los sistemas de gestin de bases de datos cliente9servidor, el motor de )NLite no es un proceso independiente con el que el programa principal se comunica" #n lugar de eso, la biblioteca )NLite se enlaza con el programa pasando a ser parte integral del mismo" #l programa utiliza la funcionalidad de )NLite a travs de llamadas simples a subrutinas ! funciones" #sto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son ms e8cientes que la comunicacin entre procesos" #l conjunto de la base de datos 2de8niciones, tablas, 6ndices, ! los propios datos5, son guardados como un slo 8c(ero estndar en la mquina (ost" #ste diseCo simple se logra bloqueando todo el 8c(ero de base de datos al principio de cada transaccin" #n su versin J, SQLite permite bases de datos de (asta < Terab!tes de tamaCo, ! tambin permite la inclusin de campos tipo FL$F" ,. Describa la siguiente ar'uitectura de android del sistema o$erati(o A$licaciones Las aplicaciones base incluirn un cliente de email, programa de )7), calendario, mapas, navegador, contactos, ! otros" Todas las aplicaciones escritas en el lenguaje de programacin Gava" !rame"or# de a$licaciones Los desarrolladores tienen acceso a las mismos &/.s utilizadas en las aplicaciones base 2core5" La arquitectura est diseCada para simpli8car el re9uso de componentesD cualquier aplicacin puede publicar sus capacidades ! cualquier otra aplicacin puede luego (acer uso de esas capacidades 2sujeto a reglas de seguridad del framewor:5" Este mismo mecanismo permite que los componentes sean reemplazados por el usuario" %ibreras &ndroid inclu!e un set de librer6as '4'PP usadas por varios componentes del sistema" #stas capacidades se exponen a los desarrolladores a travs del framewor: de aplicaciones de &ndroid" &lgunas son3 )!stem ' librar! 2implementacin librer6a ' estndar5, librer6as de medios, librer6as de gr8cos, J*, )NLite, entre otras" -untime de Android &ndroid inclu!e un set de librer6as base que proveen la ma!or parte de las funcionalidades disponibles en las librer6as base del lenguaje de programacin Gava" 'ada aplicacin &ndroid corre su propio proceso, con su propia instancia de la 7quina irtual *alvi:" *alvi: (a sido escrito de forma que un dispositivo puede correr mBltiples mquinas virtuales de forma e8ciente" *alvi: ejecuta arc(ivos en el formato *alvi: #xecutable 2"dex5, el cual est optimizado para memoria m6nima" La 7quina irtual est basada en registros, ! corre clases compiladas por el compilador de Gava que (an sido transformadas al formato "dex por la (erramienta incluida QdxQ" ./cleo 0 %inu1 &ndroid depende de un Linux versin <"R para los servicios base del sistema como seguridad, gestin de memoria, gestin de procesos, stac: de red, ! modelo de drivers" #l nBcleo tambin actBa como una capa de abstraccin entre el (ardware ! el resto del stac: de software" 2. 3lo'ues de construccin de A$licacin Acti(it4 1na QActivityQ es, fundamentalmente, un objeto que tiene un ciclo de vida" 1na QActivityQ es un trozo de cdigo que (ace algBn trabajo" )i fuera necesario, este trabajo puede incluir el despliegue de una 1. al usuario" )in embargo, lo anterior no es necesario ! algunas QActivityQ nunca despliegan una 1." T6picamente, tB designars una de las QActivityQ de tu aplicacin como el punto de inicio de tu aplicacin" 5nCreate #l mtodo onCreate() es invocado cuando la actividad se inicia" 'uando trabajamos con actividades en &ndroid es importante que por lo menos implementemos este mtodo" onCreate() recibe como parmetro un objeto de la clase Bundle, que contiene el estado anterior de la actividad en caso de que (a!a sido suspendida" Vie"s 1na QViewQ es un objeto que sabe cmo dibujarse asimismo en la pantalla" Las interfaces de usuario de &ndroid estn conforman un rbol de QViewQ" )i tB quieres realizar algBn tipo de tcnica gr8ca especial entonces debers crear una QViewQ 2este es el caso en el cual tB quisieras crear un juego o construir un nuevo tipo de interface de usuario5" 6ntents 1n QIntentQ es un simple mensaje que representa Qla intencinQ de (acer algo" /or ejemplo, si tu aplicacin quiere abrir una pgina web, debe expresar su QIntentoQ para ver la 1O. a travs de la creacin de una instancia de QIntentQ ! luego entregrsela al sistema" /osteriormente, el sistema ubicar una pieza de cdigo que sepa cmo manipular aquel QIntentoQ ! la ejecuta 2en este caso un browser5" Los QIntentQ tambin pueden ser usados para difundir eventos interesantes a travs de todo el sistema 2tales como noti8caciones5" +er(ices 1n QServiceQ es un cuerpo de cdigo que se ejecuta en segundo plano" )e ejecuta dentro de su propio proceso o en el contexto del proceso de otra aplicacin, dependiendo de sus necesidades" $tros componentes se QatanQ a un QServicioQ e invocan sus mtodos a travs de Qllamados remotos de procedimientos 2O/'5Q" 1n ejemplo de un QServiceQ es un reproductos de mBsica" #n este caso, el usuario podr6a usar una 1. para seleccionar la mBsica ! posteriormente cerrar la 1., pero la mBsica deber continuar sonando" #sto se logra usando un QServicioQ que continuar la reproduccin de la mBsica" .otifications 1na noti8cacin es un pequeCo 6cono que aparece en la barra de estado" Los usuarios pueden interactuar con este 6cono para recibir informacin" Las noti8caciones ms conocidas son los mensajes )7), correo de vozD pero las aplicaciones pueden crear sus propias noti8caciones" Las noti8caciones son el mecanismo preferido para alertar al usuario que algo requiere de su atencin" Content7ro(iders 1n QContentProviderQ es un almacn de datos que provee acceso a datos en el dispositivo" 1n ejemplo clsico es el QContentProviderQ que es usado para tomar datos desde la lista de contactos" Tu aplicacin puede utilizar datos que otras aplicaciones (an expuesto v6a un QContentProviderQ" TB tambin puede de8nir tus propios QContentProviderQ para as6 exponer tus propios datos" 8. Android funciona bajo 'ue sistemas o$erati(os )i quieres darte una idea de que que se puede esperar de el $) de Google, existe la oportunidad de instalar &ndroid en todos los equipos con arquitectura x86 ! para suerte nuestra que no queremos complicarnos la vida instalando el sistema operativo, Google nos permite poder probarlo desde un Live'* que puedes descargarlo como Torrent o directamente desde la pgina del pro!ecto" )e descargar como una imagen .)$ que debers de quemarla para luego desde Preferencias del Sistema y Discos de Arranque poder iniciar &ndroid en cualquier 7ac .ntel que tengas sin el ms m6nimo esfuerzo" Lo que debemos de tener en cuenta, es que este $) no est desarrollado para ordenadores, as6 que como todav6a anda en paCales este pro!ecto, no podrn utilizar el mouse o trackpad, todo deber de ser (ec(o con el teclado" ,indows 0/ 2J<9bit5, ista 2J< o RS9bit5, o ,indows L 2J< o RS9bit5" 7ac $) 0 ?="M"> superior 2x>R solamente5" Linux 2/robando en !untu Linux, Lucid L!nx5 9. Cuales son los -e'uisitos $ara $oder $rogramar en Android *escargar )*+ *escargar #clipse *escargar G*+R *escargar el /lugin de #clipse 2&*T5 &ndroid est basado en Gava ! 07L para la parte de interfaz de usuario, se debe tener conocimientos m6nimos de Gava o programacin orientada a objetos ! bases en 07L que es un lenguaje de marcas 2como %T7L5 por lo que no deber6as tener ningBn problema para aprenderlo si no lo conoces" :. Describa cual es el entorno de desarrollo de android #ste es otro de los grandes generadores de discusin" T#clipseU TVetFeansU T.ntelliG .*#&U /rcticamente la totalidad de la documentacin o8cial de &ndroid est dirigida a #clipse" Oealmente #clipse es un gran entorno de desarrollo, con una ingente cantidad de extensiones disponibles" &dems, (asta (ace mu! poco, .ntelliG no dispon6a de extensiones para &ndroid en su versin 'ommunit! 2aunque s6 en su versin de pago5" 1;. 7ara 'ue sir(en las siguientes bibliotecas +4stem C librar4 #s una implementacin WF)*9derivedX de la Wstandard ' s!stem librar! 2libc5X, que (a sido mejorada para ser incrustada en dispositivos basados en Linux" <edia %ibraries #stas librer6as permiten la reproduccin ! grabacin de4en los formatos de audio, video ! fotograf6a ms populares" .nclu!e3 7/#GS, %"<RS, 7/J, &&', &7O, G/G, and /VG" #stas librer6as estn basadas en W/ac:etideoAs $pen'$O#X" +urface <anager &dministra el acceso los subsistemas de pantalla ! utilizacin de gr8cos <* ! J* desde mBltiples aplicaciones" %ib=ebCore #s un Wweb browserX que potencia tanto el W&ndroid FrowserX como las ,eb iew" +)% #l motor gr8co <* sub!acente al sistema" 3D libraries #s una implementacin basada en las W$penGL #) ?"= &/.Xs" #stas librer6as pueden usar tanto el (ardware J* de aceleracin 2si est dis$onible5 o el WJ* rasterizerX que es incluido en &ndroid" !ree>4$e #s el Wfont rasterizerX para mapas de bits ! vectores" +Q%ite #s un poderoso ! liviano motor de bases de datos relacionales que est disponible para todas las aplicaciones" 11. Ciclo de (ida de las a$licaciones Android. #n la ma!or a de los casos, una aplicacin &ndroid ejecuta dentro de su propio proceso Linux" #l proceso es creado para ejecutar el cdigo de la aplicacin ! es el sistema quien /edir ! reclamara su memoria para reasignarla a otra aplicacin" 1na caracter6stica peculiar en &ndroid es que el tiempo de vida de un proceso no #s controlado directamente por la aplicacin" #s el sistema quien decide ! determina el Tiempo de vida basndose en el uso ! capacidades del sistema" /ara determinar que procesos debern ser eliminados ante una condicin baja de 7emoria, &ndroid prioriza los procesos bajo una jerarqu6a para asignar a cada proceso 1na importancia en el sistema" 12. Describa el $roceso de instalacin de ecli$se? sd# de android 4 el $lugin de ecli$se @AD>A %o $rimero ser& re(isar si tu ordenador cum$le con los re'uerimientos. 7ara instalar el Android SDK necesitar&s lo siguienteB =indo"s C7 @32DbitA? Vista @32 o 24DbitA? o =indo"s 8 @32 o 24DbitA. <ac 5+ C 1;.,.9 su$erior @192 solamenteA. %inu1 @7robando en Ubuntu Linux? %ucid %4n1A 5bligatoria mente deber&s tener instalado el EDF , o 2 @Java Development KitA? esto $or'ue las a$licaciones Android son GecGas $or lo general en Ea(a? $or lo 'ue necesitar&s este it de desarrollo 4a 'ue con el entorno de ejecucin @E-HA no basta. 7osteriormente bajaremos E!lipse 4 el $lugin AD>. 7ara bajar Hcli$se $uedes entrar a la siguiente direccin "ebB "ttp#$$%%%&e!lipse&or'$do%nloads$ 4 seleccionar la o$cin IEclipse IDE for Java DevelopersI. (aso )# Des!ar'ar el Android SDK 7ara descargar el Android +DF $odemos entrar a la siguiente direcccinB "ttp#$$developer&android&!om$sd$index&"tml? all encontraremos las (ersiones $ara %inu1? =indo"s 4 <ac5+. %uego crearemos una car$eta en el disco local CBJ de la manera IC:\AndroidI? es solo $ara tener una buena estructura. Hl siguiente $aso ser& instalar ecli$se? $uede ser en el mismo directorio? $or l o'ue co$iamos la car$eta de Hcli$se all @C:\EclipseA. (aso *# Instalar el plu'in ADT en E!lipse AD> son siglas de Android Development Tools? las cuales son una serie de Gerramientas $ara $oder pro'ramar en Android desde ecli$se. %o m&s com$lejo de la instalacin es esto as 'ue Ga4 'ue Gacerlo bien. Veamos como se GaceB 1. 6niciamos Hcli$se 4 (amos a +elp , Install Ne% So-t%are. 2. Hn la (entana 'ue a$arece? Gacemos clic# en el botn Add? 'ue se encuentran en la $arte su$erior derecGa. 3. Hn el recuadro 'ue sale? en el a$artado I.ameK escribimos IADT PluginI? mientras 'ue en I%ocationK $onemos esta L-%B "ttps#$$dl.ssl&'oo'le&!om$android$e!lipse$ 4 damos clic# en 5#. 4. AGora se Gan cargado nue(as IGerramientasK? marcamos la casilla IDeveloper ToolsK 4 damos clic# en siguiente. ,. Hn el recuadro 'ue aGora sale se muestra lo 'ue se (a a descargar? damos clic# en siguiente. 2. <arcamos la o$cin I6 Acce$t tGe terms of tGe license agreementsK 4 $resionamos finali*ar. AGora se instalar&n los $a'uetes. +i sale alguna ad(ertencia de seguridad solo $resionamos 5#. %o /ltimo ser& reiniciar Hcli$se $ara im$lementar los cambios. Con-i'urar el plu'in ADT para E!lipse Dentro de este mismo $aso configuraremos el $lugin. As 'ue aGora seguimos los siguientes $asos una (e* se Ga reiniciado E!lipse 4 se Ga4an a$licado los cambiosB 1. Vamos a =indo" M 7references. 2. +eleccionamos IAndroidK en el $anel i*'uierdo de la (entana 'ue a$arece. 3. All nos $edir& seleccionar los $atGs del Android +DF? $or lo 'ue Gacemos clic# en 3ro"se? seleccionamos la ruta en donde dejamos el +DF 4 $resionamos 5# 4 luego A$$l4. (aso /# A0adir plata-ormas 1 otros !omponentes Na solo 'ueda aOadir $lataformas $ara $oder ejecutar nuestras a$licaciones? es decir? las distintas (ersiones de la $lataforma Android $ara correr a$licaciones seg/n lo solicitemos.AGora nos dirigiremos a =indo"s M Android +DF and ADV <anager. Pacemos clic# en Available (a!a'es 4 seleccionamos lo 'ue 'ueremos instalar. No seleccionarQ las a$i 8? 9 4 1; 4 en T"ird (art1 Addons seleccionarQ 2oo'le Driver US3? $ara m&s adelante usar el DD<+ $ara $oder tomar ca$turas de $antalla de la $antalla del m(il. %isto? 4a con eso tendremos instalado el Android SDK? com$letamente funcional. 7ero aGora (eamos como correr una m45uina virtual Android en nuestro ordenador. 7or cierto? si al terminar el $roceso anterior? reiniciar Hcli$se 4 arrancar al ADV <anager @=indo" M Android +DF ADV <anagerA les $ide configurar de nue(o el directorio del +DF (an a =indo" M 7references? seleccionan Android 4 luego el a$i 'ue usar&n. AGora estando en el ADV <anager le damos clic# en Ine"K 4 deberemos configurar la m&'uina (irtual de esta maneraB %uego le damos en Create 4 $or /ltimo en el mismo AD6 7ana'er seleccionamos nuestra m&'uina (irtual le damos +tart 4 luego %auncG? el resultado ser& esteB 13. Cual es la estructura de un $ro4ecto android 'uando creamos un nuevo pro!ecto &ndroid en #clipse se genera automticamente la estructura de carpetas necesaria para poder generar posteriormente la aplicacin" #sta estructura ser comBn a cualquier aplicacin, independientemente de su tamaCo ! complejidad" #n la siguiente imagen vemos los elementos creados inicialmente para un nuevo pro!ecto &ndroid3 *escribamos los elementos principales" "arpeta #src# 'ontiene todo el cdigo fuente de la aplicacin, cdigo de la interfaz gr8ca, clases auxiliares, etc" .nicialmente, #clipse crear por nosotros el cdigo bsico de la pantalla 2Activity5 principal de la aplicacin, siempre bajo la estructura del paquete java de8nido" "arpeta #res# 'ontiene todos los 8c(eros de recursos necesarios para el pro!ecto3 imgenes, v6deos, cadenas de texto, etc" Los diferentes tipos de recursos de debern distribuir entre las siguientes carpetas3 4res4drawable4" 'ontienen las imgenes de la aplicacin" )e puede dividir en drawable9ldpi, 4drawable9mdpi ! 4drawable9(dpi para utilizar diferentes recursos dependiendo de la resolucin del dispositivo" 4res4la!out4" 'ontienen los 8c(eros de de8nicin de las diferentes pantallas de la interfaz gr8ca" )e puede dividir en 4la!out ! 4la!out9land para de8nir distintos la!outs dependiendo de la orientacin del dispositivo" 4res4anim4" 'ontiene la de8nicin de las animaciones utilizadas por la aplicacin" 4res4menu4" 'ontiene la de8nicin de los menBs de la aplicacin" 4res4values4" 'ontiene otros recursos de la aplicacin como por ejemplo cadenas de texto 2strings"xml5, estilos 2st!les"xml5, colores 2colors"xml5, etc" 4res4xml4" 'ontiene los 8c(eros 07L utilizados por la aplicacin" 4res4raw4" 'ontiene recursos adicionales, normalmente en formato distinto a 07L, que no se inclu!an en el resto de carpetas de recursos" 'omo ejemplo, para un pro!ecto nuevo &ndroid, se crean los siguientes recursos para la aplicacin3 "arpeta #$en# 'ontiene una serie de elementos de cdigo generados automticamente al compilar el pro!ecto" 'ada vez que generamos nuestro pro!ecto, la maquinaria de compilacin de &ndroid genera por nosotros una serie de 8c(eros fuente en java dirigidos al control de los recursos de la aplicacin" #l ms importante es el que se puede observar en la imagen, el 8c(ero R.java, ! la clase R" #sta clase R contendr en todo momento una serie de constantes con los .* de todos los recursos de la aplicacin incluidos en la carpeta /res/, de forma que podamos acceder facilmente a estos recursos desde nuestro cdigo a travs de este dato" &s6, por ejemplo, la constante R.drawable.icon contendr el .* de la imagen icon.png contenida en la carpeta /res/drawable/" eamos como ejemplo la clase O creada por defecto para un pro!ecto nuevo3 1 2 3 4 , 2 8 9 : 1; 11 12 package net.sgoliver;
public final class R { public static final class attr { } public static final class drawable { public static final int icon=0!f0"0000; } public static final class la#out { public static final int $ain=0!f0%0000; } public static final class string { 13 14 1, 12 public static final int app&na$e=0!f0'000(; public static final int )ello=0!f0'0000; } } "arpeta #assets# 'ontiene todos los dems 8c(eros auxiliares necesarios para la aplicacin 2! que se incluirn en su propio paquete5, como por ejemplo 8c(eros de con8guracin, de datos, etc" La diferencia entre los recursos incluidos en la carpeta 4res4raw4 ! los incluidos en la carpeta 4assets4 es que para los primeros se generar un .* en la clase O ! se deber acceder a ellos con los diferentes mtodos de acceso a recursos" /ara los segundos sin embargo no se generarn .* ! se podr acceder a ellos por su ruta como a cualquier otro 8c(ero del sistema" 1saremos uno u otro segBn las necesidades de nuestra aplicacin" %ic&ero Android'anifest(xml 'ontiene la de8nicin en 07L de los aspectos principales de la aplicacin, como por ejemplo su identi8cacin 2nombre, versin, icono, Y5, sus componentes 2pantallas, mensajes, Y5, o los permisos necesarios para su ejecucin" eremos ms adelante ms detalles de este 8c(ero" 14. Lso de la base de datos +Q%ite )NLite es un pequeCo ZsistemaZ de base de datos3 es una biblioteca que sobre un arc(ivo almacena el esquema de la base de datos ! los datos propiamente tal" #n trminos generales presenta un buen rendimiento, ! est aconsejada para quienes requieren almacenar un volumen medio de datos en sus aplicaciones, utilizando un esquema relacional" #n el caso de querer incluir la &/. )NLite en tu pro!ecto de programacin, puedes incluir en tu programa '4'PP a sqlite"(, compilar a sqlite"c ! listo" *entro de lo que podemos llamar una desventaja de )NLite es que no implementa la integridad referencial, es decir, no disponemos de claves forneas 2puedes declararlas, pero el intrprete ignorar tu declaracin5" *e todas formas, )NLite si implementa triggers, as6 que (a! algunas formas de implementar la integridad referencial de esa forma" 1,. Contact<a$B %ocali*ador de Contactos )i usted tiene muc(os contactos con la direccin, esta aplicacin te va a a!udar a ubicarlos en el mapa" 1sted puede encontrar los contactos con slo mover el mapa, escribiendo la clave postal4direccin, o usando de la ubicacin actual" 12. Que se re'uiere $ara $oder usar google ma$s en android Vecesitamos un api+e! para poder utilizar los mapas de google desde &ndroid, para generar la clave seguir los siguientes pasos3 [ :e!tool 9list 9:e!store K4"android4debug":e!store """ 'erti8cate 8ngerprint 27*M53 \S3?#3SJ3S\3>L3LJ3FF3#R3&R3>>3*L3<=3]?3>#3FM3\> *espus debers ir a la siguiente url (ttp344code"google"com4intl4es9#)4android4maps9 api9signup"(tml ! obtener tu clave a partir del 7*M que se (a generado anteriormente" 'uando obtengas tu clave gurdala en un sitio seguro ! aCdela al la!out, concretamente en la etiqueta android3api+e!" /or ultimo slo nos queda aCadir en el arc(ivo 7anifest"xml la siguiente declaracin3 ^uses9librar! android3name_Qcom"google"android"mapsQ 4` 1na vez que (emos con8gurado el la!out para que aparezca el mapa ! (emos creado la clave que nos permitir descargar mapas de google, vamos a ver el cdigo necesario para mostrar nuestra localizacin en dic(o mapa" 18. <a$Vie" #s un control con el que podremos manipular un mapa desde el cdigo de nuestra aplicacin" #ste muestra en el modo de mapa tradicional, sin embargo, el control tambin nos permite cambiar por ejemplo a vista de satlite, marcar las zonas disponibles en )treetiew, o mostrar la informacin del tr8co" #l 7apiew no es un elemento propio de &ndoid, pertenece a una librer6a externa de Google" Vo vamos a tener problema para distribuir nuestras aplicaciones !a que esta librer6a viene incluida en la ma!or6a de dispositivos, pero s6 vamos a necesitar usar un )*+ especial para desarrollar" &s6 que en las propiedades de nuestro pro!ecto, bajo la categor6a &ndroid debemos seleccionar como Wbuild targetX uno de los llamados Google &/.s correspondiente a la versin sobre la que queramos construir nuestro pro!ecto" 19. <a$Acti(it4 #s un control para facilitarnos el manejo de la visualizacin del mapa" La clase 7ap&ctivit! maneja los temas de fondo, se conecta a la .nternet para los datos, se ocupa de almacenamiento en cac(, (ace animaciones, se encarga de el ciclo de vida, ! muc(o ms" #s la clase principal que contendr el cdigo con el que se (aga uso de los diferentes servicios ofrecidos por Google 7aps" #s una subclase de &ctivit!, por lo que sus mtodos ! manejo idntico3 creando una subclase a la medida de lo que necesite el desarrollador" La clase 7apiew anteriormente comentada solo puede ser instanciada en una 7ap&ctivit! que se (aga cargo de la gestin de sus servicios ! su eliminacin" #sto se debe a que depende de varios (ilos para acceder a la red ! el sistema de arc(ivos en segundo plano, ! dic(os (ilos deben ser guiados en conjuncin con el ciclo de vida del 7ap&ctivit!"
anicamente se admite un 7ap&ctivit! por proceso, en caso contrario se pueden obtener resultados inesperados 1:. <a$Controller #l objeto 7ap'ontroller se encarga de controlar el zoom ! la posicin del mapa" Gestiona el manejo de un mapa, como desplazamientos o zoom" )e obtiene como valor de retorno de 7apiew"get'ontroller25" #stos son algunos de sus mtodos3 b animateTo 2Geo/oint53 7ueve el mapa (asta el punto dado como parmetro" La clase Geo/oint representa un punto geogr8co ! su constructor recibe dos enteros3 la latitud ! la longitud multiplicadas por ?#R" b int set-oom2int53 /ermite modi8car el nivel de zoom" #l parmetro tomar un valor entre ? 2 el ms lejano 5 ! <? 2 el ms cercano, estando solo disponible en ciertas ubicaciones 5" *evuelve el nivel del zoom al que 8nalmente se (a situado" b stop&nimation2boolean53 /ara cualquier animacin que est en progreso en ese momento, actualizando el centro del mapa a todo lo que la animacin parcial (a!a llegado 2;. De 'ue trata el $a'uete %ocation #s el paquete que provee las clases necesarias para el manejo de G/) en &ndroid" /ara poder usarlo es necesario otorgar el permiso &''#))c].V*cL$'&T.$V a la aplicacin" )us elementos ms relevantes son3 b Location3 clase que representa una localizacin geogr8ca en un tiempo concreto" bLocation7anager3 clase para gestionar el dispositivo de localizacin" /ermite actualizaciones peridicas de la situacin geogr8ca del dispositivo, o disparar un evento espec68co cuando el dispositivo entra en la proximidad de una zona geogr8ca determinada" &s6 por ejemplo para conocer la situacin actual se utiliza Location7anager"getLast+nownLocation2QgpsQ5" bGeocoder3 clase que permite traducir entre direcciones f6sicas ! coordenadas en latitud ! longitud, ! viceversa" bLocationListener3 interfaz que permite implementar una clase que captura los eventos asociados al dispositivo de localizacin" Tiene mBltiples utilidades, como pintar la posicin del usuario en un mapa o transmitirla a otros dispositivos" &dems es posible simular un G/) V7#&9compatible en el emulador, dado que la consola proporciona un comando que permite establecer la posicin geogr8ca actual" )u sintaxis es la siguiente3 geo ^8xdnmea`, donde el primer parmetro sirve para especi8carla longitud ! latitud en grados, e incluso la altitud en metros si fuese necesarioD mientras que el segundo permite enviar sentencias V7#& =?>J" 21. Control de la seOal )7+ ContactMap utiliza la seCal G/) para conocer la ubicacin actual del usuario, pudiendo as6 tanto dibujarla en el mapa mostrado como comunicrsela a los dems usuarios a travs de su actualizacin en el servidor" "onocer la propia u!icaci)n /ara poder acceder ! controlar a la seCal G/) se utilizan las clases presente en el paquete android.location" #n general, este paquete inclu!e clases que permiten manejar diferentes dispositivos de localizacin" &lgunos de los elementos presentes en este paquete son3 Location3 clase que representa una localizacin geogr8ca" LocationManager3 clase para gestionar el dispositivo de localizacin" Geocoder3 clase que permite traducir entre direcciones f6sicas ! coordenadas en latitud ! longitud, ! viceversa" LocationListener3 interfaz que permite implementar una clase que captura los eventos asociados al dispositivo de localizacin" 22. Control de la seOal =iD!i ContactMap conecta con el servidor de forma peridica para actualizar la localizacin del usuario ! para conocer las localizaciones de sus contactos" #sta comunicacin se realiza a travs de .nternet con conexiones %TT/" #l paquete android.net.wifi provee a &ndroid de diversas clases para gestionar el dispositivo ,i9]i del aparato mvil" #n concreto, se utilizar la clase WifiManager para controlar este elemento de conexin" &l igual que con el G/), al dispositivo de ,i9]i se accede utilizando el mtodo getSystemService() de la clase ContactMap, que da acceso a distintos servicios integrados en el dispositivo mvil" #n esta ocasin, la llamada debe realizarse utilizando la constante Context.WIFI_SERVICE" *e esta forma, se adquiere un objeto WifiManager vlido con el que controlar la ,i9]i" /ara poder utilizar sin problemas el dispositivo de ,i9]i, &ndroid exige que se autorice expresamente a la aplicacin a usar dic(o dispositivo" #sta autorizacin se mani8esta a travs del permiso correspondiente en el 8c(ero W&ndroid7anifest"xmlX3 ^uses9permission android3name_Qandroid"permission"&''#))c,.].c)T&T#Q 4` 23. Cone1iones P>>7 Los intercambios de informacin en formato 07L entre la aplicacin ContactMap ! el servidor se realizan mediante el protocolo %TT/" #n las peticiones se utiliza el mtodo /$)T de dic(o protocolo, encapsulando el documento 07L correspondiente dentro de un campo de nombre W07LX" #n las respuestas, el contenido 07L viaja en el campo de datos" /ara estos eujos de informacin se utilizan las clases Update ! HTTPConnection" #n concreto, es esta Bltima la encargada de las labores de ms bajo nivel a la (ora de establecer una conexin %TT/" &ndroid cuenta con numerosos paquetes ! clases dedicados en exclusiva a los diferentes aspectos de las comunicaciones" /or ejemplo, de Gava (ereda, entre otros, javax.net o java.net" *entro de sus paquetes exclusivos como plataforma, inclu!e una ampl6sima familia de paquetes bajo el nombre ra6z android.net.* ! sobre todo org.apache.http.*, de la que se (ar uso en esta aplicacin" 24. Lso de la base de datos +Q%ite La informacin de localizacin de los contactos se actualiza de forma peridica mediante conexiones con el servidor" )in embargo, en caso de no tener una seCal ,i9]i disponible ContactMap utiliza la informacin almacenada en la base de datos )NLite de &ndroid para mostrar al menos las Bltimas ubicaciones conocidas" Toda la gestin relacionada con la base de datos se lleva a cabo en la clase FriendDataBase" #n ella estn implementados dos mtodos importantes3 getFriends() que devuelve un objeto Cursor con todos los contactos almacenados en la base de datos, e insertFriend() que actualiza los datos de un contacto ! en caso de no existir lo inserta" #l manejo de la base de datos )NLite es mu! similar al que se (ace cuando se accede, por ejemplo, a la informacin de los contactos almacenados en el propio dispositivo mvil, !a explicado en el apartado S"<"?=" #n la clase FriendDataBase se declaran dos variables globales de mbito privado" La primera, mDataBase, representa un objeto de la clase SQLiteDatabase" #sta clase forma parte del paquete android.database.sqlite, que inclu!e otras muc(as clases e interfaces para el manejo de )NLite" La variable mDataBase representa un controlador de la base de datos ! proporciona mtodos para la creacin, consulta o actualizacin de la misma" La otra variable global, llamada mTable, contiene la sentencia )NL necesaria para crear la base de datos en caso de ser la primera ejecucin de ContactMap" 2,. Como crear una base de datos en android 'omo !a se (a mencionado, la variable mTable contiene la instruccin en )NL necesaria para crear la base de datos" #sta implica una Bnica tabla donde se almacena nBmero de telfono, latitud, longitud ! fec(a de actualizacin de cada contacto para el que se (a obtenido alguna vez informacin desde el servidor" )e puede comprobar que su estructura, mostrada a continuacin, es igual a la base de datos en 7!)NL residente en el servidor" pu!lic class FriendDataBase { // Sentencia de creacin de la BD private String mTable = "CREATE TABLE IF NOT EXISTS friend " + "(number INTEGER PRIMARY KEY, " + "latitude REAL NOT NULL, " + "longitude REAL NOT NULL, " + "date TEXT NOT NULL)"; } 'uando se llama al constructor de la clase, lo primero que se (ace es abrir la base de datos, de nombre W'ontact7apF*X, utilizando para ello el contexto de la aplicacin ! el mtodo openOrCreateDatabase()" 'omo es de suponer, en caso de no existir la base de datos con el nombre indicado, dic(o mtodo la crea" & continuacin, !a se dispone en la variable mDataBase de una controlador con el que manejar la base de datos" #l siguiente paso es ejecutar el script )NL contenido en la variable mTable" &s6, si la base de datos (a tenido que ser creada, se crear tambin la tabla necesaria" #n caso de existir, la sentencia )NL no produce ningBn efecto" /ara lanzar la sentencia se utiliza el mtodo execSQL() de la clase SQLiteDatabase" pu!lic class FriendDataBase { pu!lic FriendDataBase(Context ctx){ //apertura o creacin de la base de datos t&is.mDataBase = ctx.openOrCreateDatabase("ContactMapBD",0,null) //creacin de la tabla t&is.mDataBase.execSQL(mTable); } } 22. 6nterfa* de Lsuario XML )in embargo, quizs la ma!or utilidad de estas declaraciones externas al cdigo resida en la posibilidad de de8nir, de nuevo a travs de documentos 07L, interfaces de usuario completas" *entro de la carpeta Wfresfla!outX pueden de8nirse cuantos documentos 07L se desee, cada uno de ellos representando una determinada interfaz que se quiera implementar, o incluso diferentes versiones de la misma para segBn qu casos" /ara la interfaz de usuario que debe mostrarse con la clase SMSWriter se utilizan estas declaraciones externas, ubicadas en el 8c(ero de nombre Wsms"xmlX" )abemos que (emos de utilizar los siguientes elementos del paquete android.widget que contiene numerosas clases para construir interfaces de usuario3 /ara las etiquetas textuales, la clase TextView" /ara las cajas de texto, la clase EditText" /ara los botones, la clase Button" 'ada una de estas clases, !a sean instanciadas desde un documento 07L externo o en el cdigo fuente de forma tradicional, tienen una serie de atributos que (an de ser con8gurados ! que matizan su aspecto, colocacin o comportamiento dentro de la interfaz" Vie"s #n &ndroid, las interfaces de usuario estn formadas por una jerarqu6a de clases llamadas iews 2vistas5" 1na vista o iew representa cualquier elemento que se pueda dibujar en pantalla, como un botn, una animacin, una etiqueta de texto, etc" 'ontroles o widgets de la interfaz de usuario" #lemento bsico de la interfaz que permite la interaccin con el usuario" 1na vista es un rea rectangular en la pantalla que gestiona el tamaCo, el dibujado, el cambio de foco ! los gestos del rea que representan La clase android"view"iew sirve de clase Fase para todos los WwidgetsX istas disponibles3 Textiew, #ditText, Futton, OadioFutton, '(ec:box, *ate/ic:er Time/ic:er, )pinner Vie"s)rou$s 1na vista especial que contiene otras vistas (ijas" iewGroup es la clase base los la!outs ! vistas contenedoras" #sta clase tambin de8ne la clase iewGroup"La!out/arams" La!outs3 &bsoluteLa!out, TableLa!out, LinearLa!out, OelativeLa!out,Y iewGroups3 *ate/ic:er, Galler!, Gridiew Listiew, )crolliew, )pinner, Tab,idget """ Las vistas se organizan en estructuras de rbol cu!a ra6z es un iewGroup set'ontentiew25 permite aCadir una vistas a una actividad" La plataforma &ndroid ofrece dos mtodos para diseCar la interfaz3 procedural 2cdigo5 declarativa 207L5 Ada$ter Vie"s /ara poder interaccionar entre el cdigo de la aplicacin ! los elementos de la 1. se precisa de una subclase llamada AdapterView. #stos objetos, una vez instanciados en el cdigo, pueden realizar dos tipos de tareas3 Oellenar la pantalla con datos" &tender a las selecciones de los usuarios 28. H1$li'ue 'ue Gace el siguiente $rogramaB package co$.pruebas.productos; i$port android.app.*ctivit#; i$port android.database.+ursor; i$port android.database.s,lite.-./ite0atabase; i$port android.os.1undle; i$port android.view.2enu; i$port android.view.2enu3te$; i$port android.view.4iew; i$port android.widget.1utton; i$port android.widget.5et4iew; public class productos extends *ctivit# { Button boton&listado;
67verride public void on+reate81undle saved3nstance-tate9 { super.on+reate8saved3nstance-tate9; set+ontent4iew8R.la#out.$ain9;
if 8c G= null9 { int colu$na:o$bre3ndice = c.get+olu$n3nde7r5)row8<no$bre<9; int colu$na5ienda3ndice = c.get+olu$n3nde7r5)row8<tienda<9; 5et4iew tet = new 5et4iew8this9; int i = (; w)ile 8c.$ove5o:et899{ String valor+olu$na:o$bre = c.get-tring8colu$na:o$bre3ndice9; String valor+olu$na5ienda = c.get-tring8colu$na5ienda3ndice9; tet.set5et8valor+olu$na:o$bre A < 8< A valor+olu$na5ienda A <9<9; set+ontent4iew8tet9; iAA; }
} if 8$#01 G= null9 $#01.close89; } 'rea o abre una base de datos llamada WF*/roductosX, en la cual crea si no existe una tabla <productos< con dos campos WnombreX ! WtiendaX, luego se agregan tres registros a la tabla, para 8nal mente mostrarlos en una lista en orden del campo WnombreX"