Está en la página 1de 46

Formacin en Tecnologas Java

App Android! De"arrollo de aplicacione" en Android.


Tutorial: Lector RSS de CAMON
Material complementario (para hacer copy/paste del cdigo proporcio!ado a los asiste!tes de la charla"taller i#partida e! CAMON Alica!te el $$"$% de e!ero de %&$$' Boyn Bonev, Pablo Suau, Miguel A. Lozano y el Dep. CCIA de la niver!idad de Alicante

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-1

Formacin en Tecnologas Java

#unto" a tratar
Creaci! del proyecto co! (clipse Ma!i)est* acti+idad pri!cipal y recursos ,ista de ta-la* layout para las )ilas* adaptador .escarga y parsi!g de /ML e! segu!do pla!o .escarga de i#0ge!es e! segu!do pla!o .i0logo* #e!1* ca#-ios de orie!taci! 2!te!ts para s3!tesis del ha-la y !a+egador 4e!erar pa5uete y )ir#arlo

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-2

Formacin en Tecnologas Java

Creacin del pro%ecto con &clip"e


2!stalaci!:
.escargar y desco#pri#ir A!droid S.6 2!stalaci! del plug"i! para (clipse:
7 8elp 9 2!stall !e: so)t:are 9 A+aila-le so)t:are 9 Add: https://dl"ssl'google'co#/a!droid/eclipse/ 7 O;* seleccio!ar el so)t:are* Ne<t* =i!ish' 7 Rei!iciar (clipse'

Co!)iguraci! de (clipse:
7 >i!do:s 9 ?re)ere!ces 9 A!droid 9 S.6 Locatio!: @ 2!dica#os la ruta do!de he#os desco#pri#ido el A!droid S.6

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$

Formacin en Tecnologas Java

A(D Mana)er
Crear !ue+o dispositi+o +irtual (A,. Seleccio!ar la +ersi! de A!droid

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-'

Formacin en Tecnologas Java

&mulador

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-*

Formacin en Tecnologas Java

Crear el pro%ecto
Asiste!te de (clipse
4e!era la estructura -0sica del proyecto A!droidMa!i)est'<#l Acti+idad pri!cipal Layout Recursos

Co!+ie!e seleccio!ar la #3!i#a +ersi! posi-le


CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-+

Formacin en Tecnologas Java

A-adir recur"o"
(! +alues/stri!gs'<#l las cade!as de te<to 5ue +a#os a #ostrar e! la i!ter)aA (! dra:a-le* el ico!o de CAMON a alta* #edia y -aBa resoluci! (! layout/#ai!'<#l la disposici! de los co#po!e!tes de la i!ter)aA gr0)ica

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-,

Formacin en Tecnologas Java

"trin)"./ml
2!troduci#os (e! la pestaCa /ML :
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">CAMON</string> <string name="url_base">http://www tucamon es</string> <string name="url_rss">http://www tucamon es/welcome/rss?!ormat=rss</string> <string name="noitems">"ista vac#a</string> <string name="errordered">$%rror en la descarga&</string> <string name="calla">$Calla&</string> <string name="recargar">'ecargar</string> <string name="acerca_de">Acerca de </string> <string name="acerca_de_camon">Acerca de CAMON</string> <string name="licencia">%sta aplicaci(n descarga las noticias ')) de www tucamon es * las muestra +ue desarrollada en el taller de Android llevado a ca,o en el aula de CAMON de Alicante en enero de -.//0 por los asistentes * por 1o*2n 1onev 34niversidad de Alicante5 %sta aplicaci(n no es 67o!icial67 de CAMON0 no se puede vender * su !inalidad es did2ctica "a 4niversidad de Alicante * CAMON no se responsa,ili8an de su uso * modi!icaciones hechas por terceros </string> <string <string <string <string <string <string <string <string <string name="aceptar">Aceptar</string> name="ok">O9</string> name="leemelo">":emelo</string> name="web">;e,</string> name="atras">Atr2s</string> name="espere">%spere </string> name="descargandonoticias"><escargando noticias</string> name="descargandonoticia"><escargando noticia</string> name="imagenes_descargadas">=m2genes descargadas</string>

</resources>

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-.

Formacin en Tecnologas Java

Dra1a2le
(! las carpetas dra:a-le i!troduci#os el ico!o de la CAMON* redi#e!sio!ado a tres resolucio!es di)ere!tes:
dra:a-le"hdpi/ico!'p!g de D%<D% p3<eles dra:a-le"#dpi/ico!'p!g de EF<EF p3<eles dra:a-le"ldpi/ico!'p!g de GH<GH p3<eles

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-0

Formacin en Tecnologas Java

la%out3main./ml
2!troduci#os u! List,ie: 5ue ser0 la ta-la do!de ire#os coloca!do las !oticias de la :ede CAMON' .e #o#e!to !o producir0 !i!g1! resultado +isi-le'
<?xml version="1.0" encoding="utf-8"?> <"inear"a*out xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:la*out>width="fill_parent" android:la*out>height="fill_parent" > <"ist?iew android:id="@ id/!ist"iew01" android:la*out>width="fill_parent" android:la*out>height="fill_parent" android:scroll,ars="vertical" /> </"inear"a*out>

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-10

Formacin en Tecnologas Java

AndroidMani4e"t./ml
(speci)icare#os 5ue la aplicaci! !ecesita per#isos para acceder a 2!ter!et (l /ML 5uedar3a as3:
<?xml version="1.0" encoding="utf-8"?> <mani!est xmlns:android="http://schemas.android.com/apk/res/android" pac@age="es.tucamon" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:la,el="@string/app_name"> <activit* android:name=".#amon" android:la,el="@string/app_name"> <intentA!ilter> <action android:name="android.intent.action.$%&'" /> <categor* android:name="android.intent.categor(.!%)'#*+," /> </intentA!ilter> </activit*> </application> <usesAsd@ android:min)d@?ersion="-" />

<uses-permission android:name="android.permission.INTERNET"/>
</mani!est>

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-11

Formacin en Tecnologas Java

Actividad principal
es'tuca#o!'Ca#o!'Ba+a ACadi#os dos cade!as 5ue !os har0! )alta* recogiI!dolas de los recursos stri!g' ACadi#os u!a +aria-le Co!te<t por5ue accedere#os a ella +arias +eces'
public class Camon extends Activit* B private static )tring ),!_.%/+C private static )tring ),!_,//C Context contextC DOverride public void onCreate31undle saved=nstance)tate5 B super onCreate3saved=nstance)tate5C setContent?iew3' la*out main5C Context = getApplicationContext35C ),!_.%/+ = get)tring3' string url_base5C ),!_,// = get)tring3' string url_rss5C E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-12

Formacin en Tecnologas Java

Acce"o a componente" del la%out


O-te!e#os u!a re)ere!cia utiliAa!do el ide!ti)icador del ele#e!to' Asig!a#os u! Liste!er para clic;s so-re los ite#s de la ta-la
public class Camon extends Activit* B private static )tring ),!_.%/+C private static )tring ),!_,//C Context contextC

ListView listView;
/FF Called when the activit* is !irst created F/ DOverride public void onCreate31undle saved=nstance)tate5 B super onCreate3saved=nstance)tate5C setContent?iew3' la*out main5C Context = getApplicationContext35C ),!_.%/+ = get)tring3' string url_base5C ),!_,// = get)tring3' string url_rss5C

listView = (ListView)findView !"d(#$id$ListView01); listView$set%n"tem&lic'Listener(new %n"tem&lic'Listener() ( )%verride public void on"tem&lic'(*dapterView<+> ar,-. View ar,/. int position. lon, id) (
// en 0id0 tenemos el n1mero de fila seleccionada

2 2);
E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-1$

Formacin en Tecnologas Java

Cla"e noticia
Crea#os u!a !ue+a clase Noticia'Ba+a e! el #is#o pa5uete
public )tring getGitulo35 B return tituloC E public void setGitulo3)tring titulo5 B t3is titulo = tituloC E public )panned get<escripcion35 B return descripcionC E public void set<escripcion3)panned descripcion5 B t3is descripcion = descripcionC E public class Noticia B public )tring get"in@35 B private )tring tituloC return lin@C private )panned descripcionC E private )tring lin@C public void set"in@3)tring lin@5 B private )tring !echaC t3is lin@ = lin@C private )tring lin@=magenC E private <rawa,le imagenC public )tring get+echa35 B return !echaC public Noticia35B E titulo = 77C public void set+echa3)tring !echa5 B descripcion = new )panned)tring3775C t3is !echa = !echaC lin@ = 77C E !echa = 77C public )tring get"in@=magen35 B lin@=magen = 77C return lin@=magenC E E public Noticia3)tring titulo0 )tring !echa0 )panned descripcion0 public void set"in@=magen3)tring lin@=magen5 B )tring lin@0)tring lin@=magen5B t3is lin@=magen = lin@=magenC t3is titulo=tituloC E t3is !echa=!echaC public void set=magen3<rawa,le imagen5 B t3is descripcion=descripcionC t3is imagen = imagenC t3is lin@=lin@C E t3is lin@=magen=lin@=magenC public <rawa,le get=magen35 B E return imagenC E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-1'

Formacin en Tecnologas Java

5a%out para la" 4ila"


(! la carpeta res/layout crea#os u! !ue+o <#l lla#ado )ila'<#l Le aCadi#os u!a i#age! co! ide!ti)icador JKid/=ila2#age! y al lado de ella u! Layout 5ue dispo!ga los co#po!e!tes +ertical#e!te* co! dos ca#pos de te<to: JKid/=ilaTe<to$ y JKid/=ilaTe<to%
<?xml version="1.0" encoding="utf-8"?> <"inear"a*out xmlns:android="http://schemas.android.com/apk/res/android" android:la*out>width="fill_parent" android:la*out>height="wrap_content" android:orientation="hori0ontal"> <=mage?iew android:id="@+id/FilaImagen" android:la*out>width="100p1" android:la*out>height="20p1" /> <"inear"a*out android:la*out>width="wrap_content" android:la*out>height="wrap_content" android:orientation="vertical"> <Gext?iew android:id="@+id/FilaTexto1" android:text)i8e="13sp" android:textColor="4+15+66" android:text)t*le="bold" android:la*out>width="fill_parent" android:la*out>height="wrap_content"/> <Gext?iew android:id="@+id/FilaTexto2" android:text)i8e="10sp" android:la*out>width="fill_parent" android:la*out>height="wrap_content"/> </"inear"a*out> </"inear"a*out> App Android-1*

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

Formacin en Tecnologas Java

Adaptador para la ta2la


NoticiasAdapter colocar0 la i!)or#aci! de los o-Betos Noticia e! el layout )ila'<#l* para cada )ila (para cada !oticia
public class NoticiasAdapter extends Arra*Adapter<Noticia> B *rra!List<4oticia> noticias; Context contextC public NoticiasAdapter3Context context0 int text?iew'esource=d0 Arra*"ist<Noticia> noticias5 B super3context0 text?iew'esource=d0 noticias5C t3is noticias = noticiasC t3is context = contextC E DOverride public ?iew get?iew3int position0 ?iew convert?iew0 ?iewHroup parent5 B if 3convert?iew == null5 B "a*out=n!later in!later = 3"a*out=n!later5 context get)*stem)ervice3Context !%78)9_&'6!%9+,_/+,"&#+5C convert?iew = in!later in!late3' la*out fila0 null5C E 4oticia noticia = noticias$,et(position); if 3noticia &= null5 B Gext?iew tv/ = 3Gext?iew5 convert?iew !ind?iew1*=d3#$id$FilaTexto15C Gext?iew tv- = 3Gext?iew5 convert?iew !ind?iew1*=d3#$id$FilaTexto25C =mage?iew iv = 3=mage?iew5 convert?iew !ind?iew1*=d3#$id$FilaImagen5C if 3tv/ &= null5 B tv/ setGext3noticia$,et5itulo()5C E if 3tv- &= null5 B tv- setGext3noticia$,et6ec3a()5C E if 3iv &= null5 B iv set=mage<rawa,le3noticia$,et"ma,en()5C E E return convert?iewC E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-1+

Formacin en Tecnologas Java

Adaptador para la ta2le


.eclara#os u!a lista de !oticias y el adaptador Asig!a#os el adaptador a la ta-la (list,ie: de!tro del #Itodo o!Create
public class Camon extends Activit* B private static )tring ),!_.%/+C private static )tring ),!_,//C Context contextC "ist?iew list?iewC

*rra!List<4oticia> noticias; 4oticias*dapter noticias*dapter;


DOverride public void onCreate31undle saved=nstance)tate5 B super onCreate3saved=nstance)tate5C setContent?iew3' la*out main5C Context = getApplicationContext35C ),!_.%/+ = get)tring3' string url_base5C ),!_,// = get)tring3' string url_rss5C noticias = new *rra!List<4oticia>(); noticias*dapter = new 4oticias*dapter(context. #$la!out$fila. noticias); list?iew = 3"ist?iew5!ind?iew1*=d3' id !ist"iew015C

listView$set*dapter(noticias*dapter);
list?iew setOn=temClic@"istener3new On=temClic@"istener35 B

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-1,

Formacin en Tecnologas Java

De"car)a % par"in) de 6M5 en "e)undo plano


Las operacio!es le!tas de-e! realiAarse e! segu!do pla!o* de lo co!trario la aplicaci! deBar0 de respo!der y A!droid !os o)recer0 #atarla' Cual5uier operaci! de red se puede co!siderar u!a operaci! le!ta' ?ara crear procesos e! segu!do pla!o pode#os utiliAar Threads'
(l pro-le#a: !o pode#os acceder a los co#po!e!tes gr0)icos desde otro hilo 5ue !o sea el pri!cipal' La soluci!: A!droid !os o)rece las Asy!cTas; 5ue )acilita! el acceso a los co#po!e!tes gr0)icos
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-1.

Formacin en Tecnologas Java

Declaracin de A"%nc7a"8
La declara#os de!tro de la clase Ca#o! para poder acceder a sus ca#pos (sus +aria-les
public class Camon extends Activit* B private static )tring ),!_.%/+C private static )tring ),!_,//C Context contextC "ist?iew list?iewC Arra*"ist<Noticia> noticiasC NoticiasAdapter noticiasAdapterC 5area7escar,a tarea; DOverride public void onCreate31undle saved=nstance)tate5 B // $$$ lan8a7escar,a7e4oticias(); 2 void lan8a7escar,a7e4oticias()( tr! ( tarea = new 5area7escar,a(); tarea$execute(new 9#L( RL!R"")); 2 catc3 (:alformed9#L;xception e) ( e$print<tac'5race(); 2 2 private class 5area7escar,a extends *s!nc5as'<9#L. <trin,. List<4oticia>>( // $$$ 2 E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-10

Formacin en Tecnologas Java

M9todo" de A"%nc7a"8
private class Garea<escarga extends As*ncGas@<4'"0 )tring0 "ist<Noticia>>B Arra*"ist<Noticia> noticias<escargadasC Irogress<ialog progress<ialogC ,oolean error=!alseC DOverride protected "ist<Noticia> do=n1ac@ground34'" return noticias<escargadasC E DOverride protected void onIre%xecute35 B E DOverride protected void onCancelled35 B E DOverride protected void onIrogress4pdate3)tring E DOverride protected void onIost%xecute3"ist<Noticia> result5 B E E values5 B params5 B

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-20

Formacin en Tecnologas Java

M9todo" de A"%nc7a"8
(l #Itodo do2!Lac;grou!d( realiAar0 la descarga pero !o podr0 acceder a la i!ter)aAM lo har0 solicita!do la eBecuci! de o!?rogressNpdate( y o!?ost(<ecute( Ta#-iI! declara#os u! ?rogress.ialog 5ue de-e#os ir actualiAa!do dura!te el progreso de la descarga (y parsi!g de /ML '

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-21

Formacin en Tecnologas Java

A"%nc7a"8 : acce"o a inter4a;


DOverride protected void onIre%xecute35 B super onIre%xecute35C noticiasAdapter clear35C progress<ialog = Irogress<ialog show3Camon t3is0 get)tring3' string espere50 get)tring3' string descargandonoticias50true0true5C progress<ialog setOnCancel"istener3new OnCancel"istener35 B DOverride public void onCancel3<ialog=nter!ace dialog5 B tarea cancel3true5C E E5C E DOverride protected void onCancelled35 B super onCancelled35C noticiasAdapter clear35C noticias<escargadas = new Arra*"ist<Noticia>35C E DOverride protected void onIrogress4pdate3)tring progreso5 B super onIrogress4pdate3progreso5C progress<ialog setMessage3progresoJ.K5C noticiasAdapter noti!*<ata)etChanged35C E DOverride protected void onIost%xecute3"ist<Noticia> result5 B super onIost%xecute3result5C for3Noticia n:noticias<escargadas5B noticiasAdapter add3n5C E noticiasAdapter noti!*<ata)etChanged35C progress<ialog dismiss35C if3error5B Goast make9e1t3context0 ' string errordered0 Goast !+':9*_!8':5 show35C E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-22

Formacin en Tecnologas Java

A"%nc7a"8 : doIn<ac8)round(
NtiliAare#os /#l?ull?arser para trocear el docu#e!to /ML'
DOverride protected "ist<Noticia> do=n1ac@ground34'" params5 B tr! B 4'" url = paramsJ.KC noticias<escargadas = new Arra*"ist<Noticia>35C LmlIullIarser+actor* parserCreator = LmlIullIarser+actor* new&nstance35C LmlIullIarser parser = parserCreator newIullIarser35C parser set=nput3url open)tream350 null5C int parser%vent = parser get%ventG*pe35C int n=tems = .C w3ile 3parser%vent &= LmlIullIarser +'5_58#)$+'95 B switc3 3parser%vent5 B // %xaminar la in!ormaci(n parseada // E parser%vent = parser next35C E E catc3 3%xception e5 B "og e37Net70 7%rror in networ@ call70 e5C error = trueC E return noticias<escargadasC E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-2$

Formacin en Tecnologas Java

In4ormacin a par"ear
Cdigo )ue!te descargado de http://:::'tuca#o!'es/:elco#e/rssO)or#atPrss
<?xml version="1.0" encoding=")96-8"?> <rss xmlns:atom="http://www.w;.org/300</%tom" version="3.0"> <channel> <atom:lin@ t*pe="application/rss 1ml" rel="self" hre!="http://www.tucamon.es/contenido/rss"/> <title>+eed de artMN-OPCculos</title> <lin@>http://www tucamon es/</lin@> <description>+eed de artMN-OPCculos</description> <language>esA%)</language> <item> <title>IresentaciMN-QOCn de "os 8apatos de tacMN-QOCn roRos</title> <description>MltCpMgtC%l MltCstrongMgtC MltCimg alt=MSuotCTapatosMSuotC src=MSuotC/photo>posts/..../UQVO/8apatos Rpg?/-WO./Q-O.MSuotC /MgtC</description> <author>3Chivone5</author> <pu,<ate>;ed0 -- <ec -./. //:QV:XP Y./..</pu,<ate> <lin@>/contenido/presentacionAdeAlosA8apatosAdeAtaconAroRos</lin@> <guid>/contenido/presentacionAdeAlosA8apatosAdeAtaconAroRos</guid> </item> <item> <title><A+O'MA inaugura su exposiciMN-QOCn en CAMON Madrid</title> <description>MltCpMgtC%l colectivo <A+orma presentMampCoacuteC en CAMONMampC </description> <author>3)ilvia MuMN-Q/Co8 HarcMN-OPCa5</author> <pu,<ate>Gue0 -/ <ec -./. /W:XV:QP Y./..</pu,<ate> <lin@>/contenido/dA!ormaAemuloAexposicionApaisaReAterro</lin@> <guid>/contenido/dA!ormaAemuloAexposicionApaisaReAterro</guid> </item>

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-2'

Formacin en Tecnologas Java

&l 2ucle del 6ml#ull#ar"er


w3ile 3parser%vent &= LmlIullIarser +'5_58#)$+'95 B switc3 3parser%vent5 B case LmlIullIarser /9%,9_9%:: )tring tag = parser getName35C if 3tag eSuals=gnoreCase37item755 B pu,lishIrogress3get)tring3' string descargandonoticia5Y7 7Y3YYn=tems55C Noticia noticia = new Noticia35C parser%vent = parser next35C boolean itemClosed = falseC w3ile 3parser%vent &= LmlIullIarser +'5_58#)$+'9 MM &itemClosed5 B switc3 3parser%vent5 B case LmlIullIarser /9%,9_9%:: tag = parser getName35C if 3tag eSuals=gnoreCase37title755 B noticia setGitulo3parser nextGext355C E if 3tag to"owerCase35 contains37pu,date755 B noticia set+echa3parser nextGext355C E if 3tag eSuals=gnoreCase37lin@755 B noticia set"in@3),!_.%/+Yparser nextGext355C E if 3tag eSuals=gnoreCase37description755 B )tring textoZtml = parser nextGext35C )panned texto = Ztml from*tml3textoZtml0 new =mageHetter350 null5C noticia set<escripcion3texto5C )tring lin@=magen = ),!_.%/+Yimage)ourceC noticia set"in@=magen3lin@=magen5C E brea'C case LmlIullIarser +'5_9%:: tag = parser getName35C if3tag eSuals=gnoreCase37item755B itemClosed = trueC noticias<escargadas add3noticia5C E brea'C E parser%vent = parser next35C E E brea'C E parser%vent = parser next35C E

)tring image)ource=nullC class =mageHetter implements Ztml =mageHetter B public <rawa,le get<rawa,le3)tring source5 B image)ource = sourceC return new 1itmap<rawa,le35C E EC

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-2*

Formacin en Tecnologas Java

#rimer prototipo
Tras descargar las !oticias de-e #ostrarlas e! la ta-la (l )or#ato es el i!dicado por )ila'<#l y el adaptador 5ue he#os i#ple#e!tado'
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-2+

Formacin en Tecnologas Java

De"car)a de im=)ene"
ACadi#os a Noticia u! #Itodo 5ue descarga la i#age! de la !oticia* dada u!a NRL
public class Noticia B private )tring tituloC private )panned descripcionC private )tring lin@C private )tring !echaC private )tring lin@=magenC private <rawa,le imagenC // public void load=magen3)tring url5 t3rows Mal!ormed4'"%xception0 =O%xceptionB =nput)tream is = 3=nput)tream5 new 4'"3url5 getContent35C imagen = <rawa,le create6rom/tream3is0 7src75C E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-2,

Formacin en Tecnologas Java

De"car)a de im=)ene" en "e)undo plano

private class Garea<escarga=magen extends As*ncGas@<"ist<Noticia>0 )tring0 <rawa,le>B DOverride protected <rawa,le do=n1ac@ground3"ist<Noticia> arg.5 B "ist<Noticia> noticias = arg.J.KC int imagenes)inCargar = noticias si8e35C w3ile3imagenes)inCargar > .5B imagenes)inCargar = noticias si8e35C for3Noticia n:noticias5B if3n get=magen35==null [[ n get=magen35 get=ntrinsicZeight35 <= .5B // 'eintento necesario? tr!B n load=magen3n get"in@=magen355C pu,lishIrogress3775C Ecatc33%xception e5B n set=magen3get'esources35 get<rawa,le3' drawa,le icon55C E EelseB imagenes)inCargar AAC E E tr! B Ghread sleep3/...5C E catc3 3=nterrupted%xception e5 B E E return nullC E DOverride protected void onIost%xecute3<rawa,le result5 B super onIost%xecute3result5C Goast make9e1t3context0 get)tring3' string imagenes_descargadas50 Goast !+':9*_/*8,95 show35C noticiasAdapter noti!*<ata)etChanged35C E DOverride protected void onIrogress4pdate3)tring values5 B super onIrogress4pdate3values5C noticiasAdapter noti!*<ata)etChanged35C E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-2.

Formacin en Tecnologas Java

Iniciar la de"car)a
?ode#os i!iciar la descarga de i#0ge!es u!a +eA 5ue las !oticias se haya! cargado'
private class Garea<escarga extends As*ncGas@<4'"0 )tring0 "ist<Noticia>>B // DOverride protected void onIost%xecute3"ist<Noticia> result5 B super onIost%xecute3result5C for3Noticia n:noticias<escargadas5B noticiasAdapter add3n5C E noticiasAdapter noti!*<ata)etChanged35C progress<ialog dismiss35C if3error5B Goast make9e1t3context0 ' string errordered0 Goast !+':9*_!8':5 show35C E lan8a7escar,a7e"ma,enes(); E E void lan8a<escarga<e=magenes35B Garea<escarga=magen tdi = new Garea<escarga=magen35C tdi execute3noticias5C E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-20

Formacin en Tecnologas Java

Men> : el recur"o 6M5


Crea#os u! Ne: A!droid /ML =ile* de tipo #e!1 y lo lla#a#os #e!u'<#l' (l asiste!te lo coloca e! res/#e!u/#e!u'<#l Lo edita#os e i!troduci#os tres ite#s:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@ id/item01" android:title="@string/calla"></item> <item android:id="@ id/item03" android:title="@string/recargar"></item> <item android:id="@ id/item0;" android:title="@string/acerca_de"></item> </menu>

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$0

Formacin en Tecnologas Java

Men> : creacin en la Activit% principal


DOverride public boolean onCreateOptionsMenu3Menu m5 B getMenu=n!later35 in!late3' menu menu0 m5C return trueC E DOverride public boolean onOptions=tem)elected3Menu=tem item5 B switc33item get=tem=d355B case ' id item01: brea'C case ' id item03: lan8a<escarga<eNoticias35C brea'C case ' id item0;: brea'C E return trueC E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$1

Formacin en Tecnologas Java

Di=lo)o ?Acerca de@


case ' id item0;: Alert<ialog 1uilder a,=new Alert<ialog 1uilder3Camon t3is5C a, setGitle3' string acerca_de_camon5C a, set=con3get'esources35 get<rawa,le3' drawa,le icon55C a, setMessage3' string licencia5C a, setIositive1utton3' string aceptar0null5C a, show35C brea'C

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$2

Formacin en Tecnologas Java

Di=lo)o con la noticia


Crea#os u!a clase e! u! )ichero NoticiaAlert.ialog'Ba+a* e! el #is#o pa5uete'
public class NoticiaAlert<ialog extends Alert<ialog 1uilder B private Noticia nC private Context cC /FF F A!ter creating the NoticiaAlert<ialog0 don\t !orget to call show35C F )param context Ghe main Activit* context F )param noticia Noticia o,Rect with in!ormation on Noticia F/ protected NoticiaAlert<ialog3Context context0 Noticia noticia5 B super3context5C n = noticiaC c = contextC t3is setGitle3n getGitulo355C t3is set=con3context get'esources35 get<rawa,le3' drawa,le icon55C t3is setMessage3n get<escripcion355C t3is setNegative1utton3context get)tring3' string atras50 null5C t3is setIositive1utton3context get)tring3' string leemelo50 new <ialog=nter!ace OnClic@"istener35 B DOverride public void onClic@3<ialog=nter!ace dialog0 int which5 B E E5C t3is setNeutral1utton3context get)tring3' string web50 new <ialog=nter!ace OnClic@"istener35 B DOverride public void onClic@3<ialog=nter!ace dialog0 int which5 B E E5C E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$$

Formacin en Tecnologas Java

Mo"trar di=lo)o con la noticia


Lo #ostrare#os al hacer clic; so-re u! ite# de la lista' 2!troduci#os el cdigo e! el liste!er 5ue ya te!3a#os asig!ado a la lista:
list?iew setOn=temClic@"istener3new On=temClic@"istener35 B DOverride public void on=temClic@3Adapter?iew<?> arg.0 ?iew arg/0 int position0 lon, id5 B Noticia n = noticias get33int5id5C NoticiaAlert<ialog nad = new NoticiaAlert<ialog3Camon t3is0 n5C nad show35C E E5C

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$'

Formacin en Tecnologas Java

Cam2io" de orientacin
Cua!do ca#-ia la orie!taci! del #+il de +ertical a horiAo!tal* A!droid la rei!icia para 5ue todos los co#po!e!tes se colo5ue! de !ue+o e! la !ue+a co!)iguraci! de pa!talla' (! co!secue!cia las !oticias se e#pieAa! a cargar de !ue+o' 8ay G #a!eras de e+itarlo:
.esha-ilitarlo: Qacti+ity a!droid:!a#ePRCa#o!R
a!droid:co!)igCha!gesPR;ey-oard8idde!Sorie!tatio!R9

Ocupar!os de recolocar los co#po!e!tes (co#plicado ' 4uardar!os las !oticias para !o +ol+er a -aBarlas'
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-$*

Formacin en Tecnologas Java

Cam2io" de orientacin
public void onCreate31undle saved=nstance)tate5 B // final Arra*"ist<Noticia> data = 3Arra*"ist<Noticia>5 get"astNonCon!iguration=nstance35C if 3data == null5 B noticias = new Arra*"ist<Noticia>35C noticiasAdapter = new NoticiasAdapter3context0 ' la*out fila0 noticias5C lan8a<escarga<eNoticias35C EelseB noticias = dataC noticiasAdapter = new NoticiasAdapter3context0 ' la*out fila0 noticias5C E // E DOverride public O,Rect on'etainNonCon!iguration=nstance35 B final Arra*"ist<Noticia> data = noticiasC return dataC E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$+

Formacin en Tecnologas Java

A2rir el nave)ador 1e2 con un intent


8ay acti+idades 5ue !os proporcio!a el siste#a operati+o* y 5ue puede! ser eBecutadas por #edio de u! 2!te!t' A-ri#os el !a+egador :e- al pulsar el -ot! correspo!die!te:
public class NoticiaAlert<ialog extends Alert<ialog 1uilder B // protected NoticiaAlert<ialog3Context context0 Noticia noticia5 B // t3is setNeutral1utton3context get)tring3' string web50 new <ialog=nter!ace OnClic@"istener35 B DOverride public void onClic@3<ialog=nter!ace dialog0 int which5 B "ntent intent = new "ntent("ntent$#$TI%N!VIE&. 9ri$parse(n$,etLin'())); c$start*ctivit!( intent ); E E5C E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$,

Formacin en Tecnologas Java

ABnte"i" del Ca2la


Se utiliAa la clase Te<tToSpeech Slo se puede utiliAar su #Itodo 'spea;( u!a +eA 5ue ha ter#i!ado su i!icialiAaci! (i#ple#e!tar #Itodo o!2!it ' Ade#0s es !ecesario te!er i!stalado el Te<tToSpeech e! el siste#a operati+o' Se puede hacer u!a co#pro-aci! y si !o est0 i!stalado* la!Aar la acti+idad 5ue o)rece su i!stalaci!' N!a +eA ter#i!ado* hay 5ue lla#ar al #Itodo 'shutdo:!( del o-Beto de clase Te<tToSpeech* para 5ue se li-ere! los recursos !ati+os i!+olucrados'
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-$.

Formacin en Tecnologas Java

ApeecC
Crea#os* e! u! )ichero aparte* u!a clase 5ue e!capsule toda la lgica !ecesaria para utiliAar la s3!tesis del ha-la: Speech'Ba+a
pac'a,e es tucamonC import Rava util "ocaleC import android app Activit*C import android content =ntentC import android speech tts GextGo)peechC import android speech tts GextGo)peech %ngineC import android speech tts GextGo)peech On=nit"istenerC /FF F %ncapsulates some methods !or using GextGo)peech !rom an Activit* F )aut3or 1o*an 1onev0 4niversidad de Alicante F )date <ecem,er -.th0 -./. F/ public class )peech B private Activit* activit*C private GextGo)peech ttsC private static final int 99/_5%9%_#*+#= = /C private )tring textC private boolean isGG)installed = falseC private boolean isGG)initiali8ed = falseC

/FF F Hets the re!erence to the Activit* !or ,eing a,le to call =ntents F )param activit* F/ public )peech3Activit* activit*5B t3is activit* = activit*C E // E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-$0

Formacin en Tecnologas Java

M9todo" de ApeecC
/FF F <oes not assume that GextGo)peech is installed ,ut starts an intent F !or chec@ing whether it is or not Ghe Activit* which calls this F !unction should implement: F protected void onActivit*'esult3int reSuestCode0 int resultCode0 =ntent data5 B F speech installOr)pea@3reSuestCode0resultCode5C F E F )param txt Gext to spea@ F/ public void spea@A!terChec@ing+orGG)3)tring txt5B t3is text = txtC if3isGG)initiali8ed5B tts spea@3txt0 GextGo)peech >)+)+_%550 null5C EelseB =ntent intent = new =ntent3GextGo)peech %ngine %#9&8'_#*+#=_99/_5%9%5C activit* startActivit*+or'esult3intent0 99/_5%9%_#*+#=5C E E /FF F Assumes that GextGo)peech is installed F )param txt Gext to spea@ F/ public void spea@;ithoutChec@ing+orGG)3)tring txt5B tts = new GextGo)peech3activit*0 new On=nit"istener35 B public void on=nit3int status5 B if 3status == GextGo)peech /)##+//5 B "ocale loc = new "ocale37es70770775C if 3tts is"anguageAvaila,le3loc5 >= GextGo)peech !%':_%"%&!%.!+5 tts set"anguage3loc5C tts setIitch3. U!5C tts set)peech'ate3/ /!5C isGG)initiali8ed = trueC //)pea@ this: tts spea@3text0 GextGo)peech >)+)+_%550 null5C E E E5C E /FF F Called a!ter chec@ing !or the installation o! GG) F )param reSuestCode F )param resultCode F/ public void installOr)pea@3int reSuestCode0 int resultCode5B if3reSuestCode == 99/_5%9%_#*+#=5B if 3resultCode == %ngine #*+#=_"8&#+_5%9%_?%//5 B isGG)installed = trueC spea@;ithoutChec@ing+orGG)3text5C E else B =ntent install?oice = new =ntent3%ngine %#9&8'_&'/9%!!_99/_5%9%5C activit* startActivit*3install?oice5C E E E /FF F )hould ,e called in the onIause35 or on)top35 method o! the Activit* F/ public void stop35B if 3tts &= null5 B tts stop35C tts shutdown35C isGG)initiali8ed = falseC E E public boolean isGG)installed35 B return isGG)installedC E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-'0

Formacin en Tecnologas Java


public class Camon extends Activit* B )peech speechC public void onCreate31undle saved=nstance)tate5 B //

U"o de la cla"e ApeecC


La declara#os e! !uestra acti+idad Ca#o! y la i!icialiAa#os e! o!Create( ' ACadi#os el #Itodo o!Acti+ityResult( e i!+oca#os Speech'stop( cua!do Ca#o! ter#i!e su eBecuci!* e! o!Stop( * as3 co#o cua!do se pulse el -ot! Calla del #e!1' Ta te!e#os cu0!do callar* ahora )alta decidir cu0!do ha-lar'
E

speech = new )peech3t3is5C // E protected void onActivit*'esult3int reSuestCode0 int resultCode0 =ntent data5 B speech installOr)pea@3reSuestCode0resultCode5C E DOverride public void on)top35 B speech stop35C super on)top35C E DOverride public boolean onOptions=tem)elected3Menu=tem item5 B switc33item get=tem=d355B case ' id item01: speech stop35C brea'C case ' id item03: lan8a<escarga<eNoticias35C brea'C case ' id item0;: // brea'C E return trueC E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-'1

Formacin en Tecnologas Java

ApeecC en NoticiaAlertDialo)
?ara pro!u!ciar la descripci! de la !oticia al pulsar leer del NoticiaAlert.ialog* le pasare#os por el co!structor el o-Beto speech ya i!icialiAado '
public class NoticiaAlert<ialog extends Alert<ialog 1uilder B private Noticia nC private Context cC private <peec3 s; protected NoticiaAlert<ialog3Context context0 <peec3 speec30 Noticia noticia5 B super3context5C n = noticiaC c = contextC s = speec3; t3is setGitle3n getGitulo355C t3is set=con3context get'esources35 get<rawa,le3' drawa,le icon55C t3is setMessage3n get<escripcion355C t3is setNegative1utton3context get)tring3' string atras50 null5C t3is setIositive1utton3context get)tring3' string leemelo50 new <ialog=nter!ace OnClic@"istener35 B DOverride public void onClic@3<ialog=nter!ace dialog0 int which5 B s$spea'*fter&3ec'in,6or55<(n$,et5itulo()=0$ 0=n$,et7escripcion()); E E5C t3is setNeutral1utton3context get)tring3' string web50 new <ialog=nter!ace OnClic@"istener35 B // E5C E E

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-'2

Formacin en Tecnologas Java

#a"ar ApeecC por el con"tructor


No ol+ide#os pasar el o-Beto speech co#o par0#etro del co!structor de NoticiaAlert.ialog
list?iew setOn=temClic@"istener3new On=temClic@"istener35 B DOverride public void on=temClic@3Adapter?iew<?> arg.0 ?iew arg/0 int position0 lon, id5B Noticia n = noticias get33int5id5C NoticiaAlert<ialog nad = new NoticiaAlert<ialog3Camon t3is0 speec30 n5C nad show35C E E5C

La aplicaci! ya per#ite escuchar u!a descripci! #ie!tras segui#os e<a#i!a!do la lista'


CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-'$

Formacin en Tecnologas Java

#aDuete
?ode#os ge!erar u! pa5uete i!stala-le de prue-a* )ir#0!dolo co! u! certi)icado sel)"sig!ed (!o )ir#ado por !i!gu!a autoridad certi)icadora '
;eytool "ge!;ey "+ ";eystore #ial#ace!';eystore "alias alias!a#e ";eyalg RSA "+alidity $&&&& 2!troduci#os u!a co!traseCa para el al#acI! y otra para el certi)icado (puede ser la #is#a ' (clipse: so-re el proyecto* A!droid tools 9 (<port sig!ed pac;age' Nos pedir0 a-rir el al#acI!* y su co!traseCa'

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-''

Formacin en Tecnologas Java

#ro2ar el paDuete
.e-e#os guardarlo e! el dispositi+o #+il* copi0!dolo por ca-le o e!+i0!dolo por e"#ail'
Si al e!+iar el 'ap; a g#ail* y al i!te!tar a-rirlo da u! error* se puede pro-ar re!o#-r0!dolo a 'AipM e!to!ces el clie!te de g#ail !os per#ite guardarloM le ca#-ia#os el !o#-re a 'ap; (co! u! gestor de archi+os y lo eBecuta#os'

Al eBecutarlo se i!icia el i!stalador 5ue !os ad+ierte 5ue la aplicaci! !ecesita acceso a 2!ter!et'
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante App Android-'*

Formacin en Tecnologas Java

E#re)unta"...F

CAMON Alicante, 11-12 enero 2010

Depto. Ciencia de la Computacin e IA (Univ. Alicante

App Android-'+

También podría gustarte