Académique Documents
Professionnel Documents
Culture Documents
Federico Cristina, Sebastin Dapoto, Fernando G. Tinetti(1) III-LIDI, Facultad de Informtica, UNLP "omisi#n de In$% "ient&ficas, Pro$% de Buenos Aires 'eporte ()cnico UNLP-PD-*+ *A,osto *+ *
( !
(a-la de "ontenidos
Android: Definiciones Bsicas y Desarrollo de Aplicaciones 1 !ntrod"cci#n 1.1 $ersiones (A%! &e'els) 1.1.1 (oot en Android 1.) !ncidencia en el *ercado ) Ar+"itect"ra ).1 Dal'i, $irt"al *ac-ine (D$*) ).) Diferencias entre .$* 's D$* / Desarrollo de Aplicaciones para Android en .a'a /.1 (e+"isitos para Desarrollar desde 0clipse /.1.1 !nstalaci#n y confi1"raci#n /.1.) Alternati'as de dep"raci#n y e2ec"ci#n /.1.).1 Dispositi'o real /.1.).) Android $irt"al De'ice /.1.)./ Android 345 /.) (e+"isitos para Desarrollar desde A!D0 /.).1 !nstalaci#n y confi1"raci#n de A!D0 en "n e+"ipo 6#'il /.).) !nstalaci#n y confi1"raci#n de A!D0 desde %C 7 Desarrollo de Aplicaciones para Android en C8C99 : Ciclo de $ida de Aplicaciones 5 02e6plo: Desarrollo de "na Aplicaci#n Android en 0clipse 5.1 Creaci#n y confi1"raci#n inicial del proyecto 5.) Co6ponentes principales 5./ !6ple6entaci#n de ;<ello =orld> 5.7 !nstalaci#n *ediante A%? @ Co6"nicaci#n entre Dispositi'os @.1 Soc,ets en .a'a @.) 02e6plo Soc,ets TC% @./ 02e6plo Soc,ets AD% @.7 Soc,ets en Android @.7.1 *"lticasts en Android ApBndice A: %rctica
- Introducci#n
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, oogle !" # otros dispositivos$ %s desarrollado por la &pen 'andset Alliance, la cual es liderada por oogle$ -ttp:88es.Ci,ipedia.or18Ci,i8Android Dri1inal6ente diseEado para ar+"itect"ra A(*, act"al6ente -ay ports no oficiales tanto para 345 co6o para *!%S. 0l c#di1o f"ente se enc"entra disponible ba2o licencias de softCare libre (Apac-e o GFA General %"blic &icense 'ersi#n )). 0l 6is6o es 1eneral6ente liberado l"e1o de cada n"e'a 'ersi#n.
Fi1"ra 1. Distrib"ci#n de Android se1Kn s" 'ersi#n. !nfor6aci#n correspondiente al 6es de Abril de )I1) se1Kn Dpen Si1nal *aps. -ttp:88opensi1nal6aps.co68reports8fra16entation.p-p 0n lo +"e respecta a las polGticas de act"aliHaci#n, las 6is6as p"eden lle1ar a 'ariar dependiendo 'arios factores, tales co6o fabricante del dispositi'o, pro'eedora del ser'icio de telefonGa 6#'il, etc. 0n ocasiones, las act"aliHaciones ori1inal6ente estip"ladas l"e1o no se c"6plen por 6oti'os e3ternos a Goo1le. %or e2e6plo, el dispositi'o Sa6s"n1 Gala3y S!! (ori1inal6ente con Android )././) tiene planificada s" act"aliHaci#n a 'ersi#n 7L la c"al ya se efecti'iH# para e+"ipos liberados. Sin e6bar1o la act"aliHaci#n para dispositi'os ba2o carriers toda'Ga se enc"entra pendiente dado +"e cada co6paEGa "s"al6ente realiHa "na adaptacin definiti'a de la 'ersi#n. 0n al1"nos casos, la act"aliHaci#n n"nca lle1a de 6anera a"to6tica, sino +"e +"e es necesario ;rootear> (tBr6ino +"e se e3plica a contin"aci#n) el aparato e instalar "na 'ersi#n 6s act"al de for6a 6an"al.
% % - 'oot en Android
Confi1"rar "n dispositi'o Android en 6odo root per6ite tener "n control co6pleto del siste6a. &os pasos para realiHar esta tarea 'arGa en f"nci#n de cada dispositi'o, pero en tBr6inos 1enerales es necesario conectar el e+"ipo a "na %C, confi1"rar Android en 6odo dep"raci#n
ASB, reiniciar el e+"ipo en 6odo descar1a y e2ec"tar "n pro1ra6a especGfco desde "na %C (co6o por e2e6plo Ddin) para efecti'iHar los ca6bios sobre el e+"ipo.
%* - Incidencia en el /ercado
Act"al6ente Android es la platafor6a +"e lidera el mar(et s)are (cantidad de dispositi'os con Android), por enci6a de iDS, Sy6bian DS, (!* DS y =indoCs *obile. &a Fi1. ) 6"estra los porcenta2es de co6ercialiHaci#n de telBfonos inteli1entes se1Kn el siste6a operati'o instalado a partir del aEo )II@ -asta el )I11 se1Kn la infor6aci#n proporcionada en -ttp:88en.Ci,ipedia.or18 Ci,i8*obileMoperatin1Msyste6.
Fi1"ra ). 0'ol"ci#n de 'entas de dispositi'os se1Kn s" Siste6a Dperati'o, se1Kn -ttp:88en.Ci,ipedia.or18Ci,i8*obileMoperatin1Msyste6 (conte6plando solo smartp)ones).
* - Ar0uitectura
Co6o siste6a operati'o, Android est or1aniHado en capas y bibliotecas con diferentes f"ncionalidades, ser'icios e interacciones con las de6s partes o s"bsiste6as del siste6a operati'o.
Fi1"ra /. Ar+"itect"ra de co6ponentes +"e confor6an Android. -ttp:88de'eloper.android.co681"ide8basics8C-at is android.-t6l &a Fi1. / 6"estra la or1aniHaci#n en capas de Android. &a capa de 6s ba2o ni'el o 6s cercana al -ardCare es la basada en &in"3 y directa6ente sobre ella se podrGa decir +"e se
"bica la capa de ;trad"cci#n> a lo +"e es propio de Android, donde se p"eden identificar dos partes en esta capa: N Bibliotecas: al1"nas de las c"ales, +"iHs identificables co6o las clsicas de &in"3, tal co6o libc y otras 6s propias o adaptadas para Android, co6o por e2e6plo -edia .ramewor(. N Android ("nti6e: es +"iHs la parte de esta se1"nda capa 6s especGfica de Android y diferenciada de lo +"e estarGa a este ni'el en "n siste6a operati'o &in"3, +"e contiene las bibliotecas 6s i6portantes y la D$*. Oa las capas s"periores son total6ente especGficas de Android, a"n+"e por s"p"esto no son esencial6ente diferentes de lo +"e se define en "n siste6a operati'o en capas de ni'el de abstracci#n si6ilares.
Tabla 1. Diferencias entre D$* y .$*. (eferencias: Q1R -ttp:88CCC.6o6ob.in8)I1I81eneral8b-a'is8difference of d'6 and 2'6 in t-e android Corld8 Q)R -ttp:88CCC.1oo1le.co68e'ents8io8)I1I8sessions82it co6piler androids dal'i, '6.-t6l
1$2$2 + ,nstalacin # configuracin Sie6pre es reco6endable se1"ir los pasos indicados en el sitio de desarrolladores Android (-ttp:88de'eloper.android.co6), debido a +"e las 'ersiones 'an ca6biando a lo lar1o del tie6po. 0n tBr6inos 1enerales los pasos son los si1"ientes: 1. Descar1ar la .D? desde el site de Dracle e instalar. ). Descar1ar 0clipse. /. Descar1ar la SD? de Android e instalar, lo c"al ta6biBn nos facilitar las opciones para descar1ar los A$Ds (la descar1a de los A$Ds re+"erir "n tie6po considerable). 7. !nstalar el pl"1in ADT desde 0clipse (<elp T !nstall FeC SoftCare). *s infor6acion en: -ttp:88de'eloper.android.co68sd,8inde3.-t6l Ana 'eH +"e estn todos los co6ponentes instalados, ya podre6os crear aplicaciones y e2ec"tarlas en "n dispositi'o.
1$2$3 + Alternativas de depuracin # ejecucin Co6o se detall# anterior6ente, e3isten tres alternati'as para dep"rar en tie6po real las aplicaciones desarrolladas: 6ediante "n dispositi'o real o dos alternati'as de e6"laci#n, +"e
!deal6ente se debe contar con "n dispositi'o real. Db'ia6ente Bsta es la 6e2or alternati'a, dado +"e los e6"ladores presentan ciertos faltantes en s"s f"ncionalidades (por e2e6plo no c"entan con soporte de e6"laci#n =iFi), ade6s +"e la perfor6ance se enc"entra considerable6ente de1radada.
%ara crear "n A$D desde 0clipse se debe seleccionar la opci#n ;6indo7 T A.D /ana,er%%%> y l"e1o la opci#n ;Ne7%%%>. 0n la 'entana de creaci#n es necesario co6pletar el no6bre del n"e'o dispositi'o y las caracterGsticas con las +"e contar el 6is6o, tales co6o ni'el de la A%!, ta6aEo de la SD Card, resol"ci#n de la pantalla, etc. ($er Fi1. 7). Ana 'eH creado, se p"ede 'is"aliHar el n"e'o dispositi'o en la lista de A$Ds disponibles, tal co6o se obser'a en la Fi1. 00. A s" 'eH, es posible seleccionar sobre +"B dispositi'o se e2ec"tar "na aplicaci#n. %ara realiHar esto se debe ele1ir la opci#n ;'un T 'un "onfi,urations%%%> y l"e1o entrar en la pestaEa ;(ar,et>, en donde se p"ede 'is"aliHar la lista de dispositi'os co6patibles con la aplicaci#n a e2ec"tar. Fotar +"e si n"estra aplicaci#n est confi1"rada por e2e6plo para "na 'ersi#n 6Gni6a del SD? i1"al a J, entonces no se 'is"aliHarn los dispositi'os +"e tienen "na 'ersi#n anterior a Bsta.
4% %*%4 - Android-89:
%ara instalar la platafor6a Android 345 se deben se1"ir "na serie de pasos +"e se en"6eran a contin"aci#n.
1. Descar1ar e instalar $irt"alBo3, el c"al ser'ir para instalar Android 345 en "na 6+"ina 'irt"al. ). Descar1ar Android 345. 03isten 'arias 'ersiones de Android +"e se p"eden "tiliHar. &a 'ersi#n ).) de Android 345 es s"ficiente. /. Crear "na n"e'a 6+"ina 'irt"al e instalar Android 345 co6o Siste6a Dperati'o (-ttp:88androidspin.co68)I118I18)78-oCto install android 345 ) ) in 'irt"albo38) 7. Confi1"rar co6o ;puente> el adaptador de red de la 6+"ina 'irt"al. 0sto es necesario para +"e al dispositi'o se le asi1ne "n !% real y entonces sea posible conectarse al 6is6o para ser "tiliHado desde 0clipse. Ana 'eH +"e este6os e2ec"tando la 6+"ina 'irt"al con Android 345, se debe realiHar la cone3i#n al dispositi'o. 0sto se lle'a a cabo desde lGnea de co6ando -aciendo "so de la -erra6ienta Android De-u, Brid,e (ADB!. 0sta -erra6ienta se enc"entra en el s"bdirectorio Uplatfor6 toolsV del SD? (e2: C:Wr"taMSD?Wplatfor6 tools). %ara realiHar la cone3i#n se debe e2ec"tar el si1"iente co6ando: > adb connect IPdispositivo %ara a'eri1"ar el !% +"e le f"e asi1nado a n"estra 6+"ina 'irt"al, es Ktil el co6ando U netcf,V +"e se p"ede "sar desde la consola de android. %ara entrar a la consola se debe presionar las teclas ;alt<F = y para salir las teclas ;alt<F>=. 0n c"anto el dispositi'o 'irt"al estB conectado aparecer dentro de la ;lista de dispositi'os en e2ec"ci#n> en el entorno 0clipse, p"diendo ser ele1ido para dep"rar n"estras aplicaciones.
1$3$2 + ,nstalacin # configuracin de A,0% en un equipo mvil &os pasos para esta alternati'a se red"cen si6ple6ente a acceder al *ar,et y descar1ar e instalar la aplicaci#n.
1$3$3 + ,nstalacin # configuracin de A,0% desde 45 Alternati'a6ente, pode6os instalar A!D0 en "na %C. 0sta sol"ci#n p"ede ser Ktil en caso de no contar con "n dispositi'o 6#'il, o bien si +"ere6os "tiliHar "n teclado fGsico en caso +"e el
dispositi'o con el +"e conta6os no lo pro'ee. %ara lle'ar a cabo la instalaci#n se debe pri6era6ente instalar "na 6+"ina 'irt"al con el siste6a operati'o Android 345 si1"iendo los pasos 'istos en la secci#n /.1.)./. Ana 'eH +"e este6os e2ec"tando Android 345 se procede con la instalaci#n de A!D0. <acerlo desde el 6ar,et en la 6+"ina 'irt"al p"ede traer co6plicaciones, con lo c"al es 6s fcil descar1ar el A%? de A!D0 desde el na'e1ador de Android, alo2ado en ap,tops, e instalarlo. (-ttp:88CCC .ap,tops.co68aide android 2a'a ide 1 I beta15.-t6l).
Fi1"ra 5. Ciclo de $ida -ttp:88CCC .android2a'adoc.co681.IMr1Msrc8android8app8Acti'ity.-t6l &os e'entos definidos por la clase Acti$ity son los si1"ientes: N onCreate(): in'ocado c"ando la acti'idad es creada por pri6era 'eH. N onStart(): in'ocado c"ando la acti'idad se -ace 'isible para el "s"ario. N on(es"6e(): in'ocado c"ando la acti'idad co6ienHa a interact"ar con el "s"ario. N on%a"se(): in'ocado c"ando la acti'idad act"al se pa"sa y la acti'idad anterior se rean"da. N onStop(): in'ocado c"ando la acti'idad ya no es 'isible para el "s"ario.
N N
onDestroy(): in'ocado antes de +"e el siste6a destr"ya la acti'idad (ya sea de 6anera 6an"al o por el siste6a para conser'ar 6e6oria). on(estart(): in'ocado c"ando la acti'idad -a sido detenida y se est reiniciando.
Cada "no de estos e'entos es in'ocado a fin de poder e2ec"tar la l#1ica en c"esti#n en el 6o6ento correspondiente. De todas 6aneras, no sie6pre es necesario redefinir todos los 6Btodos. De 6anera si6plificada, podrGa ser s"ficiente la i6ple6entaci#n de los 6Btodos onCreate(), onResume(), onPause(), a"n+"e esto 'ariar se1Kn las necesidades en cada caso.
Fi1"ra @. Creaci#n de "n n"e'o proyecto Android. Nota: d"rante el tie6po de elaboraci#n de este reporte, la i6a1en y las opciones de selecci#n del tipo de proyecto ca6biaron. 0s 6"y probable +"e d"rante los si1"ientes 6eses '"el'an a ca6biar, pero concept"al6ente las opciones de creaci#n de proyectos se 6antienen bsica6ente in'ariantes. ). Co6o se obser'a en la Fi1. 4, es necesario co6pletar "na serie de datos para la confi1"raci#n inicial del proyecto (entre parBntesis se indican los 'alores car1ados en el e2e6plo, a"n+"e p"eden 'ariar se1Kn sea necesario): N Fo6bre al proyecto (;Dello6orld>). N $ersi#n de Android a "tiliHar (*%4% ). N Fo6bre de la aplicaci#n (;Dello6orld>). N Fo6bre del pac,a1e. &a con'enci#n reco6endada es "tiliHar el no6bre del do6inio en orden in'erso, se1"ido del no6bre del proyecto
N N
(;com%pro,ramaciondistri-uida%Dello6orld>) Fo6bre de la acti'idad principal (;/ainActi$ity>) $ersi#n 6Gni6a del A%! (;E>)
Fi1"ra 4. Confi1"raci#n inicial del proyecto Android. /. Al presionar sobre el bot#n ;Finis2> se crear la estr"ct"ra de la aplicaci#n.
N N
dra7a-le-2dpi, dra7a-le-mdpi, dra7a-le-ldpi: contiene i6a1enes tales co6o los iconos de la aplicaci#n en diferentes resol"ciones (-i1-, 6edi"6, loC respecti'a6ente). S layout: contiene el arc-i'o ;6ain.36l> en donde se enc"entra especificada la interfaH de "s"ario (A!) en for6ato P*&. S $alues: contiene el arc-i'o ;strin1s.36l>. 0l 6is6o sir'e para definir todos los strin1s +"e conten1a n"estra aplicaci#n, para l"e1o ser referenciados. 0s reco6endable "tiliHarlo, ya +"e si en al1Kn 6o6ento se necesita trad"cir la aplicaci#n a otro idio6a, solo es necesario ree6plaHar el arc-i'o strin1s.36l con otro e+"i'alente en el n"e'o idio6a. Android/anifest%8ml: este es el arc-i'o de 6anifiesto de n"estra aplicaci#n. 0n el 6is6o se especifica los per6isos re+"eridos por la aplicaci#n, s" orientaci#n (landscape o portrait), el A%! 6Gni6o necesario, la clase principal, etc.. pro,uard%cf,: arc-i'o de confi1"raci#n a"to1enerado por %roG"ard para opti6iHar8 of"scar el c#di1o de la aplicaci#n. Fo se debe 6odificar. proBect%properties: arc-i'o de confi1"raci#n a"to1enerado por Android Tools. Fo se debe 6odificar.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http: schemas.android.com ap! res android" pac!age="com.programaciondistri"uida.#ello$orld" android:version%ode="1" android:version&ame="1.0" > <uses-sd! android:min'd!(ersion=")" > <application android:icon="*dra+a"le ic,launcher" android:la"el="*string app,name" > <activitandroid:la"el="*string app,name" android:name="..ain/ctivit-" > <intent-filter> <action android:name="android.intent.action../0&" > <categor- android:name="android.intent.categor-.1/2&%#34" < intent-filter> < activit-> < application> < manifest>
>
main%8ml: es posible crear la interfaH 1rfica desde c#di1o, o bien 1enerar "n arc-i'o P*& donde se defina la 6is6a. %ara esta Klti6a opci#n se p"ede "tiliHar el rap)ical La#out, el c"al es "na -erra6ienta 'is"al de diseEo, parte del ADT. 0n este e2e6plo se definieron dos !ext"iew y "n 6utton (notar +"e no es obli1atorio el "so de strings.xml).
<?xml version="1.0" encoding="utf-8"?> <1inear1a-out xmlns:android="http: schemas.android.com ap! res android" android:id="*5id la-out" android:la-out,+idth="fill,parent" android:la-out,height="fill,parent" android:orientation="vertical" > <6ext(ie+ android:la-out,+idth="fill,parent" android:la-out,height="+rap,content" android:text="*string hello" > <6ext(ie+ android:la-out,+idth="fill,parent" android:la-out,height="+rap,content" android:text="3sta es la aplicaci7n de prue"a #ello $orld" > < 1inear1a-out>
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">#ello $orld8 .ain/ctivit-9< string> <string name="app,name">#ello$orld< string> < resources>
/ainActi$ity%Ba$a: A6pliare6os el 6Btodo onCreate() a fin de incorporar din6ica6ente "n bot#n, el c"al ade6s presentar "n 6ensa2e al ser clic,eado:
pu"lic void on%reate:;undle saved0nstance'tate< = super.on%reate:saved0nstance'tate<> set%ontent(ie+:4.la-out.main<> ;utton a;utton = ne+ ;utton:get;ase%ontext:<<> a;utton.set6ext:"? este es un "ot7n de prue"a"<> a;utton.set@n%lic!1istener:ne+ (ie+.@n%lic!1istener:< = pu"lic void on%lic!:(ie+ v< = 6oast.ma!e6ext:get;ase%ontext:<8 "%lic!ed"8 6oast.13&A6#,1@&A<.sho+:<> B B<> 1inear1a-out la-out = :1inear1a-out<find(ie+;-0d:4.id.la-out<> la-out.add(ie+:a;utton<> B
Al e2ec"tar la aplicaci#n en el e6"lador 'ere6os "na pantalla si6ilar a la de la Fi1. J. &a Fi1. 1I 6"estra el res"ltado de clic,ear el bot#n de la aplicaci#n.
Fi1"ra 1I. *ensa2e al clic,ear el bot#n Al e2ec"tar la aplicaci#n en el e6"lador 'ere6os "na pantalla si6ilar a la de la Fi1. J. &a Fi1. 1I 6"estra el res"ltado de clic,ear el bot#n de la aplicaci#n.
pu"lic class 6est6%D = static final int PORT = 8EFG> static final 'tring HOST = "localhost"> pu"lic static void main:'tringHI args< = ne+ 6est6%D:<> B
pu"lic 6est6%D:< = 'erver server = ne+ 'erver:<> 6hread server6hread = ne+ 6hread:server<>
server6hread.start:<> %lient client = ne+ %lient:<> 6hread client6hread = ne+ 6hread:client<> client6hread.start:<> B pu"lic class 'erver implements 4unna"le = pu"lic void run:< = tr- = '-stem.out.println:"H'erverI 3sperando mensaCe..."<> 'erver'oc!et server%onn = ne+ 'erver'oc!et:D@46<> 'oc!et soc!et = server%onn.accept:<> @"Cect0nput'tream from;uffer = ne+ @"Cect0nput'tream:soc!et.get0nput'tream:<<> 'tring datos = :'tring<from;uffer.read@"Cect:<> from;uffer.close:<> soc!et.close:<> server%onn.close:<> '-stem.out.println:"H'erverI 4eci"ido: " 5 datos<> B catch :3xception e< = e.print'tac!6race:<> B B B pu"lic class %lient implements 4unna"le = pu"lic void run:< = tr- = 'oc!et soc!et = ne+ 'oc!et:HOST8 PORT<> @"Cect@utput'tream to;uffer = ne+ @"Cect@utput'tream:soc!et.get@utput'tream:<<> '-stem.out.println:"H%lientI 3nviando mensaCe"<> to;uffer.+rite@"Cect:".3&'/J3"<> to;uffer.flush:<> to;uffer.close:<> soc!et.close:<> B catch :3xception e< = e.print'tac!6race:<> B B B B
import Cava.net.KatagramDac!et> import Cava.net.0net/ddress> import Cava.net..ulticast'oc!et> pu"lic class 6est2KD = pu"lic static final int PORT_UDP = )))8> pu"lic static final 'tring GROUP_IP = "LM0.0.0.1"> pu"lic static void main:'tringHI args< ne+ 6est2KD:<> B =
pu"lic 6est2KD:< = 'erver server = ne+ 'erver:<> 6hread server6hread = ne+ 6hread:server<> server6hread.start:<> %lient client = ne+ %lient:<> 6hread client6hread = ne+ 6hread:client<> client6hread.start:<> B pu"lic class %lient extends 6hread = pu"lic void run:< = tr= demoramos a fin de Nue el server estO esperando a reci"ir 6hread.sleep:1000<> "-teHI "uf = ne+ "-teHLGFI> "uf = ".3&'/J3".get;-tes:<> 0net/ddress group = 0net/ddress.get;-&ame:GROUP_IP<> KatagramDac!et pac!et = ne+ KatagramDac!et:"uf8 "uf.length8 group8 PORT_UDP<> .ulticast'oc!et soc!et = ne+ .ulticast'oc!et:PORT_UDP<> '-stem.out.println:"H%lientI 3nviando mensaCe"<> soc!et.send:pac!et<> B catch :3xception e< = e.print'tac!6race:<> B B B
pu"lic class 'erver extends 6hread = pu"lic void run:< = tr= .ulticast'oc!et soc!et = ne+ .ulticast'oc!et:PORT_UDP<> 0net/ddress group = 0net/ddress.get;-&ame:GROUP_IP<> soc!et.CoinAroup:group<> KatagramDac!et pac!et> "-teHI "uf = ne+ "-teHLGFI> pac!et = ne+ KatagramDac!et:"uf8 "uf.length<> '-stem.out.println:"H'erverI 3sperando mensaCe..."<> soc!et.receive:pac!et<> 'tring received = ne+ 'tring:pac!et.getKata:<<> '-stem.out.println:"H'erverI 4eci"ido: " 5 received<> soc!et.leaveAroup:group<> soc!et.close:<> B catch :3xception e< = e.print'tac!6race:<> B B B B
Cabe destacar "na consideraci#n especial en lo +"e respecta a recepciones 6"lticast. A 6enos +"e se confi1"re e3plGcita6ente otra cosa, las 6is6as son filtradas, bsica6ente por raHones de cons"6o de ener1Ga del e+"ipo: ;For6ally t-e =ifi stac, filters o"t pac,ets not e3plicitly addressed to t-is de'ice. Ac+"rin1 a *"lticast&oc, Cill ca"se t-e stac, to recei'e pac,ets addressed to 6"lticast addresses. %rocessin1 t-ese e3tra pac,ets can ca"se a noticable battery drain and s-o"ld be disabled C-en not needed.> .uente8 )ttp899developer$android$com9reference9android9net9wifi9:ifi-anager$-ulticastLoc($)tml %ara poder recibir pa+"etes 6"lticast, es necesario obtener el loc, correspondiente. 0sta tarea se 1eneral6ente se realiHa en tres pasos: 1) !nstanciar y confi1"rar el 6"lticast&oc, en el
Ap)ndice A: Prctica
1. %roponer "na sol"ci#n +"e in'ol"cre la instanciaci#n din6ica y car1a de datos de "n ob2eto desde "na aplicaci#n cliente Android y s" posterior en'Go a "n ser'idorL indicndole a este Klti6o el o los 6Btodos +"e debe e2ec"tar, para l"e1o retornar el 'alor res"ltante. ). !6ple6entar 6ediante soc,ets TC% "n control remoto ,4; para dispositi'o 6#'il encar1ado de co6andar "n ser'icio (corriendo por e2e6plo en "n e+"ipo des,top) co6o el de reprod"cci#n de 6Ksica (acciones de reprod"cci#n, pa"sa, etc.) o na'e1aci#n de foto1rafGas (si1"iente, anterior, etc.). /. Desarrollar "tiliHando soc,ets AD% "n notificador de )osts conectados en una LA<;, teniendo en c"enta +"e no ser necesario contar con "n ser'idor central para esta tarea, sino +"e cada dispositi'o 6#'il deber 6antener act"aliHada s" tabla de -osts conectados.