Está en la página 1de 46

Formacin en Tecnologas Java

CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1
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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2
#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



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

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
Creacin del pro%ecto con &clip"e

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'
A(D Mana)er

Crear !ue+o
dispositi+o
+irtual (A,.

Seleccio!ar la
+ersi! de
A!droid

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-*
&mulador

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-+
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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-,
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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-.
"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://wwwtucamones</string>
<string name="url_rss">http://wwwtucamones/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 wwwtucamones * 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 name="aceptar">Aceptar</string>
<string name="ok">O9</string>
<string name="leemelo">":emelo</string>
<string name="web">;e,</string>
<string name="atras">Atr2s</string>
<string name="espere">%spere</string>
<string name="descargandonoticias"><escargando noticias</string>
<string name="descargandonoticia"><escargando noticia</string>
<string name="imagenes_descargadas">=m2genes descargadas</string>
</resources>

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-0
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



Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-10
la%out3main./ml

2!troduci#os u! List,ie: 5ue ser0 la ta-la


do!de ire#os coloca!do las !oticias de la :e-
de 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>

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-11
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>

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-12
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
superonCreate3saved=nstance)tate5C
setContent?iew3'la*outmain5C
Context = getApplicationContext35C
),!_.%/+ = get)tring3'stringurl_base5C
),!_,// = get)tring3'stringurl_rss5C
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1$
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
superonCreate3saved=nstance)tate5C
setContent?iew3'la*outmain5C
Context = getApplicationContext35C
),!_.%/+ = get)tring3'stringurl_base5C
),!_,// = get)tring3'stringurl_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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1'
Cla"e noticia

Crea#os u!a !ue+a clase


Noticia'Ba+a e! el #is#o
pa5uete
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 Noticia35B
titulo = 77C
descripcion = new )panned)tring3775C
lin@ = 77C
!echa = 77C
lin@=magen = 77C
E
public Noticia3)tring titulo0 )tring !echa0 )panned descripcion0
)tring lin@0)tring lin@=magen5B
t3istitulo=tituloC
t3is!echa=!echaC
t3isdescripcion=descripcionC
t3islin@=lin@C
t3islin@=magen=lin@=magenC
E
public )tring getGitulo35 B
return tituloC
E
public void setGitulo3)tring titulo5 B
t3istitulo = tituloC
E
public )panned get<escripcion35 B
return descripcionC
E
public void set<escripcion3)panned descripcion5 B
t3isdescripcion = descripcionC
E
public )tring get"in@35 B
return lin@C
E
public void set"in@3)tring lin@5 B
t3islin@ = lin@C
E
public )tring get+echa35 B
return !echaC
E
public void set+echa3)tring !echa5 B
t3is!echa = !echaC
E
public )tring get"in@=magen35 B
return lin@=magenC
E
public void set"in@=magen3)tring lin@=magen5 B
t3islin@=magen = lin@=magenC
E
public void set=magen3<rawa,le imagen5 B
t3isimagen = imagenC
E
public <rawa,le get=magen35 B
return imagenC
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1*
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>

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1+
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
t3isnoticias = noticiasC
t3iscontext = 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!laterin!late3'la*outfila0 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
ivset=mage<rawa,le3noticia$,et"ma,en()5C
E
E
return convert?iewC
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1,
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
superonCreate3saved=nstance)tate5C
setContent?iew3'la*outmain5C
Context = getApplicationContext35C
),!_.%/+ = get)tring3'stringurl_base5C
),!_,// = get)tring3'stringurl_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?iewsetOn=temClic@"istener3new On=temClic@"istener35 B

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-1.
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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-10
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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-20
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'" params5 B
return noticias<escargadasC
E
DOverride
protected void onIre%xecute35 B
E
DOverride
protected void onCancelled35 B
E
DOverride
protected void onIrogress4pdate3)tring values5 B
E
DOverride
protected void onIost%xecute3"ist<Noticia> result5 B
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-21
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'

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-22
A"%nc7a"8 : acce"o a inter4a;
DOverride
protected void onIre%xecute35 B
superonIre%xecute35C
noticiasAdapterclear35C
progress<ialog = Irogress<ialogshow3Camont3is0 get)tring3'stringespere50
get)tring3'stringdescargandonoticias50true0true5C
progress<ialogsetOnCancel"istener3new OnCancel"istener35 B
DOverride
public void onCancel3<ialog=nter!ace dialog5 B
tareacancel3true5C
E
E5C
E
DOverride
protected void onCancelled35 B
superonCancelled35C
noticiasAdapterclear35C
noticias<escargadas = new Arra*"ist<Noticia>35C
E
DOverride
protected void onIrogress4pdate3)tring progreso5 B
superonIrogress4pdate3progreso5C
progress<ialogsetMessage3progresoJ.K5C
noticiasAdapternoti!*<ata)etChanged35C
E
DOverride
protected void onIost%xecute3"ist<Noticia> result5 B
superonIost%xecute3result5C
for3Noticia n:noticias<escargadas5B
noticiasAdapteradd3n5C
E
noticiasAdapternoti!*<ata)etChanged35C
progress<ialogdismiss35C
if3error5B
Goastmake9e1t3context0 'stringerrordered0 Goast!+':9*_!8':5show35C
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2$
A"%nc7a"8 : doIn<ac8)round(
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 = parserCreatornewIullIarser35C
parserset=nput3urlopen)tream350 null5C
int parser%vent = parserget%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 = parsernext35C
E
E catc3 3%xception e5 B
"oge37Net70 7%rror in networ@ call70 e5C
error = trueC
E
return noticias<escargadasC
E

NtiliAare#os /#l?ull?arser para trocear el


docu#e!to /ML'

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2'
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/rss1ml" rel="self" hre!="http://www.tucamon.es/contenido/rss"/>
<title>+eed de artMN-OPCculos</title>
<lin@>http://wwwtucamones/</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/8apatosRpg?/-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>


Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2*
&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 = parsergetName35C
if 3tageSuals=gnoreCase37item755 B
pu,lishIrogress3get)tring3'stringdescargandonoticia5Y7 7Y3YYn=tems55C
Noticia noticia = new Noticia35C
parser%vent = parsernext35C
boolean itemClosed = falseC
w3ile 3parser%vent &= LmlIullIarser+'5_58#)$+'9 MM &itemClosed5 B
switc3 3parser%vent5 B
case LmlIullIarser/9%,9_9%::
tag = parsergetName35C
if 3tageSuals=gnoreCase37title755 B
noticiasetGitulo3parsernextGext355C
E
if 3tagto"owerCase35contains37pu,date755 B
noticiaset+echa3parsernextGext355C
E
if 3tageSuals=gnoreCase37lin@755 B
noticiaset"in@3),!_.%/+YparsernextGext355C
E
if 3tageSuals=gnoreCase37description755 B
)tring textoZtml = parsernextGext35C
)panned texto = Ztmlfrom*tml3textoZtml0 new =mageHetter350 null5C
noticiaset<escripcion3texto5C
)tring lin@=magen = ),!_.%/+Yimage)ourceC
noticiaset"in@=magen3lin@=magen5C
E
brea'C
case LmlIullIarser+'5_9%::
tag = parsergetName35C
if3tageSuals=gnoreCase37item755B
itemClosed = trueC
noticias<escargadasadd3noticia5C
E
brea'C
E
parser%vent = parsernext35C
E
E
brea'C
E
parser%vent = parsernext35C
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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2+
#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'

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2,
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'"3url5getContent35C
imagen = <rawa,lecreate6rom/tream3is0 7src75C
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-2.
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 = noticiassi8e35C
w3ile3imagenes)inCargar > .5B
imagenes)inCargar = noticiassi8e35C
for3Noticia n:noticias5B
if3nget=magen35==null [[ nget=magen35get=ntrinsicZeight35 <= .5B // 'eintento necesario?
tr!B
nload=magen3nget"in@=magen355C
pu,lishIrogress3775C
Ecatc33%xception e5B
nset=magen3get'esources35get<rawa,le3'drawa,leicon55C
E
EelseB
imagenes)inCargar AAC
E
E
tr! B
Ghreadsleep3/...5C
E catc3 3=nterrupted%xception e5 B
E
E
return nullC
E
DOverride
protected void onIost%xecute3<rawa,le result5 B
superonIost%xecute3result5C
Goastmake9e1t3context0 get)tring3'stringimagenes_descargadas50 Goast!+':9*_/*8,95show35C
noticiasAdapternoti!*<ata)etChanged35C
E
DOverride
protected void onIrogress4pdate3)tring values5 B
superonIrogress4pdate3values5C
noticiasAdapternoti!*<ata)etChanged35C
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-20
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
superonIost%xecute3result5C
for3Noticia n:noticias<escargadas5B
noticiasAdapteradd3n5C
E
noticiasAdapternoti!*<ata)etChanged35C
progress<ialogdismiss35C
if3error5B
Goastmake9e1t3context0 'stringerrordered0 Goast!+':9*_!8':5show35C
E
lan8a7escar,a7e"ma,enes();
E
E
void lan8a<escarga<e=magenes35B
Garea<escarga=magen tdi = new Garea<escarga=magen35C
tdiexecute3noticias5C
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$0
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>

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$1
Men> : creacin en la
Activit% principal
DOverride
public boolean onCreateOptionsMenu3Menu m5 B
getMenu=n!later35in!late3'menumenu0 m5C
return trueC
E

DOverride
public boolean onOptions=tem)elected3Menu=tem item5 B
switc33itemget=tem=d355B
case 'iditem01:
brea'C
case 'iditem03:
lan8a<escarga<eNoticias35C
brea'C
case 'iditem0;:
brea'C
E
return trueC
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$2
Di=lo)o ?Acerca de@
case 'iditem0;:
Alert<ialog1uilder a,=new Alert<ialog1uilder3Camont3is5C
a,setGitle3'stringacerca_de_camon5C
a,set=con3get'esources35get<rawa,le3'drawa,leicon55C
a,setMessage3'stringlicencia5C
a,setIositive1utton3'stringaceptar0null5C
a,show35C
brea'C

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$$
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<ialog1uilder 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
t3issetGitle3ngetGitulo355C
t3isset=con3contextget'esources35get<rawa,le3'drawa,leicon55C
t3issetMessage3nget<escripcion355C
t3issetNegative1utton3contextget)tring3'stringatras50 null5C
t3issetIositive1utton3contextget)tring3'stringleemelo50 new <ialog=nter!aceOnClic@"istener35 B
DOverride
public void onClic@3<ialog=nter!ace dialog0 int which5 B
E
E5C
t3issetNeutral1utton3contextget)tring3'stringweb50 new <ialog=nter!aceOnClic@"istener35 B
DOverride
public void onClic@3<ialog=nter!ace dialog0 int which5 B
E
E5C
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$'
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?iewsetOn=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 = noticiasget33int5id5C
NoticiaAlert<ialog nad = new NoticiaAlert<ialog3Camont3is0 n5C
nadshow35C
E
E5C

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$*
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'



Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$+
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*outfila0 noticias5C
lan8a<escarga<eNoticias35C
EelseB
noticias = dataC
noticiasAdapter = new NoticiasAdapter3context0 'la*outfila0 noticias5C
E

//
E

DOverride
public O,Rect on'etainNonCon!iguration=nstance35 B
final Arra*"ist<Noticia> data = noticiasC
return dataC
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$,
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<ialog1uilder B
//
protected NoticiaAlert<ialog3Context context0 Noticia noticia5 B
//
t3issetNeutral1utton3contextget)tring3'stringweb50 new <ialog=nter!aceOnClic@"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

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$.
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'

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-$0
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 estucamonC
import Ravautil"ocaleC
import androidappActivit*C
import androidcontent=ntentC
import androidspeechttsGextGo)peechC
import androidspeechttsGextGo)peech%ngineC
import androidspeechttsGextGo)peechOn=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
t3isactivit* = activit*C
E
//
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'0
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 speechinstallOr)pea@3reSuestCode0resultCode5C
F E
F )param txt Gext to spea@
F/
public void spea@A!terChec@ing+orGG)3)tring txt5B
t3istext = txtC
if3isGG)initiali8ed5B
ttsspea@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 3ttsis"anguageAvaila,le3loc5 >= GextGo)peech!%':_%"%&!%.!+5
ttsset"anguage3loc5C
ttssetIitch3.U!5C
ttsset)peech'ate3//!5C
isGG)initiali8ed = trueC
//)pea@ this:
ttsspea@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
ttsstop35C
ttsshutdown35C
isGG)initiali8ed = falseC
E
E
public boolean isGG)installed35 B
return isGG)installedC
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'1
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'
public class Camon extends Activit* B
)peech speechC
public void onCreate31undle saved=nstance)tate5 B
//

speech = new )peech3t3is5C
//
E

protected void onActivit*'esult3int reSuestCode0
int resultCode0 =ntent data5 B
speechinstallOr)pea@3reSuestCode0resultCode5C
E

DOverride
public void on)top35 B
speechstop35C
superon)top35C
E

DOverride
public boolean onOptions=tem)elected3Menu=tem item5 B
switc33itemget=tem=d355B
case 'iditem01:
speechstop35C
brea'C
case 'iditem03:
lan8a<escarga<eNoticias35C
brea'C
case 'iditem0;:
//
brea'C
E
return trueC
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'2
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<ialog1uilder 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;
t3issetGitle3ngetGitulo355C
t3isset=con3contextget'esources35get<rawa,le3'drawa,leicon55C
t3issetMessage3nget<escripcion355C
t3issetNegative1utton3contextget)tring3'stringatras50 null5C
t3issetIositive1utton3contextget)tring3'stringleemelo50 new <ialog=nter!aceOnClic@"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
t3issetNeutral1utton3contextget)tring3'stringweb50 new <ialog=nter!aceOnClic@"istener35 B
//
E5C
E
E

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'$
#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

La aplicaci! ya per#ite
escuchar u!a descripci!
#ie!tras segui#os
e<a#i!a!do la lista'
list?iewsetOn=temClic@"istener3new On=temClic@"istener35 B
DOverride
public void on=temClic@3Adapter?iew<?> arg.0 ?iew arg/0 int position0 lon, id5B
Noticia n = noticiasget33int5id5C
NoticiaAlert<ialog nad = new NoticiaAlert<ialog3Camont3is0 speec30 n5C
nadshow35C
E
E5C

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-''
#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'



Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'*
#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'

Formacin en Tecnologas Java
CAMON Alicante, 11-12 enero 2010 Depto. Ciencia de la Computacin e IA (Univ. Alicante
App Android-'+
E#re)unta"...F

También podría gustarte