Download as pdf or txt
Download as pdf or txt
You are on page 1of 67

Introducci a la programaci

de dispositius mbils
Eduard Garca Sacristn

Programaci multimdia i dispositius mbils


Programaci multimdia i dispositius mbils Introducci a la programaci de dispositius mbils

ndex

Introducci 5

Resultats daprenentatge 7

1 Entorns de desenvolupament daplicacions mbils 9


1.1 El mercat actual daplicacions mbils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.1 Histria dels telfons intelligents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2 Caracterstiques dAndroid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1.3 Google Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 Dispositius mbils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.1 Limitacions en la programaci de dispositius mbils . . . . . . . . . . . . . . . . . . 17
1.3 Entorns de desenvolupament . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.1 Preparant lordinador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.2 Installant lSDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.3 Installant el plugin ADT per a Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3.4 Afegint plataformes i altres components . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.5 Components recomanats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2 Programaci de dispositius mbils 29


2.1 Conceptes previs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.1 Parts duna aplicaci Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2 Components bsics duna aplicaci Android . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.1 Activitats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.2 Serveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.3 Provedors de continguts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.4 Receptors broadcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.5 Activant components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.6 El fitxer AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3 Activitats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.3.1 Treballant amb activitats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.3.2 Cicle de vida duna activitat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.4 Intents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.4.1 Objecte Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.4.2 Resolucions dIntents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.4.3 Filtres dIntents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.5 Interfcie dusuari dAndroid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.5.1 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.5.2 Creaci del layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.5.3 Layouts XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.5.4 Widget i events de teclat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Programaci multimdia i dispositius mbils 5 Introducci a la programaci de dispositius mbils

Introducci

Un dels mercats amb major creixement en els darrers anys ha estat el de lano-
menada telefonia intelligent. Un dels aspectes fonamentals daquesta ha estat
lampli ventall daplicacions disponibles per aquests dispositius, que tenen unes
caracterstiques de maquinari avanades. Android s un dels sistemes operatius
punters en aquest mbit i amb el qual s possible crear aplicacions de manera lliure
i gratuta. En aquesta unitat us endinsareu en la programaci de dispositius mbils
i multimdia en Android.

En lapartat Entorns de desenvolupament daplicacions mbils veureu una


introducci al mn de la programaci de dispositius mbils a lactualitat, les
caracterstiques daquest tipus de programaci i el sistema Android, i com
installar i configurar lentorn de desenvolupament amb el que treballareu la resta
del mdul. Tamb fareu el vostre primer programa.

En lapartat Programaci de dispositius mbils veureu els conceptes bsics que


shan de dominar per poder realitzar aplicacions en dispositius mbils. Estudiareu
el cicle de vida de laplicaci i els components que es fan servir ms habitualment
en les aplicacions dAndroid.

Per seguir els continguts daquest mdul, s convenient anar fent les activitats i
els exercicis dautoavaluaci i llegir els annexos (si nhi ha). Tot i que les unitats
formatives tenen un contingut important des del punt de vista conceptual, sempre
sha procurat donar-los un enfocament prctic en les activitats proposades.
Programaci multimdia i dispositius mbils 7 Introducci a la programaci de dispositius mbils

Resultats daprenentatge

En finalitzar aquesta unitat lalumne/a:

1. Aplica tecnologies de desenvolupament per dispositius mbils avaluant les


seves caracterstiques i capacitats.

Analitza les limitacions que planteja lexecuci daplicacions als


dispositius mbils.
Descriu diferents tecnologies de desenvolupament daplicacions per
dispositius mbils.
Installa, configura i utilitza entorns de treball pel desenvolupament
daplicacions per dispositius mbils.
Descriu configuracions que classifiquen els dispositius mbils segons
les seves caracterstiques.
Descriu perfils que estableixen la relaci entre el dispositiu i laplica-
ci.
Analitza lestructura daplicacions existents per dispositius mbils
identificant les claus utilitzades.
Realitza modificacions sobre aplicacions existents.
Utilitza emuladors per comprovar el funcionament de les aplicacions.

2. Desenvolupa aplicacions per dispositius mbils analitzant i fent servir les


tecnologies i llibreries especfiques.

Genera lestructura de classes necessria per laplicaci.


Analitza i utilitza les classes que modelen finestres, mens, esde-
veniments i controls per al desenvolupament daplicacions grfiques
senzilles.
Realitza proves dinteracci usuari-aplicaci per optimitzar les aplica-
cions desenvolupades a partir demuladors.
Documenta els processos necessaris pel desenvolupament de les apli-
cacions.
Programaci multimdia i dispositius mbils 9 Introducci a la programaci de dispositius mbils

1. Entorns de desenvolupament daplicacions mbils

Recentment, un directiu duna gran companyia dinformtica va profetitzar el


comenament de lpoca post-PC. Un moment en qu els usuaris deixaran de fer
servir els ordinadors tal com els coneixem ara (bsicament ordinadors de taula i
ordinadors porttils) per fer les tasques ms habituals del dia a dia: comunicar-
se (per correu electrnic, missatgeria o videoconferncia), navegar per Internet o
consumir continguts.

Aquest moment ja ha arribat, i la varietat de dispositius que tenim actualment ens


permet realitzar fcilment totes les nostres tasques diries. De fet, la lnia que
separa uns dispositius duns altres cada vegada es fa ms difcil de definir: els
telfons tenen cada vegada pantalles ms grans, al mateix temps que les tauletes
tctils disposen de diferents mides, de forma que la diferncia entre un telfon
gran i una tauleta petita s merament illusria (com la diferncia entre porttils
i netbooks). Per aix, els sistemes operatius i la manera de programar-hi sha
integrat, de forma que tots aquests dispositius mbils multimdia comparteixen
les mateixes caracterstiques i han integrat els mateixos sistemes i programari.

1.1 El mercat actual daplicacions mbils

Avui dia la batalla dels dispositius mbils est ms dactualitat que mai. Apple
va revolucionar el mercat de la telefonia mbil amb el seu iPhone, deixant una
srie de vctimes pel cam com van ser Palm, Windows C i els telfons de Nokia
amb Symbian. Tota la resta del mercat ha estat cercant durant anys lanomenat
iPhone Killer (assass deliPhone) o el telfon que desbancaria el fams telfon
intelligent de la companyia de la poma com a telfon amb ms xit. Finalment, ens
hem trobat que no ha existit tal telfon, sin que lxit daltres plataformes (com
Android) ha consistit en establir tot un ecosistema de dispositius compatibles amb Tot i no vendre tants telfons
qu combatre la quota de mercat dels dispositius Apple. Els altres actors daquesta com altres companyies, els
beneficis dApple superen
competici de mercat (Blackberry de RIM i Windows Phone de la m de Microsoft amb escreix els de les altres
companyies.
i Nokia) tenen la difcil tasca de trobar el seu espai en un mercat on cada vegada
s ms difcil trobar visibilitat.

Actualment, el mercat de fabricants de mbils est copat amb companyies que


obtenen gran part dels seus beneficis de dispositius amb Android: a desembre
de 2011, les tres primeres companyies quant a subscriptors de telfons als Estats
Units (Samsung, LG i Motorola) tenien el 58,6% dels telfons (intelligents i no
intelligents). Aquestes companyies tenen telfons Android com a bandera dels
seus catlegs.

Quant als sistemes operatius dels anomenats telfons intelligents, es pot veure la
quota de mercat el desembre de 2011 a la taula 1.1.
Programaci multimdia i dispositius mbils 10 Introducci a la programaci de dispositius mbils

Taula 1.1. Quota de mercat dels diferents sistemes operatius (desembre de 2011)

Sistema operatiu Quota de mercat

Android 47,3%

iOS 29,6%

Blackberry 16,0%

Windows Phone 4,7%

Symbian 1,4%

Una de les caracterstiques que ms va afianar Apple amb el seu iPhone va ser
la inclusi dun mercat daplicacions integrat al propi dispositiu, on els usuaris
poden cercar, analitzar i comprar aplicacions duna manera molt senzilla. Aquest
ecosistema daplicacions sha demostrat com un dels valors afegits ms importants
en els actuals dispositius mbils, ats que un aparell amb un gran maquinari
t una utilitat molt limitada si no ve acompanyat dun programari que en faci
un servei adequat. En aquest sentit, Google va entendre la importncia de les
aplicacions i ha facilitat la creaci daplicacions i la seva publicaci en llur mercat
daplicacions. Aix, a pesar dhaver llanat la seva plataforma daplicacions ms
tard, la quantitat daplicacions descarregades creix a un ritme molt alt, tal com es
pot veure a la figura 1.1.

Figura 1.1. Aplicacions descarregades des del llanament de la plataforma


Programaci multimdia i dispositius mbils 11 Introducci a la programaci de dispositius mbils

1.1.1 Histria dels telfons intelligents

El mercat de la telefonia mbil va deixar de ser fa temps una promesa per establir-
se com una de les principals formes de comunicaci al mercat de consum actual.
Aix, si en un principi els telfons ens permetien realitzar trucades telefniques
i enviar missatges, a poc a poc shan anat introduint noves caracterstiques i
funcionalitats als dispositius mbils fins arribar al punt actual, on s possible
portar a la butxaca un autntic ordinador personal.

La tecnologia de transmissi sense fils GPRS (General packet radio service,


servei de rdio de paquets general) i WAP (Wireless Application Protocol,
protocol daplicacions sense fil), un protocol estndard per accedir a informaci
a travs de xarxes sense fil, va donar unes primeres funcionalitats de navegaci
web afegides als primers telfons mbils. La poca velocitatdaquelles xarxes i,
sobretot, la insuficient experincia per a lusuari deguda a la falta de pantalles de
qualitat als telfons, van fer que aquestes tecnologies (i els serveis creats per a
elles) no es popularitzessin en excs.

Al final dels anys noranta, la majoria dels telfons encara tenien unes funcionalitats
molt limitades, i aquells usuaris que tenien necessitats ms enll del que podia La primera PDA
La primera PDA de la histria va
oferir el seu telfon tamb carregaven amb un dispositiu tipus PDA (Personal ser la Psion Organizer
desenvolupada lany 1984.
Digital Assistant, assistent digital personal), que oferia funcionalitats avanades, (Psion s una companyia que va
desenvolupar programes per al
com ara: agenda, pantalles tctils, expansi amb targetes de memria, connexi mtic ordinador ZX Spectrum
pels volts dels anys vuitanta).
sense fils i una srie daplicacions prpies de la plataforma. La primera PDA de la Tot i aix, la primera vegada que
histria va ser la Psion Organizer desenvolupada lany 1984 (figura 1.2). Aquestes es va fer servir lexpressi
PDA va ser lany 1992 amb la
PDA portaven un sistema operatiu propi, com per exemple Palm OS, BlackBerry presentaci delApple Newton.

OS o Pocket PC. Les darreres versions daquests sistemes integraven capacitats de


missatgeria i telefonia. Aquests dispositius es podrien anomenar ja smartphones
(telfons intelligents).

Figura 1.2. Psion Organizer, la


primera PDA de la histria
Programaci multimdia i dispositius mbils 12 Introducci a la programaci de dispositius mbils

Un smartphone (telfon intelligent) s un telfon mbil de gamma alta


construt sobre una plataforma mbil amb capacitats i connectivitat superiors
a les que t un telfon convencional.

Encara que el mercat de les PDA estava dominat per lempresa Palm (fabricant
tant del maquinari com del sistema operatiu mbil), Microsoft va treure al mercat
Windows Mobile, basat en la plataforma Pocket PC lany 2000 que, grcies a la
possibilitat de llicenciar-lo per part daltres empreses, va ser molt popular i lany
2007 va obtenir un 42% del mercat.

Justament aquest any 2007, Apple va introduir liPhone (desprs de mesos de


rumors i especulacions), que va revolucionar el mercat de telefonia mbil per
sempre. Moltes de les seves caracterstiques shan convertit en estndards de facto
a la indstria de telefonia mbil, com ara:

Pantalla capacitiva i multitctil

GPS

Teclat en pantalla

Integraci amb alguns serveis de Google, especialment cerca i Google Maps

Connexi de dades permanent mitjanant 3G

I un parell de caracterstiques que no estaven a liPhone original per que es van


afegir ms endavant, com ara:

Aplicacions de tercers

Una botiga daplicacions on trobar totes les aplicacions de forma centralit-


zada (AppStore)
Posicionament global
GPS (Global Positioning System,
sistema de posicionament global) La resta de la indstria va tardar anys en oferir un producte que pogus competir
s un sistema de navegaci basat
en satllits, que proporciona amb liPhone (figura 1.3), i durant anys totes les empreses buscaven treure al mer-
localitzaci i hora en qualsevol
tipus dhoratge, en qualsevol lloc
cat lanomenat iPhone killer (lassass deliPhone, el telfon que el desbancaria
de la terra, si es t visi directa
de quatre o ms satllits GPS.
com a millor telfon del mercat).
Programaci multimdia i dispositius mbils 13 Introducci a la programaci de dispositius mbils

Figura 1.3. LiPhone original

Per el desenvolupament dAndroid va comenar, de fet, abans queliPhone veis


la llum. Google va comprar la companyia Android Inc. el 2005 i la primera
distribuci dAndroid (el sistema operatiu mbil) es va anunciar el 2007 per
lOpen Handset Alliance. Des daleshores, la quantitat de fabricants de telfons
que fan servir Android com a sistema operatiu del seu maquinari (telfons i tauletes
tctils, principalment, encara que existeixen multitud de dispositius que fan servir
Android) ha crescut de forma exponencial. El novembre de 2011 existien ms de
200 milions de dispositius Android, i Google va anunciar que el desembre de 2011
sactivaven ms de 700.000 dispositius Android diaris!

Qui sencarrega de crear


Un tablet (tauleta tctil) s un ordinador porttil, ms gran que un els estndards?
LOpen Handset Alliance (que es
telfon mbil o una PDA, integrat dins duna pantalla tctil plana i podria traduir per Aliana
principalment operat mitjanant la seva pantalla tctil (en lloc dun teclat dauriculars oberts) s un
consorci de 86 empreses de
fsic). Generalment, fa servir un teclat virtual en pantalla o un pen per maquinari, programari i
telecomunicacions dedicades a
introduir text. El primer tablet que va gaudir dun gran xit comercial va avanar estndards oberts per a
dispositius mbils.
ser liPad dApple.

En el moment descriure aquest materials existeixen diverses solucions de sistemes


operatius per a dispositius porttils. En aquesta llista nomenem les quatre ms
importants, encara que la majoria del mercat est dominat per les dues primeres:

Android: desenvolupat per Google i lOpen Handset Alliance. La majoria


de fabricants ms importants tenen telfons i tablets que sexecuten sobre
Programaci multimdia i dispositius mbils 14 Introducci a la programaci de dispositius mbils

Android (Samsung, HTC, Motorola, Sony-Ericsson. . . ). T un 47% del


mercat (dades de novembre de 2011).

iOS: desenvolupat per Apple, est present nicament als productes de la


marca Apple (iPhone, iPad i iPod); aix i tot, t una presncia al 43% del
mercat.

BlackBerry OS, desenvolupat per RIM (Research In Motion), i present


nicament als seus productes; ha baixat molt la seua quota de mercat, fins
al 6% actual.

Windows Phone: desenvolupat per Microsoft i present fonamentalment als


nous telfons que Nokia va presentar a finals de 2011; la seva quota de
mercat s molt petita actualment. El seu futur s incert i shaur de veure
quantes companyies abracen la nova plataforma.

En aquest materials hem decidit fer servir Android (figura 1.4) com a eina de
desenvolupament per les segents caracterstiques:

s un projecte de codi lliure.

s gratut, i les seves eines de desenvolupament tamb ho sn.

En el moment descriure els materials, s (juntament amb Apple iOS) la


plataforma de dispositius mbils ms popular del mercat, amb una previsi
de creixement encara ms gran (s probable que en el futur la quota de
mercat dAndroid sigui encara superior a lactual).

El seu desenvolupament es realitza en Java, llenguatge que els alumnes de


cicles formatius ja hauran treballat en altres mduls del cicle.

Figura 1.4. Logo dAndroid

Per tot aix, pensem que Android s la plataforma ideal per introduir-se en el
desenvolupament de la programaci en dispositius mbils i multimdia.

1.1.2 Caracterstiques dAndroid

Android t una llicncia de codi lliure i est disponible de forma gratuta per als
fabricants per a la seva adaptaci. No existeixen configuracions fixes de maquinari
i programari, encara que Android suporta les segents caracterstiques:
Programaci multimdia i dispositius mbils 15 Introducci a la programaci de dispositius mbils

Missatgeria: suporta SMS (Short Message Service, servei de missatges


curts) i MMS (Multimedia Messaging Service, servei de missatgers mul-
timdia).

Suport de maquinari: accelermetres, cmera, brixola, sensor de proximi-


tat i GPS.

Emmagatzematge: fa servir SQLite, una base de dades relacional ultralleu-


gera, per a lemmagatzematge de dades.

Formats: suporta multitud de formats multimdia (imatges, so, vdeo. . . ).

Flash: els dispositius Android tenen suport dAdobe Flash.


Adobe Flash
Adobe Flash (anteriorment
Connectivitat: suporta xarxes GSM/EDGE, CDMA, UMTS, Bluetooh, Wi- Macromedia Flash) s una
plataforma multimdia usada per
fi i WiMAX. afegir animaci, vdeo i
interactivitat a les pgines web.
Es fa servir habitualment per a
animacions, anuncis i jocs dins
de les pgines web.
En aquests moments, Android es fa servir en multitud de dispositius, com ara
telfons intelligents, tablets, lectors de llibres electrnics, netbooks, reproduc-
torsdMP3 i MP4, televisors. . .

LAndroid OS (sistema operatiu dAndroid) est dividit en cinc seccions. De la


capa ms baixa a la ms alta sn les segents:

El kernel de Linux: sobre el qual est basat Android. Aquesta capa


cont tots els drivers de dispositius (a baix nivell) per als components de
maquinari del dispositiu Android.

Llibreries (biblioteques de funcions): cont el codi que proporciona les


caracterstiques principals de lAndroid OS. Per exemple, les biblioteques
de funcions de Webkit proporcionen funcionalitats de navegaci web, i les
dSQLite daccs a bases de dades.

Android Runtime: est al mateix nivell que les llibreries i proporciona una
srie de llibreries fonamentals que permeten als desenvolupadors escriure
aplicacions dAndroid fent servir Java. El runtime dAndroid tamb inclou
la mquina virtual Dalvik, que permet a cada aplicaci Android executar-se
en el seu propi procs (que s una instncia daquesta mquina virtual). Les
aplicacions Android estan compilades en executables Dalvik.

Framework daplicacions:proporciona les diferents caracterstiques de


lAndroid OS a les aplicacions dels desenvolupadors, de forma que les poden
fer servir a les seves aplicacions.

Aplicacions: a la capa ms alta, hi trobem les aplicacions que es distribu-


eixen amb el dispositiu Android (com telfon, contactes, navegador, etc.),
aix com altres aplicacions que es descarreguen i installen des de lAndroid
Market. Les aplicacions que escriurem estaran situades en aquesta capa.
Programaci multimdia i dispositius mbils 16 Introducci a la programaci de dispositius mbils

1.1.3 Google Play

Un dels factors fonamentals que determinar lxit duna plataforma mbil s la


quantitat daplicacions que t. Aix va quedar demostrat amb liPhone dApple i el
seu ecosistema daplicacions. De la mateixa manera, el fet que sigui fcil publicar
les seves aplicacions per als desenvolupadors i fcil comprar-les per als usuaris
determinar la facilitat amb qu creixer el mercat daplicacions.

Lagost del 2008, Google va anunciar lAndroid Market, el seu propi mer-
cat daplicacions, que va ser rebatejat com a Google Play el mar de 2012
(https://play.google.com/store). Els usuaris poden descarregar aplicacions de
tercers directament des del seu dispositiu (a travs de laplicaci Play Store, preins-
tallada a la majoria de dispositius Android). Google Play disposa daplicacions
gratutes i de pagament.

El cicle de vida duna aplicaci dAndroid es podria definir de la segent manera:

1. Descobriment de laplicaci, tant des de Google Play (el ms habitual) com


daltra forma.

2. Descrrega i installaci de laplicaci.

3. Execuci de laplicaci.

4. Actualitzaci de laplicaci si existeixen versions ms modernes (opcional).

5. Desinstallaci de laplicaci.

1.2 Dispositius mbils

En primer lloc, hem de determinar qu s programaci per a dispositius mbils i,


per tant, qu considerem com a dispositiu mbil. En general, considerem que un
dispositiu s mbil si t les segents caracterstiques:

T una mida reduda i un pes lleuger. Per tant, la mobilitat s una de les seves
principals caracterstiques. Idealment, s un dispositiu que es pot portar a
la butxaca o a una bossa petita i que es pot fer servir rpidament.

T una connexi sense fils contnua en forma de connexi WiFi o connexi


a Internet permanent fent s de les xarxes de telefonia.

T una alta capacitat dinteracci amb lusuari mitjanant una pantalla tctil
o una pantalla i un teclat.

T capacitat de processament i memria interna.


Programaci multimdia i dispositius mbils 17 Introducci a la programaci de dispositius mbils

Aix, considerem dispositius mbils els telfons mbils, els telfons intelligents
(smartphones), les PDA i els tablets. Descartem els ordinadors porttils com a
dispositius mbils, ats que donades les seves dimensions i pes sn dispositius
que no es poden portar a la butxaca.

1.2.1 Limitacions en la programaci de dispositius mbils

Els dispositius mbils tenen unes caracterstiques particulars quant a les seves
capacitats de processament i memria. El fet que aquests dispositius siguin
principalment mbils i, per tant, dunes dimensions i pes reduts, determina
les seves caracterstiques de maquinari. Principalment, les seves limitacions,
comparats amb els dispositius de taula, sn les segents:

La seva capacitat de processament s reduda.

La quantitat de memria s reduda (RAM i demmagatzematge).

Les dimensions del dispositiu sn redudes, i per tant el maquinari dinte-


racci amb lusuari (pantalla i teclat) s redut.

Solen tenir una connexi permanent a Internet, i per tant sha de donar
especial importncia a la seguretat.

La connexi a Internet, si s mbil, t una velocitat limitada i desconnexions


freqents.

Totes aquestes caracterstiques es van millorant a poc a poc, i els nous dispositius
cada vegada tenen ms capacitat de processament, ms memria, pantalles ms
grans i millors connexions a Internet. Aix i tot, sempre aniran per darrere dels
ordinadors de taula, i per tant shan de tenir en compte les seves caracterstiques
quan programem sobre aquests dispositius.

1.3 Entorns de desenvolupament

El primer pas abans de comenar a desenvolupar programes per a dispositius


mbils s installar lAndroid SDK (Software Development Kit, equip de desen-
volupament de programari) i preparar lentorn de desenvolupament per primera
vegada.

Aquests passos poden canviar amb el temps, i estan especificats a la web dAndroid
(developer.android.com/sdk/installing.html); per tant, es recomana revisar que el
procediment segueix sent vlid.

Es poden desenvolupar aplicacions per a dispositius mbils amb Android des de


qualsevol sistema operatiu (GNU/Linux, MacOS, MS Windows) i amb diversos
Programaci multimdia i dispositius mbils 18 Introducci a la programaci de dispositius mbils

entorns de desenvolupament; els ms populars sn Eclipse i Netbeans. Escollirem


per als materials desenvolupar amb Ubuntu 10.04 LTS (Long Term Support, les
versions LTS sn suportades durant quatre anys per Ubuntu) i Eclipse. Eclipse
s lIDE (Integrated Development Environment, entorn de desenvolupament in-
tegrat) suportat oficialment per Google per al desenvolupament dAndroid, i per
tant s el que farem servir.

1.3.1 Preparant lordinador

En primer lloc, heu de confirmar que el vostre ordinador compleix els reque-
riments del sistema per desenvolupar en Android. Hem de dir que les exign-
cies sobre les caracterstiques de la mquina sn elevades (especialment per a
lexecuci del simulador). Els requeriments del sistema poden canviar al llarg
del temps. Podeu trobar els requeriments actualitzats a la web oficial dAndroid:
developer.android.com/sdk/requirements.html.

Els sistemes operatius han de ser, com a mnim (requeriments a abril de 2012):

A Ubuntu, una versi 8.04 o posterior. Tamb requereix tenir la biblioteca


de funcions GNU C Library (glibc), 2.7 o posterior.

A Mac OS X, una versi 10.5.8 o posterior.

A Windows, versions XP, Vista o Windows 7.

Entorn de desenvolupament suportat, Eclipse IDE:

Eclipse IDE 3.6 o posterior.

Plugin JDT per a Eclipse. Existeixen diferents versions dEclipse per a cada
plataforma. Per desenvolupar aplicacions Android es recomana una deles
segents:

Eclipse IDE for Java Developers


Eclipse Classic
Eclipse IDE for Java EE Developers

JDK 6 (Java Development Kit, equip de desenvolupament de Java). Amb el


JRE (Java Runtime Environment, entorn dexecuci de Java) no s suficient.

ADT (Android Development Tools, eines de desenvolupament dAn-


droid) recomanat.

La forma dinstallar lentorn de desenvolupament tamb pot canviar amb


les noves versions, per tant es recomana donar una ullada a la p-
gina oficial dAndroid per veure les instruccions dinstallaci: develo-
per.android.com/sdk/installing.html.
Programaci multimdia i dispositius mbils 19 Introducci a la programaci de dispositius mbils

Per installar el JDK a Ubuntu, de nou podeu revisar la darrera informaci


continguda a la documentaci oficial: https://help.ubuntu.com/community/Java

Per defecte, la mquina de Java dOracle ja no est distribuda amb Ubuntu


per problemes de llicncies. Les versions actuals dUbuntu porten installada
OpenJDK.

Podeu descarregar el JDK des de la pgina oficial dOracle. Tot i Lobjectiu principal del
que ja es troba disponible la versi 7, al web dAndroid encara hi projecte OpenJDK s
produir una implementaci
recomanen el JDK 6, i per tant aquest s el que descarregareu de: de codi obert de la
plataforma Java Standard
www.oracle.com/technetwork/java/javase/downloads/jdk-6u30-download- Edition.

1377139.html.

Podeu comprovar quina versi de Java teniu installada amb la comanda java Per comprovar quina versi
de Java teniu installada, feu
-version. Ubuntu ve en moltes ocasions amb la versi OpenJDK, que no s tan servir la comanda java
-version.
rpida ni ptima per treballar amb Eclipse; per tant, es recomana que feu servir la
versi de Sun.

Una vegada descarregat, el podeu trobar a la carpeta de baixades, tal com es veu
a la figura 1.5.

Figura 1.5. Installador de Java descarregat

Per poder installar-lo, primer li doneu permisos dexecuci amb sudo chmod
777 ./nom_del_fitxer,i a continuaci executeu amb ./nom_del_fitxer. Aix us
descomprimir una srie de paquets .rpm dinstallaci, com es veu a la figura 1.6.

Figura 1.6. Els paquets RPM una vegada descomprimits

Com que per defecte els fitxers RPM no sn per treballar amb sistemes Ubuntu, els Podeu installar alien o
podeu convertir a fitxers .deb o installar-los directament amb el programa alien qualsevol altre programa
amb sudo apt-get install
amb la comanda sudo alien -i nom_paquet. nom_programa.

Una altra forma dinstallar-lo s actualitzant els repositoris del sistema amb
la comanda sudo add-apt-repository deb http://archive.canonical.com/
lucid partner i sudo apt-get update.

Una vegada actualitzat el repositori, el podeu installar amb sudo apt-get install
sun-java6-jdk i actualitzar amb sudo update-java-alternatives -s java-6-sun.

Per installar Eclipse el podeu descarregar daquesta adrea:


Programaci multimdia i dispositius mbils 20 Introducci a la programaci de dispositius mbils

www.eclipse.org/downloads/

Google recomana la versi Eclipse Classic. En general, la versi 32 bits s


adequada i sol estar ms testada que la de 64 bits. Una vegada descarregat el fitxer,
el podeu descomprimir amb sudo tar xzvf nom_fitxer.tar.gz. Aix us crear una
carpeta per a lEclipse. Per executar Eclipse simplement entreu a la carpeta i
executeu ./eclipse. Heu de veure el programa en execuci tal com sobserva a la
figura 1.7.

Figura 1.7. Eclipse la primera vegada que sexecuta.

1.3.2 Installant lSDK

El paquet dinicidSDK (Software Development Kit starter package, paquet dinici


de lequip de desenvolupament de programari) inclou les eines per descarregar la
resta de components dAndroid (com la darrera versi de la plataforma dAndroid).

Podeu descarregar la darrera versi de la pgina de descrrega delSDK a ladrea


developer.android.com/sdk/index.html.

La versi per a Ubuntu s un fitxer comprimit amb extensi .tgz; el podeu


descomprimir amb sudo tar xzvf nom_fitxer.tgz. En descomprimir-lo, es crear
un directori android-sdk-linux. Moveu aquest directori on el vulgueu tenir
definitivament i recordeu aquesta adrea del directori, ja que necessitareu referir-
vos-hi desprs, quan configureu el plugin ADT i quan feu servir les eines de lSDK
des de la lnia de comandes.
Programaci multimdia i dispositius mbils 21 Introducci a la programaci de dispositius mbils

1.3.3 Installant el plugin ADT per a Eclipse

Android t un plugin especfic per a lIDE dEclipse anomenat ADT(Android


Development Tools, eines de desenvolupament dAndroid), dissenyat per oferir un
entorn de desenvolupament integrat on desenvolupar aplicacions dAndroid. Sn
uns afegits per a lEclipse que us permetran fer el segent:

Crear projectes dAndroid.

Dissenyar la interfcie dusuari.

Depurar les aplicacions Android amb les eines de lSDK.

Exportar aplicacions per distribuir-les.

Tot i que es pot fer daltres maneres, desenvolupar en Eclipse amb ADT s una
aproximaci molt recomanable de programar per a Android.

Podeu trobar la darrera documentaci de com installar lADT en la documentaci


oficial a ladrea developer.android.com/sdk/eclipse-adt.html#installing.

Per descarregar el plugin ADT feu servir lUpdate Manager (gestor dactualitza-
cions) de lEclipse.

Una vegada dins lEclipse, entreu a Help/Install New Software. Afegiu una nova
localitzaci on trobar el programari, prement el bot Add que es troba dalt a la
dreta. El dileg que apareix el podeu veure a la figura 1.8.

Figura 1.8. Afegint repositoris


Programaci multimdia i dispositius mbils 22 Introducci a la programaci de dispositius mbils

Connexi segura? En aquest dileg introduu ADT plugin com a nom i el segent URL en la
Si teniu problemes en aconseguir
el plugin ADT, podeu provar de
localitzaci https://dl-ssl.google.com/android/eclipse/. Feu clic a OK.
fer servir el protocol http en lloc
dhttps simplement canviant una Seleccioneu el checkbox al costat de Developers Tools a la llista de programari
paraula per laltra al
comenament de ladrea. disponible i feu clic a Next (segent).

s possible que tingueu problemes en aquest punt per installar


les ADT. Els possibles problemes sn molts, i no podem donar la
soluci a tots als materials. Aix que, en cas de dubte, recomanem
fer una cerca dins les pgines de documentaci dAndroid (develo-
per.android.com/resources/faq/troubleshooting.html#installeclipsecomponents).
Una causa possible derror s que no tots els components dEclipse estiguin
actualitzats. En aquest cas, s probable que al segent dileg dEclipse hi trobeu
aquest missatge derror:

1 Software being installed: Android Development Tools 11.0.0.v201105251008128486


2 (com.android.ide.eclipse.adt.feature.group 11.0.0.v201105251008128486) Missing
3 requirement: Android Development Tools 11.0.0.v201105251008128486 (com.android
.
4 ide.eclipse.adt.feature.group 11.0.0.v201105251008128486) requires org.
eclipse
5 .wst.sse.core 0.0.0 but it could not be found

Per solucionar-ho, cal actualitzar primer els repositoris de lEclipse i actualitzar


els seus paquets. Per aix heu de cancellar la installaci de lADT i afegir el
repositori de la vostra versi dEclipse, tal com heu fet abans:

Aneu a Help/Install New Software.

Afegiu el repositori (per a la versi 3.7 dEclipse).


Nom: Indigo.
URL: download.eclipse.org/releases/indigo. En aquest moment sactualit-
zaran els paquets (pot tardar uns minuts).

Per a lexemple del missatge derror heu de seleccionar el checkbox de


lltim paquet de la llista (Web, XML, Java EE and OSGi Enterprise
Development) i fer clic a Next.

Veureu una llista dels elements a installar. Accepteu els termes de la


llicncia i feu clic a Finish per installar el programari. Pot tardar uns minuts
a fer la installaci.

Una vegada finalitzat, reinicieu Eclipse.

Torneu a intentar la installaci del plugin ADT.

Una vegada fet tot aix, tornem al punt de la installaci on ho havem deixat. En
aquest punt haureu de veure un dileg amb la llista delements que sinstallaran
i cap tipus dincidncia a la caixa de baix on diu Details, com es pot veure a la
figura 1.9. Feu clic a Next.
Programaci multimdia i dispositius mbils 23 Introducci a la programaci de dispositius mbils

Figura 1.9. Preparaci de la installaci correcta

En el segent dileg, accepteu els termes de la llicncia i feu clic a Finish per
installar els paquets. Aquesta operaci pot tardar uns minuts.

Si us pregunta si voleu installar alguns dels paquets que no estan signats (dileg
de la figura 1.10), contesteu que s. Una vegada installat, reinicieu Eclipse.

Figura 1.10. Dileg de seguretat

Una vegada reiniciat lEclipse, heu de configurar les preferncies delADT perqu
apunti al directori delSDK dAndroid (el directori que us hem demanat abans que
apunteu). Quan inicieu Eclipse, el primer que veureu ser un dileg com el de la
figura 1.11.
Programaci multimdia i dispositius mbils 24 Introducci a la programaci de dispositius mbils

Figura 1.11. Selecci dAPI dAndroid a installar

Podeu seleccionar si voleu installar un SDK nou:

La darrera versi dAndroid.

La versi 2.1, que est suportada pel 97% dels dispositius Android.

Tamb podeu fer servir la versi de lSDK que heu installat amb anterioritat
(per aix haureu dintroduir el directori on es trobalSDK que heu installat
anteriorment).

Per veure totes les formes dinstallaci, installareu de nou lSDK des del mateix
ADT (aquesta opci no existia en versions anteriors). Si b s cert que amb
la versi 2.1 dAndroid podreu fer prcticament qualsevol tipus daplicaci,
seleccioneu installar les dues versions (la ms nova i la 2.1). Feu clic a Next.
En el segent dileg us pregunta si voleu enviar estadstiques a Google de ls
de lSDK dAndroid per tal de millorar-lo en properes versions. Podeu escollir
lopci que preferiu i feu clic a Finish. Aix installar les versions de lSDK que
heu escollit.

1.3.4 Afegint plataformes i altres components

Lltim pas per configurar lSDK s fer servir lSDK dAndroid i lAVD Manager
(una eina inclosa a lSDK) per descarregar els components de lSDK essencials
per al nostre entorn de desenvolupament.
Programaci multimdia i dispositius mbils 25 Introducci a la programaci de dispositius mbils

LSDK fa servir una estructura modular que en separa les principals parts, els
afegits, les eines, els exemples i la documentaci en components installables
de forma separada. El SDK Starter Package que heu installat (paquet de
comenament dSDK) inclou nicament la darrera versi de les eines de lSDK.
Podeu descarregar altres components (com les darreres versions de la plataforma
dAndroid quan es publiquen).

Podeu executar lAndroid SDK and AVD Manager duna de les segents maneres:

1. Des dEclipse, seleccioneu Window/Android SDK Manager.

2. Des de la consola, entreu dins del directori /tools dins del directori de lSDK
dAndroid i executeu ./android.

Veureu un dileg com el de la figura 1.12.

Figura 1.12. Paquets a installar

Des daqu podeu seleccionar els components que voleu installar o actualitzar.

Aquesta s una petita descripci dels components que hi podeu trobar:

SDK Tools: cont les eines per comprovar i depurar les aplicacions
Android. Aquestes eines estan installades juntament a lSDK dAndroid
i reben actualitzacions peridiques. Es troben a la carpeta /tools dins de la
carpeta dinstallaci de lSDK.

Android SDK Platform-tools (eines de plataforma de lSDK dAndroid):


cont eines per desenvolupar i depurar laplicaci dependents de la plata-
forma. Suporten les ltimes caracterstiques de la plataforma Android i, en
general, sactualitzen nicament quan hi ha una nova plataforma disponible.
Es troben a la carpeta /platform-tools dins de la carpeta dinstallaci de
lSDK.
Programaci multimdia i dispositius mbils 26 Introducci a la programaci de dispositius mbils

Plataformes Android: hi ha plataformes de lSDK disponibles per cada


versi dAndroid disponible. Cada plataforma Android cont una llibreria
completa dAndroid, imatges del sistema, codi dexemple i skins de lemu-
lador (les diferents pells que simulen laparena externa dels dispositius,
telfons, quan se simulen).

Samples: cont el codi dexemple i les aplicacions disponibles per a cada


plataforma de desenvolupament dAndroid. Si esteu comenant a desenvo-
lupar amb Android, assegureu-vos de descarregar els samples (exemples).

Documentaci: cont una cpia local de la darrera documentaci de lAPI


(Applicacion Programming Interface, interfcie de programaci daplicaci-
ons) dAndroid.

Els afegits de tercers (Third party Add-ons) proporcionen components que per-
meten la creaci dun entorn de desenvolupament fent servir una llibreria externa
dAndroid especfica (com, per exemple, la llibreria de Google Maps) o una imatge
de sistema dAndroid feta a mida (en angls, customized).

1.3.5 Components recomanats

La mateixa Google recomana la installaci de certs components per comenar


amb el desenvolupament dAndroid.

En un entorn bsic de desenvolupament hem de tenir, com a mnim:

SDK Tools: quaninstallem lStarter Package ja lhaurem installat.

SDK Platform-tools: quan installem lStarter Package ja lhaurem ins-


tallat.

SDK Platform: heu de descarregar almenys una plataforma de lSDK al


vostre entorn de treball. Daquesta manera podreu compilar laplicaci i
configurar un Android Virtual Device (AVD, dispositiu virtual Android)
per executar-lo a lemulador. Per comenar, descarregueu la darrera versi
de la plataforma i tamb la versi 2.1 (la versi 2.1 s compatible a data
dabril de 2012 amb el 97% dels dispositius Android). Podeu descarregar
ms endavant altres versions per comprovar que el vostre programa s
compatible amb altres versions dAndroid.

Quina versi dAndroid cal fer servir?

Quan desenvolupeu per a Android tindreu el dubte de quina versi de la plataforma feu
servir. Si feu servir la darrera versi disponible, s possible que el vostre programa estigui
disponible nicament per a un percentatge de dispositius reduts del mercat. Per aquest
motiu, s interessant en alguns casos fer servir versions anteriors perqu la vostra aplicaci
sigui compatible amb la major quantitat de dispositius possibles.

La installaci recomanada, a banda daquests tres components que acabem


despecificar, recomana installar:
Programaci multimdia i dispositius mbils 27 Introducci a la programaci de dispositius mbils

Documentation: la documentaci dels components s til perqu us permet


treballar offline (sense connexi) i mirar la informaci de referncia de lAPI
des del mateix Eclipse.

Samples: els exemples de components donen codi que podeu fer servir per
aprendre Android, carregar-lo com a projecte i executar-lo, o, fins i tot,
reaprofitar-lo en els nostres projectes. Existeixen samples (exemples) per
a cada versi de la plataforma, aix que escolliu els que corresponen.

USB Driver: aquest component nicament s necessari si es desenvolupa


des de Windows i tenim un dispositiu Android sobre el qual volem installar
laplicaci per depuraci i testeig. Per a plataformes GNU/Linux i Mac
OSX no cal cap driver especfic.

Per a una installaci completa es pot installar tamb:

Google API: dna a la vostra aplicaci accs a les llibreries externes de


mapes, cosa que far ms senzill mostrar i manipular mapes a la vostra
aplicaci.

Plataformes addicionals de lSDK: si voleu publicar la vostra aplicaci,


haureu de descarregar les versions de la plataforma Android on voleu que la
vostra aplicaci sexecuti. La recomanaci s compilar laplicaci sobre la
versi ms baixa dAndroid que voleu que estigui suportada (per assegurar
la compatibilitat), per comprovar-la (fer els tests) sobre la versi ms
alta on voleu que sexecuti. Podeu comprovar les aplicacions en diferents
plataformes executant-les en un AVD a lemulador dAndroid.

Una vegada installada com a mnim la configuraci bsica dels components de


lSDK, podeu comenar a desenvolupar aplicacions per a Android.

PATH del sistema

Podeu afegir opcionalment ladrea de les carpetes /tools i /platform-toolsdins de la carpeta


de lSDK al PATH del sistema. Daquesta manera, tindreu un accs ms fcil a les eines.
Per afegir les carpetes al PATH heu de consultar la documentaci del vostre sistema
operatiu. En sistemes basats en UNIX (com GNU/Linux i Mac OSX) heu de modificar
el contingut del fitxer .bashrc que es troba a la vostra carpeta dusuari i afegir les carpetes
a la variable PATH; per exemple:

1 PATH=${PATH}:/home/usuari/androidsdk/tools:/home/usuari/android
sdk/platformtools
Programaci multimdia i dispositius mbils 29 Introducci a la programaci de dispositius mbils

2. Programaci de dispositius mbils

La programaci de dispositius mbils en Android t unes caracterstiques particu-


lars que la diferencien de la programaci tradicional en equips de taula. La majoria
daquestes caracterstiques vnen donades pel fet que els dispositius mbils tenen
unes prestacions inferiors als equips de taula, i per tant el sistema operatiu ha
hagut dimplementar unes solucions enginyoses per resoldre-les. Daltra banda,
el sistema operatiu i lAPI que es fa servir per a les aplicacions del sistema s nic.
Aquestes aplicacions (a ms a ms) tendeixen a estar molt relacionades entre si.
Per aquest motiu, s important veure en detall la forma de realitzar una aplicaci
i entendre els conceptes bsics de la programaci de dispositius mbils.

2.1 Conceptes previs

Existeixen tota una srie de conceptes que s interessant veure abans de comenar
directament amb la programaci del dispositiu i lexplicaci de les diferents
classes que constitueixen lAPI dAndroid.

2.1.1 Parts duna aplicaci Android

Primer de tot, si heu fet ja una aplicaci bsica (tipus Hola mon), podeu veure
linterior del projecte Android que sha creat i examinar cadascuna de les seves
parts. Obriu el projecte 01 HolaAndroid dels recursos de la unitat. Quan obriu
el projecte amb lEclipse veureu al Package Explorer una srie de fitxers i carpetes
com els que es mostren a la figura 2.1.
Programaci multimdia i dispositius mbils 30 Introducci a la programaci de dispositius mbils

Figura 2.1. Projecte al Package Explorer

La carpeta /src cont els fitxers .java amb el codi del projecte. En aquest cas,
HolaAndroidActivity.java. Aquest fitxer cont el codi de lactivitat. Escriureu el
codi de la vostra aplicaci en aquest fitxer.

La carpeta /gen cont el fitxer R.java, un fitxer generat pel compilador que serveix
de referncia a tots els recursos del vostre projecte. Aquest fitxer no sha de
modificar a m. A mida que es van afegint fitxers a les carpetes de recursos (dins
de la carpeta /res), els noms dels fitxers es van afegint automticament dins del
fitxer R.java.

La biblioteca de funcions (en el cas de la figura 2.1, la versi Android 2.1) cont
un fitxer, android.jar, que disposa de totes les biblioteques de classes necessries
per a una aplicaci Android.

El directori /res cont tots els recursos que es fan servir a laplicaci. Dins hi
ha altres subdirectoris (diferents carpetes drawable per a diferents resolucions,
layout, values). Les carpetes drawable, en aquest moment noms contenen les
icones de laplicaci en diferents resolucions. La carpeta layout cont el fitxer
main.xml. Si lobriu amb leditor de text pla obtindreu un codi com el segent:

1 <?xml version="1.0" encoding="utf8"?>


2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6 <TextView
7 android:layout_width="fill_parent"
8 android:layout_height="wrap_content"
9 android:text="@string/hello" />
10 </LinearLayout>
Programaci multimdia i dispositius mbils 31 Introducci a la programaci de dispositius mbils

Fixeu-vos en el camp android:text=@string/hello. La variable Package Explorer


@string/hello fa referncia a camp hello que es troba al fitxer strings.xml Per obrir els diferents tipus de
fitxers dins del Package Explorer
dins de la carpeta res/values/ del Package Explorer. podeu fer doble clic al fitxer per
fer-ho amb laplicaci per
defecte. Tamb podeu optar per
El fitxer strings.xml cont les diferents cadenes de text que es fan servir al vostre obrir-lo fent clic amb el bot dret
del ratol i escollir lopci Open
projecte. Si lobriu amb leditor de text trobareu un codi semblant a aquest: With/ i el programa que voleu fer
servir. Aix, per exemple, podeu
1 <?xml version="1.0" encoding="utf8"?> obrir un fitxer xml amb leditor
dxml o amb un editor de text
2 <resources> pla.
3 <string name="hello">Hello World, HolaAndroidActivity!</string>
4 <string name="app_name">Hola, Android</string>
5 </resources>

Tot i que podeu ficar els camps de text com cadenes de carcters constants, s
recomanable que deseu totes les constants de text (els textos que apareixeran al
vostre programa) dins del fitxer string.xml i que feu referncia a aquests textos a
partir de lidentificador @string. Daquesta manera, si heu de traduir la vostra
aplicaci a un altre idioma, tot el que necessitareu s traduir els textos del fitxer
strings.xml amb lidioma desitjat i tornar a compilar el projecte.

El directori /assets cont altres recursos que es fan servir a laplicaci, com ara
fitxers de text, bases de dades, etc.

El fitxer AndroidManifest.xml s el fitxer de manifest de laplicaci Android.


Aqu estan especificats els permisos i altres caracterstiques de laplicaci.

2.2 Components bsics duna aplicaci Android

Els blocs principals per construir les vostres aplicacions sn els components que
fareu servir per programar les aplicacions Android. Sn elements conceptuals que
ficareu junts per construir una aplicaci en conjunt:

Activitats.

Serveis.

Provedors de continguts.

Receptors broadcast.

2.2.1 Activitats

Una Activity (activitat) representa una nica pantalla amb una interfcie dusu-
ari. Per exemple, una aplicaci de missatgeria pot tenir una Activity que mostri
la llista de contactes, una altra per enviar missatges i una altra per llegir missatges
rebuts. Tot i que totes aquestes activitats treballen juntes dins de laplicaci de
missatgeria, cadascuna s independent de les altres. A ms a ms, en Android, les
Programaci multimdia i dispositius mbils 32 Introducci a la programaci de dispositius mbils

aplicacions poden activar activitats (pantalles) daltres aplicacions. Per exemple,


laplicaci de missatgeria anterior podria obrir una Activity (una pantalla) de
laplicaci de fotografia per enviar una foto juntament amb un missatge. De la
mateixa manera, laplicaci de fotografia podria obrir lactivitat duna aplicaci
de correu electrnic per enviar la foto com a adjunt dun correu. Una activitat est
implementada com una subclasse de la classe Activity.

Podeu trobar ms informaci sobre la classe Activity a la guia de desenvolupa-


dor dAndroid: developer.android.com/guide/topics/fundamentals/activities.html.

2.2.2 Serveis

Un Service (servei) s un component que sexecuta en el background (en el fons,


que no es veu) per realitzar tasques per a treballs remots.

Els serveis sexecuten en el background i no tenen components dinterfcie dusu-


ari. Poden fer les mateixes coses que una activitat, per no tenen interfcie. Sn
tils per realitzar coses que es volen realitzar durant un temps, independentment de
la pantalla. Per exemple, podeu voler agafar dades del receptor GPS del telfon o
reproduir msica mentre esteu canviant a altres aplicacions. Un altre component,
com una activitat, pot comenar el servei i deixar-lo executant-se o interactuar
amb ell.

Els serveis dAndroid no sn el mateix que els serveis de Linux (tamb anomenats
daemons), que representen un component del sistema operatiu de ms baix nivell.

Els serveis tenen un cicle de vida molt ms senzill que les activitats, com es pot
veure a la figura 2.2.

Figura 2.2. Cicle de vida dun servei

Els serveis, o sengeguen o saturen. A ms a ms, en general el seu cicle de vida


est ms controlat pel programador, i no tant pel sistema.
Programaci multimdia i dispositius mbils 33 Introducci a la programaci de dispositius mbils

Els serveis simplementen com a classes derivades de la classe Service. Podeu


trobar ms informaci a la guia de desenvolupador dAndroid sobre aquesta classe,
a developer.android.com/guide/topics/fundamentals/services.html.

2.2.3 Provedors de continguts

Els content providers (provedors de continguts) sn interfcies per compartir


dades entre les aplicacions. Per defecte, Android executa les aplicacions de forma
independent, de forma que les dades de laplicaci estan allades de la resta dapli-
cacions del sistema. Encara que es poden passar petites quantitats dinformaci
entre les aplicacions a travs dels intents, els provedors de continguts sn ms
adequats per compartir conjunts de dades entre aplicacions.

La informaci es pot inserir, actualitzar, esborrar i consultar dun provedor de


continguts. Android fa servir aquest mecanisme tot el temps. Per exemple, els
provedors de continguts de contactes (Contacts Provider) proporcionen la infor-
maci dels contactes del telfon a diferents aplicacions. Aix, una aplicaci amb
els permisos adequats pot consultar el content provider (ContactsContract.Data)
per llegir i escriure informaci sobre una persona en concret. Un altre exemple,
el Media Store (magatzem de mitjans), emmagatzema i serveix per compartir
diferents tipus de dades, com fotos i msica, entre les diferents aplicacions.

Els content providers tamb sn tils per llegir i escriure dades que sn privades
a la vostra aplicaci i no estan compartides. Per exemple, una aplicaci de bloc
de notes pot fer servir un content provider per guardar notes.

La separaci del magatzem de dades de la interfcie dusuari proporciona molta


flexibilitat a Android. Per exemple, es podria installar una aplicaci alternativa
per visualitzar els contactes, o una aplicaci podria accedir des de lescriptori a al-
gunes de les dades de configuraci del sistema (que tamb estan emmagatzemades
a un provedor de continguts) per modificar algunes en concret, com la dactivar i
desactivar el Wi-Fi.

Els provedors de continguts tenen interfcies relativament senzilles amb mtodes


estndards per inserir, actualitzar, esborrar i consultar, de manera molt semblant
als mtodes daccs a bases de dades.

Un content provider est implementat com una subclasse de ContentProvider i


ha dimplementar una srie dAPI que permeten a altres aplicacions fer transac-
cions. Per a ms informaci podeu consultar la secci de content providers de la
guia de desenvolupador: developer.android.com/guide/topics/providers/content-
providers.html.
Programaci multimdia i dispositius mbils 34 Introducci a la programaci de dispositius mbils

2.2.4 Receptors broadcast

Els broadcast receivers (receptors broadcast) sn un component que respon


a anuncis de sistema que van dirigits a totes les aplicacions del dispositiu
(broadcast). En certa manera, s una implementaci dAndroid dun sistema
de subscripci desdeveniments. El receptor simplement es queda en un estat
latent esperant activar-se quan un esdeveniment al qual est subscrit succeeix.
El sistema est enviant missatges broadcast tota lestona. Per exemple, quan es
rep una trucada, sapaga la pantalla o la bateria t una crrega baixa, tots aquests
esdeveniments sn anunciats pel sistema. Per exemple, si voleu que un servei
quedi engegat una vegada el sistema ha arrancat, podeu subscriure al broadcast
que diu que el sistema ha acabat dengegar-se. Les aplicacions tamb poden enviar
missatges broadcast. Per exemple, una aplicaci pot anunciar que shanacabat de
descarregar algunes dades i que aquestes ja estan disponibles per usar-se.

Els receptors broadcast no tenen una representaci visual, per quan es llancen
executen una part de codi (com engegar una activitat o servei) i poden crear una
notificaci a la barra destat per alertar lusuari quan ha ocorregut un esdeveniment
broadcast.

Un broadcast receiver est implementat com una subclasse de BroadcastRecei-


ver i cada missatge broadcast senvia com un objecte Intent. Podeu trobar
ms informaci a la guia del desenvolupador a lapartat de BroadcastReceiver, a
developer.android.com/reference/android/content/BroadcastReceiver.html.

2.2.5 Activant components

Tres dels quatre tipus de components (activitats, serveis i receptors broadcast)


sactiven per missatges asncrons anomenats intents (intencions). Els intents
lliguen els components individuals entre si en temps dexecuci, tant si els
components pertanyen a la mateixa aplicaci com si no. Podeu pensar en els
intents com missatges que senvien entre si els diferents components de les
aplicacions (i que, de fet, poden servir per activar alguns dells).

Un intent es crea amb un objecte de la classe Intent, que defineixen un missatge


per activar un component especfic (intent explcit) o un tipus de component (intent
implcit).
URI Per activitats i serveis, un intent defineix una acci que sha de realitzar (per
Un URI (Universal Resource
Identifier, identificador de exemple, veure o enviar alguna cosa) i pot especificar lURI de les dades sobre
recursos universal) s una
cadena de carcters que serveix les quals sha dactuar. Per exemple, un intent pot enviar una petici dobrir una
per referenciar recursos en el
sistema. Aquesta identificaci
pgina web i especificar ladrea de la web, per tal que lactivitat corresponent
permet la interacci amb
representacions del recurs en el
pugui obrir la pgina correctament.
sistema. El mtode
Uri.parse(String) serveix per
analitzar i codificar un String en
En altres casos es pot comenar una activitat i esperar rebre un resultat. Per
forma dURI. exemple, es podria comenar una activitat per seleccionar una persona de lagenda
Programaci multimdia i dispositius mbils 35 Introducci a la programaci de dispositius mbils

de contactes, i lactivitat retornaria el resultat en un intent (lintent inclouria lURI


apuntant al contacte seleccionat).

Per als receptors broadcast, un intent simplement defineix lanunci que sest
transmetent; per exemple, un missatge a tot el dispositiu per indicar que la bateria
del dispositiu est baixa inclouria nicament un String indicant aquest anunci.

Els provedors de continguts no sactiven per intents, sin amb peticions dun
ContentResolver (resolutor de continguts). El resolutor de continguts tracta
totes les transaccions directes amb el provedor de continguts, per tal que el
component que el fa servir no ho hagi de fer ell directament. Aix proporciona
una capa dabstracci entre el provedor de contingut i el component que sollicita
la informaci (per seguretat).

Existeixen mtodes diferents per activar cada tipus de component:

Les activitats es poden invocar creant un objecte de la classe


Intent i passar-ho als mtodes startActivity(Intent i) o a
startActivityForResult (Intent i, int requestCode) si voleu
que lactivitat us retorni un resultat.

Es pot comenar un servei passant un intent a startService(Intent


service). Podeu enllaar a un servei passant un intent a bindService
(Intent service, ServiceConnection conn, int flags).

s possible comenar un missatge broadcast passant un intent als mtodes


sendBroadcast (Intent i), sendOrderedBroadcast (Intent
intent, String receiverPermission) o sendStickyBroadcast
(Intent i).

Es pot realitzar una consulta a un provedor de contingut amb una


crida a query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) dun ContentResolver.

Podeu consultar informaci sobre tots aquests mtodes a la guia de desenvolupador


dAndroid: developer.android.com/reference/packages.html.

2.2.6 El fitxer AndroidManifest.xml

Abans que el sistema Android comenci un component de laplicaci, el sistema ha


de saber que aquest component existeix. Per anunciar al sistema els components
que far servir laplicaci, existeix el fitxer AndroidManifest.xml (el fitxer de
manifest de laplicaci). Laplicaci ha de declarar tots els components en aquest
fitxer, que ha destar a larrel del directori del projecte.

A ms de declarar els components de laplicaci, el fitxer de manifest fa el segent:

Identifica els permisos que necessita laplicaci (com ara, permisos per
accedir a Internet).
Programaci multimdia i dispositius mbils 36 Introducci a la programaci de dispositius mbils

Declara la versi de la plataforma, el nivell dAPI mnim que necessita


laplicaci, basat en lAPI que fa servir.

Declara les caracterstiques de maquinari i programari necessries per


executar correctament laplicaci, com poden ser:

La cmera.
La resoluci de la pantalla mnima per poder funcionar.
Els dispositius dentrada necessaris per executar laplicaci (com el
pad de quatre direccions).
Bluetooth.
Pantalla multitctil.
Altres.
Declara les llibreries daplicaci, a banda de les API dAndroid, que
shan denllaar (link) a laplicaci, per exemple com la llibreria de
Google Maps.
Altres.

Si feu doble clic al fitxer AndroidManifest.xml al Package Explorer sobrir


leditor del manifest a lEclipse, com es pot veure a la figura 2.3.

Figura 2.3. Editor dAndroidManifest.xml

Podeu fer servir leditor o senzillament editar el fitxer XML resultant a m. El


resultat s el mateix, encara que per coses senzilles (i quan ja es sap el que es vol
Programaci multimdia i dispositius mbils 37 Introducci a la programaci de dispositius mbils

fer), algunes vegades s ms fcil i rpid editar el fitxer text XML directament.
Per exemple, el fitxer XML del projecte dHolaMon s el segent:

1 <?xml version="1.0" encoding="utf8"?>


2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.ioc.holaandroid"
4 android:versionCode="1"
5 android:versionName="1.0">
6
7 <usessdk android:minSdkVersion="7"/>
8
9 <application
10 android:icon="@drawable/ic_launcher"
11 android:label="@string/app_name">
12 <activity
13 android:name=".HolaAndroidActivity"
14 android:label="@string/app_name">
15 <intentfilter>
16 <action android:name="android.intent.action.MAIN"/>
17
18 <category android:name="android.intent.category.LAUNCHER"/>
19 </intentfilter>
20 </activity>
21 </application>
22 </manifest>

El podeu trobar a la pestanya AndroidManifest.xml de leditor de XML.

La tasca principal del manifest s informar el sistema sobre els components de


laplicaci. Podeu veure atributs generals de laplicaci com la versi del codi, la
versi mnima dSDK que cal per executar aquesta aplicaci o el nom del paquet
de laplicaci.

En lelement <application> hi podeu trobar altres atributs especfics de la-


plicaci, per exemple android:icon apunta al recurs de la icona que identifica
laplicaci i android:label apunta al recurs (dins del fitxer string.xml) amb el
nom de laplicaci.

Lelement <activity> serveix per declarar una activitat. Aix, latribut


android:name especifica el nom de la subclasse (que hereta de la classe
Activity) que tindr el codi de lactivitat. Aquesta classe ha destar imple-
mentada i aparixer al Package Explorer. El components de laplicaci han
destar declarats fent servir les etiquetes: <activity>, <service>, <receiver>
i <provider>. Aquests components que programeu i incloeu al projecte per
no estan declarats al fitxer AndroidManifest.xml no es podran executar, ats que
no sn visibles pel sistema. Els receptors broadcast, per, es poden declarar
al manifest o crear dinmicament amb codi i registrats al sistema cridant a
registerReceiver().

Per a ms informaci sobre el contingut i lestructura del fitxer AndroidMa-


nifest.xml, podeu consultar la documentaci de la guia del desenvolupador:
developer.android.com/guide/topics/manifest/manifest-intro.html.
Programaci multimdia i dispositius mbils 38 Introducci a la programaci de dispositius mbils

Declarant les capacitats del component

Es pot fer servir un Intent per activar activitats, serveis i receptors broadcast. Per
fer-ho es pot especificar a lIntent el nom del component que es vol activar (fent
servir el nom de la classe de lactivitat que voleu activar, per exemple). Per
existeix una altra forma dactivar activitats a travs del que es coneix com a intent
actions (intents dacci). Un intent dacci consisteix a descriure el tipus dacci
que es vol realitzar (i, opcionalment, les dades sobre les quals es vol realitzar)
i permetre al sistema trobar un component en el dispositiu que pugui realitzar
aquesta acci i activar-lo. Per exemple, el pot llanar un Intent demanant que es
vol visitar una pgina web o fer una foto, i deixar queel sistema trobi lactivitat
(de laplicaci que sigui) que pot realitzar aquesta acci. En el cas que hi hagi
mltiples components que poden realitzar lacci, es demana a lusuari quina
delles vol fer servir.

Com pot saber el sistema quins components sn apropiats per fer la tasca que es
demana des de lIntent? Els components poden definir uns filtres dintents (intent
filters) al fitxer de manifest que seran comparats pel sistema amb lacci que sha
demanat fer. Podeu, opcionalment, definir aquests filtres dintents al manifest per
tal que el vostre component pugui respondre a intents daltres aplicacions. Per
fer-ho, heu dafegir un element<intent-filter>com un fill de lelement de la
declaraci de component al fitxer XML.

Podeu trobar ms informaci sobre els filtres dintents a la pgina del desenvolu-
pador dAndroid: developer.android.com/guide/topics/intents/intents-filters.html.

2.3 Activitats

A Android, una activity (activitat) s un component daplicaci que proporciona


una finestra amb una interfcie dusuari de la vostra aplicaci. Una aplicaci pot
tenir cap o ms activitats. Generalment, les aplicacions tenen ms duna activitat i
el seu principal propsit s el dinteractuar amb lusuari. Des del moment que una
activitat es mostra en pantalla fins al moment que es tanca, lactivitat passa per una
srie de fases, conegudes com el cicle de vida de lactivitat. s molt important
que entengueu el cicle de vida de lactivitat per tal que la vostra aplicaci funcioni
correctament.

Una activity (activitat) s un component que proporciona una interfcie


grfica amb la qual interactua lusuari.

Podeu trobar la darrera informaci oficial de Google sobre activitats a develo-


per.android.com/guide/topics/fundamentals/activities.html.

Una aplicaci consisteix en mltiples activitats que estan relacionades entre si.
En general, existeix una activitat considerada com lactivitat principal (o main)
Programaci multimdia i dispositius mbils 39 Introducci a la programaci de dispositius mbils

de laplicaci. Aquesta activitat principal s la que es mostra quan es llana


laplicaci per primera vegada. Aquesta activitat principal pot comenar altres
activitats per realitzar diferents accions. Cada vegada que es llana una activitat,
lactivitat prvia satura, per el sistema guarda lactivitat a la pila (anomenada
back stack). Quan sinicia una activitat, aquesta pren el focus de laplicaci.

Quan una activitat satura perqu una altra comena, lactivitat queda notificada a
travs dels mtodes de callback. Sn mtodes de lactivitat que sn cridats quan
aquesta canvia destat (tant si es crea, satura, es destrueix, etc.) i que li permeten
realitzar tasques apropiades al canvi destat. Per exemple, quan lactivitat satura
aquesta hauria dalliberar els recursos reservats i tancar les comunicacions de
xarxa. Quan una activitat es llana, podria activar aquestes mateixes connexions
de xarxa.

Callback

Una funci de callback (retrotrucada o devoluci de trucada) s una referncia a una porci
de codi executable (funci A) que es passa com a argument en la crida a un altre codi
(funci B). Daquesta manera, el codi (la funci B) pot cridar la funci que se li passa
com a argument (funci A) quan ho necessiti. Per exemple, voleu cridar una funci que
realitza una cerca a una llista (B), i quan troba un element en concret voleu que cridi una
funci vostra per mostrar-ho per pantalla (A). En aquest cas, es passaria una referncia
a A a la crida de la funci B. Quan B trobi lelement, far una crida a A.

2.3.1 Treballant amb activitats

Per crear una activitat heu de crear una classe derivada de la classe Activity(o
una classe derivada della). En la classe que heu creat heu dimplementar els
mtodes de callback que cridar el sistema en les transicions dels diferents estats
del cicle de vida de lactivitat (quan es crea, es destrueix, etc.). Els dos mtodes
ms importants sn:

onCreate(): el sistema crida aquest mtode quan es crea lactivitat. Dins,


heu dinicialitzar els components inicials de la vostra aplicaci. Aqu sha
de cridar setContentView() per definir la distribuci de la interfcie dusuari
de lactivitat (coneguda com alayout).

onPause(): el sistema crida aquest mtode, en primer lloc, per indicar


que lusuari est sortint de la vostra activitat. Encara que no significa
necessriament que lactivitat es vagi a destruir, heu de salvar tots els canvis
que voleu conservar de laplicaci, ja que s possible que lusuari no torni
a lactivitat.

La interfcie dusuari duna activitat est proporcionada per una jerarquia de


vistes (objectes derivats de la classe View). Cada vista (view) controla un espai
rectangular dins de lespai de lactivitat i pot respondre a la interacci de lusuari.
Per exemple, una vista podria ser un bot que inicia una acci quan un usuari el
toca.
Programaci multimdia i dispositius mbils 40 Introducci a la programaci de dispositius mbils

A Android disposeu duna srie de vistes ja fetes que podeu fer servir per dissenyar
la vostra Activity. Els widgets sn vistes que proporcionen elements visuals i
interactius en pantalla com un bot, un camp de text, un checkbox o una imatge.
Els layouts (distribucions) tamb sn vistes que deriven de la classe ViewGroup.
Contenen altres vistes i proporcionen un tipus de distribuci particular per a elles.
Per exemple, un layout linear pot contenir altres botons (vistes) que es mostraran
en forma de vista en la pantalla. Podeu crear subclasses derivades de View i
ViewGroup (o les seves subclasses) per crear els vostres widgets i layouts i aplicar-
los a les vostres activitats.

Els layouts de les diferents activitats de laplicaci estan definits a una srie de
fitxers XML que es troben a la carpeta /res/layout del projecte. Existeix un fitxer
XML per cada layout, sent el fitxer main.xml el que es crea per defecte per a
la primera activitat de laplicaci. Podeu carregar els layouts com la interfcie
grfica de la vostra Activity amb una crida a la funci setContentView (int
layoutResID) que t un nic argument, lidentificador del layout que es vol
carregar.

A ms a ms de les activitats, els intents (originalment en angls, en catal


intencions) s un altre concepte nic dAndroid. Els intents, bsicament permeten
a diferents activitats de diferents aplicacions treballar conjuntament com si totes
pertanyessin a la mateixa aplicaci.

2.3.2 Cicle de vida duna activitat

Per crear una activitat primer heu de crear una classe de Java que hereta de la
El codi daquest projecte,
el podeu trobar als classe base Activity. Per seguir lexplicaci, creeu un nou projecte.
Annexos de la unitat
amb el nom U1 Cicle de
vida.zip. Fixeu-vos en la definici de la classe que trobeu quan creeu un nou projecte:
1 public class ActivitatPrincipal extends Activity {
2 /** Called when the activity is first created. */
3 @Override
4 public void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.main);
7 }
8 }

La classe ActivitatPrincipal hereta d`Activity. La classe Activity


defineix una srie devents que defineixen el cicle de vida de laplicaci:

onCreate(): es crida quan lactivitat sha creat per primera vegada.

onStart(): es crida quan lactivitat s visible per a lusuari.

onResume(): es crida quan lactivitat comena a interaccionar amb lusu-


ari.

onPause(): cridada quan lactivitat actual es pausa i lactivitat anterior s


represa.
Programaci multimdia i dispositius mbils 41 Introducci a la programaci de dispositius mbils

onStop(): es crida quan lactivitat ja no s visible per a lusuari.

onDestroy(): cridada abans que lactivitat sigui destruda pel sistema


(manualment o pel sistema per estalviar memria).

onRestart(): es crida quan lactivitat sha aturat i sha tornat a iniciar.

Un handler (controlador) s
Per defecte, lactivitat que es crea al nou projecte cont levent onCreate(). Dins un mtode o funci que
sexecuta per tractar un
daquest mtode (s un handler de levent) est el codi que serveix per mostrar els esdeveniment ocorregut al
elements de la UI (user interface, interfcie dusuari) en pantalla. El cicle de vida sistema.

duna activitat i les diferents fases per les quals passa sn les segents:

Estat inicial

Estat en execuci

Estat pausat

Estat aturat (stop)

Estat destruda

Estat inicial

Quan una activitat est engegant passa a travs de tota una srie de crides a mtodes
de callback on podeu ficar codi. Finalment, passar a lestat dexecuci. Aquest
procs de creaci de lactivitat (la transici entre lestat inicial i lestat en execuci)
s una de les operacions ms costoses en temps de computaci i, per tant, afecta
la vida de la bateria del dispositiu. Aquest s el motiu pel qual les activitats no es
destrueixen automticament quan es deixen de mostrar, ja que lusuari pot voler
tornar-hi aviat.

Estat en execuci

Una activitat en execuci s la que est actualment en pantalla i interactuant


amb lusuari. Tamb diem que lactivitat est en focus, s a dir, que totes les
interaccions de lusuari (com tocar la pantalla, escriure al teclat, pressionarels
diferents botons del telfon) estan tractades per aquesta activitat. Per aquest motiu,
hi ha una nica activitat en estat dexecuci en cada moment. Lactivitat en
execuci s la que t prioritat en termes de memria i recursos, per tal que tingui
un temps de resposta redut per a lusuari.

Estat pausat

Quan una activitat no t el focus (no est interaccionant amb lusuari) per encara
est visible en pantalla, diem que est en estat de pausa. No s una situaci
que passi molt sovint, ja que la pantalla del dispositiu sol ser petita i lactivitat
generalment o fa servir tota la pantalla o no la fa servir en absolut. Per a vegades
Programaci multimdia i dispositius mbils 42 Introducci a la programaci de dispositius mbils

es mostra un dileg en pantalla,fent que lactivitat que estava en execuci quedi en


pausa. A ms a ms, totes les activitats que van a tancar-se (estat stop) passen
abans per lestat de pausa. Les activitats en estat de pausa encara tenen una
prioritat alta en termes de memria i altres recursos, perqu encara sn visibles i
no es poden amagar de la pantalla.

Estat aturat (stop)

Una activitat est en estat aturada quan no s visible per encara est en memria.
Una activitat aturada es pot tornar a mostrar (i, per tant, tornar a ser una activitat
en execuci) o es pot destruir definitivament i es treu de memria. El sistema es
guarda les activitats en estat aturat, ja que s probable que lusuari vulgui tornar
a executar aquestes activitats aviat, i reiniciar una activitat aturada s ms rpid
que engegar una activitat des de zero. Aix s aix perqu els objectes ja estan
carregats en memria i s ms fcil portar-los al capdavant de la pantalla. Les
activitats aturades es poden treure de memria en qualsevol moment (ja que el
sistema pot necessitar la memria que estan ocupant).

Estat destruda

Una activitat destruda ja no est en memria. LActivity Manager ha decidit que


aquesta activitat ja no s necessria i ha alliberat lespai de memria que estava
ocupant. Abans que lactivitat es destrueixi es poden fer certes accions, com salvar
informaci important de lactivitat. La figura 2.4 mostra aquestes etapes.
Programaci multimdia i dispositius mbils 43 Introducci a la programaci de dispositius mbils

Figura 2.4. Cicle de vida duna activitat

Imatge reproduda a partir del treball creat i compartit pel projecte Android Open Source Project i feta servir a partir dels termes
descrits a la llicncia Creative Commons 2.5.

En execuci i aturada
El fet que una activitat estigui en
Qu fa lactivitat en cada estat? Per veure i entendre les diferents fases del cicle execuci no vol dir
necessriament que estigui fent
de vida duna activitat, el millor s crear un projecte i interactuar-hi, i veure quan moltes coses. Podria estar
senzillament esperant interacci
ocorren els diferents projectes. per part de lusuari. Igualment,
una activitat en estat aturat no
vol dir que necessriament no
Una vegada creat el projecte nou, el fitxer ActivitatPrincipal.java quedar com estigui fent res. Els noms dels
estats fan referncia a com
segueix: dactiva est lactivitat respecte a
lentrada de lusuari. En altres
paraules, si lactivitat est
1 package com.ioc.android; visible, si t el focus o si no s
visible en absolut.
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.util.Log;
6
7 publicclass ActivitatPrincipal extends Activity {
8
9 String tag = "Events";
10
11 /** Called when the activity is first created. */
Programaci multimdia i dispositius mbils 44 Introducci a la programaci de dispositius mbils

12 @Override
13 publicvoid onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.//main//);
16
17 Log.d(tag, "A levent onCreate()");
18 }
19
20 publicvoid onStart()
21 {
22 super.onStart();
23 Log.d(tag, "A levent onStart()");
24 }
25
26 publicvoid onRestart()
27 {
28 super.onRestart();
29 Log.d(tag, "A levent onRestart()");
30 }
31
32 publicvoid onResume()
33 {
34 super.onResume();
35 Log.d(tag, "A levent onResume()");
36 }
37
38 publicvoid onPause()
39 {
40 super.onPause();
41 Log.d(tag, "A levent onPause()");
42 }
43
44 publicvoid onStop()
45 {
46 super.onStop();
47 Log.d(tag, "A levent onStop()");
48 }
49
50 publicvoid onDestroy()
51 {
52 super.onDestroy();
53 Log.d(tag, "A levent onDestroy()");
54 }
55
56 }

Abans dexecutar el projecte feu clic amb el bot dret del ratol al projecte a la
finestra del Package Explorer, i escolliu lopci Run As/Run Configurations. Des
daqu, aneu a la pestanya Target i escolliu lopci Always prompt to pick device
(sempre demaneu escollir dispositiu). Aix far que la propera vegada que execu-
teu el programa us demani on sexecutar entre les diferents opcions possibles del
sistema (mquines virtuals o dispositius fsics connectats a lordinador). Feu clic
a Run per executar el projecte. Veureu una pantalla com la de la figura 2.5. En
aquest cas en concret, ens demana si el volem executar entre un Nexus 7 connectat
a lordinador o si volem llanar una mquina virtual.
Programaci multimdia i dispositius mbils 45 Introducci a la programaci de dispositius mbils

Figura 2.5. Selecci de dispositiu on sexecutar laplicaci

Una vegada fet aix, podeu executar el projecte per depurar amb bot dret al
projecte al Package Explorer i lopci Debug As/Android Application. Seguiu
aquests events amb el grfic de la figura 2.4 (figura de lesquema del cicle de vida).
Podeu veure tamb els esdeveniments de log a la finestra LogCat de lEclipse, tal
com podeu observar a la figura 2.6.

Figura 2.6. Log devents a lEclipse

Podeu provar dafegir filtres fent clic al bot + i donant certs criteris per veure
nicament els events que us interessen.

Aix, quan es carrega laplicaci per primera vegada es mostra el segent:


1 D/Events ( 227): A levent onCreate()
2 D/Events ( 227): A levent onStart()
3 D/Events ( 227): A levent onResume()

Aix que les inicialitzacions de la vostra aplicaci les podeu fer a levent
onCreate. Quan premeu el bot de tornar enrere al simulador, els events que
es mostren al log sn aquests:
1 D/Events ( 227): A levent onPause()
2 D/Events ( 227): A levent onStop()
3 D/Events ( 202): A levent onDestroy()

I si torneu a laplicaci (des del men, o prement durant una estona el bot Home
i seleccionant laplicaci):
Programaci multimdia i dispositius mbils 46 Introducci a la programaci de dispositius mbils

1 D/Events ( 227): A levent onRestart()


2 D/Events ( 227): A levent onStart()
3 D/Events ( 227): A levent onResume()

Aix que les inicialitzacions de la vostra aplicaci les podeu fer a levent
onCreate(), ja que onStart() i onResume() sexecuten tamb quan torneu a
laplicaci.

Lactivitat es destrueix quan es prem el bot de tornar enrere (Back button).


s molt important aquest punt, ja que lestat de lactivitat es perd. Per tant,
heu dafegir codi addicional per preservar lestat de lactivitat quan es destrueix
(a qualsevol dels events que sexecuten abans de destruir laplicaci) i tornar a
restituir lestat quan es torni a obrir. Per exemple, les dades que voleu desar quan
laplicaci deixa destar en execuci les podreu desar a onPause() i tornar a
carregar-les des d onResume().

Levent onPause()s cridat als dos escenaris, quan lactivitat senvia al fons
(background) i quan s eliminada amb el bot Back. Quan lactivitat es torna
a engegar sempre es cridaonStart() i onResume(), independentment de si ha
tornat dels fons (background) o si sha creat de nou.

2.4 Intents

Els Intents sn missatges enviats entre altres blocs importants de les aplicacions
dAndroid. Les activitats, serveis i broadcast receivers (receptors broadcast) sn
activats a travs daquests missatges, anomenats intents. Els intents li diuen a
una activitat que sengegui, a un servei que comenci o saturi, o sn simplement
missatges broadcast (dirigits a totes les aplicacions del dispositiu). En definitiva,
serveixen per comunicar components de la mateixa aplicaci o de diferents.

Els Intents serveixen per comunicar diferents components de la mateixa


aplicaci o de diferents aplicacions.

Lintent s un objecte de la classe Intent, i cont la informaci de loperaci que


es vol realitzar o, en el cas dels broadcasts, la descripci dalgun esdeveniment
que ha ocorregut al sistema. Existeixen diferents formes denviar els Intents en
funci del tipus de component al qual van dirigits.

Per enviar un Intent dirigit a una activitat, podeu fer servir


els mtodes Context.startActivity (Intent intent) o
Activity.startActivityForResult (Intent intent, int
requestCode), depenent de si espereu que lactivitat us retorni alguna
informaci de tornada o no.

Per iniciar un servei o enviar informaci a un servei podeu fer servir


el mtode Context.startService (Intent service). Es pot fer servir
Programaci multimdia i dispositius mbils 47 Introducci a la programaci de dispositius mbils

Context.bindService (...) per establir una connexi entre el servei i el


component que lest cridant.

Per enviar un Intent dirigit a tots els receptors broadcast


podeu fer servir Context.sendBroadcast (Intent intent),
Context.sendOrderedBroadcast (...) o Context.sendStickBroadcast
(Intent intent).

En cada cas, el sistema Android troba lactivitat, servei o receptor broadcast que
respondr a lIntent, instanciant-lo si cal.

2.4.1 Objecte Intent

Un objecte Intent s un conjunt dinformaci. Cont informaci dinters per al


component que rep lintent (com lacci que ha de realitzar i les dades sobre les
quals lha de realitzar). Tamb cont informaci per al sistema Android (com la
categoria del component que ha de tractar lintent i les instruccions de com llanar
el component). Cont la segent informaci:

Nom del component

Acci

Dades

Categoria

Extres

Flags

Nom del component

El nom del component que hauria de tractar lintent. Aquest camp s un objecte
ComponentName. El nom del component s opcional. Si sespecifica, lintents
enviat a una instncia de la classe especificada. Si no sespecifica, el sistema
trobar un component per tractar lintent (en base a una altra informaci espe-
cificada a lobjecteIntent). El component sespecifica amb setComponent(),
setClass() o setClassName().

Acci

Lacci s un string que especifica lacci a realitzar o, en el cas dels intents


broadcast, una acci que ha ocorregut i que sest anunciant. La classe Intent
defineix alguns tipus daccions estndards, com les que es poden veure a la taula
2.1. Podeu veure tots els tipus de constants dacci a lajuda del desenvolupador,
Programaci multimdia i dispositius mbils 48 Introducci a la programaci de dispositius mbils

a la pgina de la classeIntent. Podeu definir i llegir lacci dun objecte Intent


amb els mtodes setAction() i getAction().

Taula 2.1. Diferents tipus daccions

Constant Component al qual va dirigit lIntent Acci.

ACTION_CALL Activitat Realitza una trucada.

ACTION_EDIT Activitat Mostra dades a lusuari per a edici.

ACTION_MAIN Activitat Inicia com a activitat principal duna aplicaci.


No sespera valor de retorn.

ACTION_SYNC Activitat Sincronitza dades des del dispositiu al servidor.

ACTION_VIEW Activitat Mostra dades a lusuari.

ACTION_BATTERY_LOW Receptor broadcast Advertncia que la bateria del dispositiu est


baixa.

ACTION_HEADSET_PLUG Receptor broadcast Shan connectat o desconnectat els cascs del


dispositiu.

ACTION_SCREEN_ON Receptor broadcast Sha encs la pantalla.

ACTION_AIRPLANE_MODE_CHANGED Receptor broadcast Sha modificat el mode avi del dispositiu.

Dades

MIME Les dades contenen la informaci de les dades sobre les quals sha de realitzar
MIME (Multipurpose Internet
Mail Extensions, extensions de
lacci (especificant lURI) i el tipus MIME daquestes dades.
correu dInternet multipropsit)
s un estndard dInternet que es
va dissenyar originalment per
Depenent del tipus dacci, lURI especificar unes dades diferents. Per exemple,
especificar el tipus de les dades
adjuntes a un correu electrnic,
quan lacci s ACTION_CALL el camp de dades ser de tipus tel: i un URI
per que actualment serveix per amb el nmero de telfon que sha de trucar. O si lacci s ACTION_VIEW,
especificar tipus de dades en
general. el camp de dades pot ser del tipus http: i ladrea de la pgina web que es vol
visitar.

Moltes vegades, el tipus de dades es pot deduir de lURI. Per exemple, mirant si s
una URL duna web o una imatge del dispositiu. Per es pot definir especficament
el tipus de les dades a lobjecte Intent.

El mtode setData (Uri data) serveix per especificar lURI de les dades i
el mtode setType (String type) serveix per especificar el tipus MIME de
les dades. Tamb podeu fer servir el mtode setDataAndType (Uri data,
String type) per especificar ambds. Per llegir lURI i el tipus MIME, podeu
fer servir getData() i getType(), respectivament.

Categoria

s una cadena que cont informaci addicional sobre el tipus de component que
hauria de tractar lintent. La classe Intent defineix algunes categories, entre les
quals es troben les de la taula 2.2.
Programaci multimdia i dispositius mbils 49 Introducci a la programaci de dispositius mbils

Taula 2.2. Alguns dels tipus de categories definides a Intent

Constant Significat

CATEGORY_PREFERENCE Lactivitat s un panell de preferncies.

CATEGORY_APP_MUSIC Lactivitat ha de ser capa de reproduir o manipular


msica.

CATEGORY_APP_MESSAGING Laplicaci ha de ser capa denviar i rebre missatges.

CATEGORY_APP_BROWSER Lactivitat ha de ser capa de navegar per Internet.

Podeu comprovar la llista completa de categories a lajuda del desenvolupador de


la definici de la classe Intent.

Podeu fer servir els mtodes addCategory(String category),


removeCategory(String category) i getCategories() per afegir, esborrar
i obtenir una llista de les categories de lobjecte Intent, respectivament.

Extres

Els extres sn parells clau-valor que donen informaci addicional que sha denviar
al component perqu tracti lintent. Aix, diferents URI tenen associats alguns
extres en particular. Per exemple, lacci ACTION_HEADSET_PLUG que correspon
a una canvi en lestat de la connexi dels auriculars del dispositiu, t un camp
extra indicant si els auriculars shan endollat o no. Un altre exemple, lacci
ACTION_TIMEZONE_CHANGED, que correspon al fet que sha canviat ls horari,
t un extra time-zone per especificar ls horari que sha definit.

La classeIntent t una srie de mtodes que es fan servir per afegir extres, els
podeu consultar a lajuda del desenvolupador. Tamb es pot fer servir un objecte
del tipus Bundle per afegir extres. Un objecte de la classe Bundle (literalment
de langls, paquet o feix) permet emmagatzemar una srie de dades (que
poden ser de diferent tipus). Les variables es poden afegir al Bundle simplement
donant un nom i la variable que es vol guardar. En certa manera, recorda els
arrays amb qu es passen variables entre els formularis en PHP: un array de
tuples [nom, valor]. Podeu fer servir els mtodes putExtras(Bundle extras)
i getExtras() per afegir i obtenir extres de lintent.

Flags (banderes)

Es poden especificar flags de diferents tipus que indiquen al sistema com ha de


llanar lactivitat i com tractar-la desprs que shagi engegada. Tots aquests flags
estan definits a la classe Intent.

Les aplicacions fan servir els objectes Intent per enviar broadcasts i activar
components del sistema. Per exemple, a la taula 2.3 teniu uns exemples dintents
que criden a serveis estndard del sistema i el seu significat.
Programaci multimdia i dispositius mbils 50 Introducci a la programaci de dispositius mbils

Taula 2.3. Diferents Intents

Aplicaci objectiu URI de lIntent Acci de lIntent Resultat

Navegador http://ioc.xtec.cat ACTION_VIEW Obre en un navegador


ladrea especificada.

Navegador text ACTION_WEB_SEARCH Es realitza una cerca a


Google de la cadena
especificada.

Marcador tel:nmero de telfon ACTION_CALL Truca al nmero de


telfon especificat.

Marcador tel:nmero de telfon ACTION_DIAL Marca el nmero de


telfon especificat (per
no truca).

GoogleMaps geo:latitud,longitud ACTION_VIEW Obre GoogleMaps a la


geo:latitud,longitud?z=zoom localitzaci especificada
geo:0,0?q=adrea o fent la cerca
geo:0,0?q=pizzeria demanada.

2.4.2 Resolucions dIntents

Hi ha dos tipus dIntents diferents:

Intents explcits: on sespecifica el component explcitament pel seu nom (el


camp nom del component de l`Intent t un valor introdut). Generalment,
no podem saber el nom especfic dels components daltres aplicacions, per
aix els intents explcits generalment es fan servir per cridar components de
la nostra prpia aplicaci.

Intents implcits: aquests no tenen definit el nom del component al qual


van dirigits. Generalment, es fan servir per activar components daltres
aplicacions.

Els intents explcits senvien pel sistema a una instncia de la classe definida,
nicament es fa servir el nom del component (definit al ComponentName de
lobjecte Intent) per determinar quin s el component al qual va dirigit lintent.

Com els intents implcits no especifiquen quin s el component al qual va dirigit


lintent, el sistema ha de trobar el millor component per tractar lintent. Per
fer-ho, compara els continguts definits a lobjecte Intent amb unes estructures
definides als components que serveixen per anunciar al sistema les capacitats del
component. Aquestes estructures serveixen per dir al sistema quin tipus dIntents
s capa el component de tractar i sanomenen intent filters (filtres dintents).

Els intent filters serveixen per dir al sistema les capacitats del component.
El sistema sabr a quin tipus dintent pot respondre el component comparant
les caracterstiques de lintent amb el filtre dintent.
Programaci multimdia i dispositius mbils 51 Introducci a la programaci de dispositius mbils

Per exemple, podeu crear una activitat que serveixi per veure pgines web. Podeu
anunciar al sistema que la vostra activitat est oberta a rebre intents per veure
pgines web. La propera vegada que es faci un intentper veure una web des del
vostre dispositiu, la vostra activitat ser una de les candidates per obrir la web (en
el cas que hi hagi diversos components per atendre l Intent, el sistema demanar
a lusuari quin vol fer servir).

Els filtres permeten que els components puguin rebre intents implcits. Si un
component no t intent filters, nicament pot rebre intents explcits (amb el seu
nom). Un component que defineix filtres dintents pot rebre intents implcits i
explcits.

Per saber si un objecte Intent s acceptat per un filtre dintents es comparen les
segents caracterstiques de lobjecte Intent:

Acci

Dades (lURI i el tipus de dades)

Categoria

Els extres i els flags no es fan servir per determinar quin component rep l Intent.

2.4.3 Filtres dIntents

Els components (activitats, serveis i receptors broadcast) defineixen filtres


dintents per informar al sistema dels intents implcits que poden tractar. Cada
filtre descriu una capacitat del component, una srie d`Intents que el component
est disposat a rebre.

Un intent explcit sempre s rebut pel component, no es fa cap tipus de compro-


vaci amb els filtres dintents. Per els intents implcits senvien al component
nicament si s acceptat pels filtres del component.

Un component t un filtre diferent per cada treball que pot fer. Per exemple, una
aplicaci multimdia pot tenir diferents tipus de filtres per anunciar que pot obrir
diferents tipus de fitxers (fotos, udio, vdeo, etc.).

Un filtre s una instncia de la classe IntentFilter. El sistema comprova els


components per veure quin pot rebre lintent implcit, per aquest motiu ha de
conixer les capacitats del component abans dengegar-lo. Per aix els filtres shan
de definir al fitxer AndroidManifest.xml com a elements <intent-filter>.
Lnica excepci sn els filtres per als receptors broadcast que es registren
dinmicament cridant el mtode Context.registerReceiver().

Un filtre t camps similars als de lobjecte Intent: acci, dades i categoria. Els
intents implcits es comparen amb els camps del filtre. Perqu lintent sigui enviat
al component, la comparaci amb els tres camps del filtre ha de ser vlida. Es
realitza un test amb cada camp per separat:
Programaci multimdia i dispositius mbils 52 Introducci a la programaci de dispositius mbils

Acci

Categoria

Dades

Acci

Lelement <intent-filter> en el fitxer de manifest mostra les accions del filtre


com a subelements <action>. Per exemple:

1 <intentfilter>
2 <action android:name="android.settings.SOUND_SETTINGS"/>
3 <action android:name="android.settings.WIFI_SETTINGS"/>
4 <action android:name="android.intent.action.CALL"/>
5 </intentfilter>

Encara que els objectes Intent nicament defineixen una nica acci, els filtres
poden definir-ne ms duna. La llista no pot estar buida, ha de tenir almenys un
element <action>, o bloquejar tots els intents. Perqu lobjecte Intent passi
el test del filtre dacci ha de coincidir una de les accions definides al filtre. Si
lobjecte Intent no especifica una acci, passa el test dacci automticament i
es comprovaran la resta de camps.

Categoria

Lelement <intent-filter> tamb defineix les categories com a subelements,


per exemple:

1 <intentfilter>
2 <categoryandroid:name="android.intent.category.DEFAULT"/>
3 <categoryandroid:name="android.intent.category.BROWSABLE"/>
4 </intentfilter>

Fixeu-vos que es fan servir les cadenes completes per definir les accions i les
categories (a diferncia del que hem vist per a la creaci de lobjecte Intent).
Aix, quan a lobjecte Intent definiu la categoria CATEGORY_BROWSABLE, al filtre
dintent sha de definir android.intent.category.BROWSABLE.

Perqu lintent passi la comprovaci de categoria, totes les categories definides a


lobjecte Intent han destar presents al filtre dintents.

Existeix una petita caracterstica que cal aclarir. Tots els intents implcits
que senvien a startActivity() es tracten pel sistema com si tinguessin la
categoria CATEGORY_DEFAULT definida. Per tant, les activitats que volen rebre
intentsimplcits han dincloure android.intent.category.DEFAULT en el seu
filtre dintents.

Els filtres android.intent.action.MAIN i


android.intent.category.LAUNCHER sn excepcions. Defineixen activitats
que comencen noves tasques i que estan representades a la pantalla llanadora
daplicacions (la pantalla on lusuari pot escollir entre totes les aplicacions que
Programaci multimdia i dispositius mbils 53 Introducci a la programaci de dispositius mbils

vol llanar). Poden incloure android.intent.category.DEFAULT en la llista


de categories, encara que no ho necessiten.

Dades

La definici de dades est especificada com un subelement del filtre dintents.

1 <intentfilter>
2 <data android:mimeType="image/*"/>
3 <data android:scheme="http"android:type="video/*"/>
4 </intentfilter>

Cada element <data> pot especificar un URI i un tipus de dades (MIME). Latribut
type de lelement <data> especifica un tipus MIME de les dades.

Com que la majoria de les dades es proporcionen amb provedors de continguts, els
filtres que especifiquen tipus de dades no especifiquen URI. Tant lobjecte Intent,
com el filtre poden usar un comod * per especificar un subtipus. Per exemple,
text/* o audio/* indica que per a qualsevol subtipus es compleix.

Per exemple, el primer element <data> diu al sistema que el component pot
obtenir una imatge i mostrar-la.

El segon element s un filtre que defineix un esquema i un tipus de dades. En


aquest cas li diu al sistema Android que el component pot obtenir dades de vdeo
de la xarxa i mostrar-les.

2.5 Interfcie dusuari dAndroid

Les activitats serveixen per interactuar amb lusuari i mostren la interfcie dusuari
(o UI, User Interface) de la vostra aplicaci, que pot tenir elements grfics
(widgets, en angls) com botons, caixes de text, etiquetes, etc. LaUI est definida
al fitxer main.xml, a la carpeta res/layout del vostre projecte. Si lobriu des
del Package Explorer de lEclipse, veureu dues pestanyes: Graphical Layout i
main.xml, que mostren el contingut del fitxer XML i la interpretaci grfica del
mateix, com es pot veure a la figura 2.7.
Programaci multimdia i dispositius mbils 54 Introducci a la programaci de dispositius mbils

Figura 2.7. Edici de la UI des de lEclipse

Quan sexecuta laplicaci es carrega el fitxer XML amb la UI al controla-


dor devent onCreate() de la vostra classe dactivitat, fent servir el mtode
setContentView().

1 public void onCreate(Bundle savedInstanceState)


2 {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.main);
5 }

Crear la UI En temps de compilaci, cada element del fitxer XML s compilat en una classe
En general, el ms senzill s
crear la UI mitjanant un fitxer
dUI dAndroid equivalent amb els seus mtodes i atributs.
XML, encara que s possible
crear la UI mitjanant
programaci. En alguns casos,
La UI a Android es construeix fent servir objectesView (vistes) i ViewGroups
com els videojocs, aquesta
darrera opci s preferible.
(grups de vistes). Existeixen moltes Views i ViewGroups, tots derivats de la classe
View.

Els objectes View sn la unitat bsica de la UI de la plataforma Android. La


classe View(android.view.View) serveix de classe base per a totes les subclasses
anomenades widgets, que ofereixen objectes UI totalment implementats com a
camps de text i botons.

La classe ViewGroup(android.view.ViewGroup) serveix de classe base per a les


subclasses anomenades layouts, que proporcionen diferents tipus de disposicions
dels elements. Una o ms Views es poden agrupar juntes dins dun ViewGroup. El
ViewGroup (que en si mateix s un tipus de View, ja que hereta daquesta classe)
proporciona una disposici en la qual es mostrar la seqncia de Views.

A Android, es defineix la UI duna activitat fent servir una jerarquia de Views i


ViewGroups, tal com es pot veure a la figura 2.8.
Programaci multimdia i dispositius mbils 55 Introducci a la programaci de dispositius mbils

Figura 2.8. Jerarquia que defineix una UI duna activitat

Per enllaar larbre jerrquic de vista a la pantalla, lactivitat ha de cridar


setContentView() i passar-li com a referncia lobjecte al node arrel de la
jerarquia. El node arrel de la jerarquia va cridant els seus nodes fills (els altres
Views i ViewGroups) per tal que, finalment, tots es dibuixin en pantalla.

Android t els diferents tipus de ViewGroups:

LinearLayout

AbsoluteLayout

TableLayout

RelativeLayout

FrameLayout

ScrollView

El ms habitual s combinar els diferents tipus de layouts per crear la UI que volem
(tal com es mostra a la figura 2.8, combinant uns dins duns altres).

2.5.1 Layout

La forma ms comuna de definir el layout de lactivitat i expressar la jerarquia de


Views s a travs duns fitxers XML de layout, que proporcionen una estructura del
layout que s fcil de seguir pel programador. Cada element XML s un objecte
View o un ViewGroup. Els objectes View sn les fulles de larbre i els objectes
ViewGroup les branques de larbre (fixeu-vos en la figura 2.8). Per exemple,
aquest seria el fitxer XML dun layout lineal vertical amb quatre botons:
Programaci multimdia i dispositius mbils 56 Introducci a la programaci de dispositius mbils

1 <?xml version="1.0" encoding="utf8"?>


2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:orientation="vertical">
7
8 <Button
9 android:id="@+id/btnMapa"
10 android:layout_width="fill_parent"
11 android:layout_height="wrap_content"
12 android:text="Mapa"/>
13
14 <Button
15 android:id="@+id/btnWeb"
16 android:layout_width="fill_parent"
17 android:layout_height="wrap_content"
18 android:text="Web"/>
19
20 <Button
21 android:id="@+id/btnContactes"
22 android:layout_width="fill_parent"
23 android:layout_height="wrap_content"
24 android:text="Contactes"/>
25
26 <Button
27 android:id="@+id/btnTrucar"
28 android:layout_width="fill_parent"
29 android:layout_height="wrap_content"
30 android:text="Trucar"/>
31
32 </LinearLayout>

Fixeu-vos com el LinearLayout cont els elements Button. Es podria


niuar un altre LinearLayout (o un altre tipus de ViewGroup) dins per
donar ms complexitat al layout. Si voleu saber ms sobre els fitxers
de layout XML, podeu consultar el web de desenvolupadors de Google a
developer.android.com/guide/topics/ui/declaring-layout.html.

Si voleu veure les diferents caracterstiques dels diferents layouts, les podeu trobar
a developer.android.com/guide/topics/ui/layout-objects.html.

2.5.2 Creaci del layout

Per mostrar els diferents tipus de layouts que existeixen es poden crear UI
mitjanant ledici dun fitxer XML o mitjanant leditor grfic que proporciona
lEclipse. Per obrir-lo, obriu el fitxer main.xml que es troba a la carpeta res/layout
del projecte al Package Explorer.

A la figura 2.9 podeu veure les diferents parts de leditor.


Programaci multimdia i dispositius mbils 57 Introducci a la programaci de dispositius mbils

Figura 2.9. Editor de GUI a Eclipse

Les diferents parts sn les segents:

Visualitzaci de GUI: amb aquestes pestanyes podeu escollir si voleu veure


la GUI com un fitxer text XML o la seva representaci grfica.

Opcions generals: aqu es troben algunes opcions generals de la GUI, com


ara:

Per quina pantalla sest dissenyant.


El seu format (emmarcat o apasat).
Si correspon a la GUI normal o quan el dispositiu est connectat a
lordinador o dock de cotxe.
Si s la GUI que es mostrar durant el dia o la nit.
O si fa servir un tema en concret ja definit. Feu proves de modificar
els temes i comproveu les diferncies.

Jerarquia de Views: a la dreta podeu veure la jerarquia de Views i


ViewGroups que formen part de la GUI. Podeu fer clic a cadascuna delles
per seleccionar-les. Fent clic amb el bot dret del ratol podeu modificar
les seves propietats. Feu servir aquesta representaci per tenir clar com est
estructurada la vostra GUI.
Programaci multimdia i dispositius mbils 58 Introducci a la programaci de dispositius mbils

Representaci grfica: aqu podeu veure com es mostrar la vostra interf-


cie grfica, el seu resultat final. Podeu seleccionar els Views i ViewGroups
i mourels entre les diferents parts de la GUI. Igualment, fent clic amb el
bot dret podeu modificar les seves propietats.

Paleta: aqu teniu els diferents Views i ViewGroups que podeu fer servir
a la vostra GUI. Per afegir qualsevol daquests Views, els podeu arrossegar
amb el ratol a la representaci grfica del GUI o a la jerarquia de Views. De
vegades s ms senzill introduir els Views a travs de la jerarquia. Feu clic
a les diferents carpetes (Form Widgets, Text Fields, Layouts...) per donar
una ullada als diferents elements grfics amb els quals podeu treballar.

Opcions de visualitzaci: us permeten modificar la forma en qu es


visualitza la representaci grfica de la GUI.

Opcions de lelement seleccionat: us donen diferents opcions que es poden


aplicar a lelement seleccionat. Les opcions varien entre els diferents Views;
per tant, fixeu-vos quan seleccioneu un View quines sn les seves opcions.

Eclipse t ajuda contextual Els Views i ViewGroups tenen una srie datributs comuns que es poden veure a
sobre el cursor del ratol. Si
deixeu el cursor sobre els la taula 2.4.
diferents botons de leditor,
us sortir una petita etiqueta
explicant qu fa aquest
Taula 2.4. Atributs comuns de View i ViewGroup
bot.
Atribut Descripci.

layout_width Amplada del View.

layout_height Alada del View.

layout_marginTop Especifica lespai extra a dalt del View.

layout_marginBottom Especifica lespai extra a baix del View.

layout_marginLeft Especifica lespai extra a lesquerra del View.

layout_marginRight Especifica lespai extra a la dreta del View.


Atributs del View
layout_gravity Especifica com els Views fills es posicionen.
Alguns dels atributs del View
nicament sn aplicables quan el
View est dins dun ViewGroup. layout_weight Especifica quant de lespai extra del layout shauria
Per exemple, els atributs de reservar per al View.
layout_weight i
layout_gravitynicament layout_x Especifica la coordenada x del View.
sapliquen quan el View est dins
dun LinearLayout o layout_y Especifica la coordenada y del View.
TableLayout.

Podeu veure els diferents tipus de layouts disponibles a la pgina de Google:


developer.android.com/resources/tutorials/views/index.html.

Reviseu el web, ja que s possible que en el moment de publicaci daquests


Expliquem el funcionament
de LinearLayout perqu s materials, estiguin disponibles nous tipus de layouts.
el ms senzill de fer servir.
Doneu una ullada a la
documentaci oficial dels Un LinearLayout mostra els Views a una nica fila o columna, es poden mostrar
diferents layouts per tal
dobtenir el resultat grfic o verticalment o horitzontalment. Per exemple, a la figura 2.10 podeu veure un
desitjat.
LinearLayout on hem introdut quatre botons.
Programaci multimdia i dispositius mbils 59 Introducci a la programaci de dispositius mbils

Figura 2.10. Amb un Linear Layout els components es distribueixen linealment

Fent clic dret al LinearLayout a la jerarquia de Views podeu veure i modificar


algunes de les seves propietats. Per exemple, si modifiqueulorientaci a Orienta-
tion/Horizontal veureu com els botons es disposen de manera horitzontal, tal com
es pot veure a la figura 2.11.
Programaci multimdia i dispositius mbils 60 Introducci a la programaci de dispositius mbils

Figura 2.11. Linear Layout horitzontal

Podeu tenir els layouts niuats els uns dins dels altres per crear disposicions ms
complexes, tal com es pot veure a la figura 2.12.

Figura 2.12. Linear Layout niuats

De cada View podeu modificar les seves propietats fent clic dret i seleccionant
la propietat que voleu modificar. Per exemple, podeu modificar el valor delID
que identifica el View, o la seva amplada i alada. En la figura 2.13 podeu veure
tres botons amb caracterstiques damplada diferents. El primer t lamplada que
ve per defecte, al segon sha escollit el valor Fill Parent (omplir pare) a la
propietat Layout Width(amplada del layout),i el tercer ha agafat per a aquesta
mateixa propietat el valor de 100 dp (100 punts de pantalla).
Programaci multimdia i dispositius mbils 61 Introducci a la programaci de dispositius mbils

Figura 2.13. Diferents valors de Layout Width

Finalment, el resultat del layout que creeu mitjanant les eines grfiques generaran
un fitxer XML amb el qual el sistema Android sabr com crear en temps dexecuci
la interfcie grfica. Per exemple, el layout de la figura 2.13 correspon al segent
fitxer XML:

1 <?xml version=//"1.0"//encoding=//"utf8"//?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:id="@+id/LinearLayout1"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:orientation="vertical">
7
8 <Button
9 android:id="@+id/button1"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:text="Button"/>
13
14 <Button
15 android:id="@+id/button2"
16 android:layout_width="fill_parent"
17 android:layout_height="wrap_content"
18 android:text="Button"/>
19
20 <Button
21 android:id="@+id/button3"
22 android:layout_width="100dp"
23 android:layout_height="wrap_content"
24 android:text="Button"/>
25
26 </LinearLayout>

Al comenament s normal que feu servir leditor grfic per crear els vostres
layouts, per quan aneu agafant experincia veureu que editar directament el fitxer
XML fa molt ms rpida ledici del layout.

Unitats de mesura

Quan sespecifica la mida dun element a la interfcie grfica dAndroid es poden


fer servir aquestes unitats de mesura:
Programaci multimdia i dispositius mbils 62 Introducci a la programaci de dispositius mbils

Dp (density-independent pixel, pxel independent de la densitat). s


recomanada per especificar la mida dels Views en el vostre layout.

Sp (scale-independent pixel, pxel independent de lescala). Similar a dp i


recomanat per especificar mides.

Pt (point, punt). Un punt est especificat com 1/72 duna polsada, basat en
la mida fsica de la pantalla.

Px (pixel). Correspon als pxels reals en pantalla. Aquesta mida no es


recomana, ats que la vostra interfcie grfica es pot mostrar de formes
diferents en diferents dispositius.

2.5.3 Layouts XML

El layout defineix la forma en qu els elements grfics de lactivitat es mostren a


lusuari. Es pot declarar el layout de dues maneres diferents:

Declarant els elements grfics a un fitxer XML. Aquest fitxer contindr


els Views i les seves subclasses que definiran lUI. Lavantatge s que
podeu separar la presentaci de laplicaci del codi que la controla. Aix
podeu modificar (o adaptar a un altre dispositiu) la UI sense haver de
recompilar el projecte. Per exemple, podeu crear diferents layouts XML per
a diferents mides de pantalla, diferents orientacions de la pantalla o diferents
llenguatges.

Instanciant els elements del layout en temps dexecuci. Es poden crear


els elements grfics des del mateix programa. Aix s til quan voleu fer una
UI en funci duna cosa que no sabeu en el moment de dissenyar laplicaci
(per exemple, en funci dunes dades que rebeu per Internet).

Podeu fer qualsevol dels dos mtodes (generalment fareu servir el primer) i, fins i
tot, els dos. Podeu dissenyar la UI de laplicaci i desprs, en temps dexecuci,
modificar lestat dels elements que estan en pantalla.

En general, el vocabulari XML per declarar UI t una estructura similar als noms
corresponents a les classes i mtodes que representen. Aix, s fcil saber els
elements de lXML a quines classes i atributs corresponen (encara que no sempre
sn idntiques).

Es poden crear layouts dUI i els elements que contenen rpidament, fent servir
un fitxer XML de la mateixa manera que es creen pgines web amb HTML, amb
una srie delement niuats. Cada fitxer layout ha de tenir un element arrel, que ha
de ser un objecte View o ViewGroup. Una vegada definit lelement arrel, podeu
afegir widgets o objectes de layout com a elements fills de larrel per crear a poc
a poc la jerarquia de Views que definir el vostre layout. Per exemple, aquest s
el fitxer XML dun layout que usa un LinearLayout i t dins un TextView i un
Button:
Programaci multimdia i dispositius mbils 63 Introducci a la programaci de dispositius mbils

1 <?xml version="1.0" encoding="utf8"?>


2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical">
6
7 <TextViewandroid:id="@+id/text"
8 android:layout_width="wrap_content"
9 android:layout_height="wrap_content"
10 android:text="Hola, sc un TextView"/>
11
12 <Buttonandroid:id="@+id/button"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:text="Hola, sc un Button"/>
16 </LinearLayout>

Aquest fitxer XML es trobar a la carpeta res/layout per poder compilar-se


correctament amb el projecte.

Carregar el recurs XML

Els fitxers XML de layout sn compilats a la vostra aplicaci dins dun recurs
View. Heu de carregar el recurs del layout en la vostra aplicaci des del
codi. Aix ho feu en el mtode de callback onCreate()de la vostra activitat,
que es crida quan laplicaci sest inicialitzant. Per fer-ho, crideu el mtode
setContentView (int layoutResID), que t com a argument un identificador
de recurs de layout. Aquest ID, el podeu trobar a la classe que cont els
recursos android.R. Concretament, els identificadors de layouts es troben dins de
R.layout.nom_del_fitxer_layout . Aix, si el nostre layout est contingut al
fitxer principal.xml, trobareu lidentificador a R.layout.principal. La forma
de carregar aquest recurs seria la segent:

1 public void onCreate(Bundle savedInstanceState)


2 {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.principal);
5 }

Atributs

Els objectes de les classes View i ViewGroup tenen els seus propis atributs. Alguns
dells sn comuns a tots els Views (com lid) i altres, especfics de cada tipus de
View; per exemple els TextView tenen latribut textSize, que no est present en
tots els Views.

Tots els objectes View tenen un nmero ID amb el qual estan associats, i que
identifica el View de forma unvoca. Aquest ID est present en forma de string
al fitxer XML, encara que en compilar laplicaci s referenciat mitjanant un
Integer. Aquest atribut s present a tots els objectes View i derivats dell. La
sintaxi per definir lID al fitxer XML s la segent:

1 android:id="@+id/el_meu_boto"
Programaci multimdia i dispositius mbils 64 Introducci a la programaci de dispositius mbils

El smbol + diu al compilador que s un nou recurs i que sha de crear i afegir als
recursos del projecte (que es troben al fitxer R.java). Quan es referencia un ID de
recurs dAndroid, sha de fer aix:

1 android:id="@android:id/empty"

Introduint el namespace del paquet, esteu referenciant lID de la classe de recursos


android.R.

La forma habitual de crear Views i referenciar-los des de laplicaci s la segent:

Definiu el View en el fitxer XML de layout i assigneu-li un ID nic:

1 <Button android:id="@+id/botoAcceptar"
2 android:layout_width="wrap_content"
3 android:layout_height="wrap_content"
4 android:text="@string/acceptar"/>

Creeu una instncia de lobjecte View (o classe derivada dell) que correspon i
referencieu-lo al del layout (generalment, a la funci de callback onCreate()):

1 Button Boto =(Button) findViewById(R.id.botoAcceptar);

A partir daquest moment ja podeu comenar a treballar amb el bot des del codi.

2.5.4 Widget i events de teclat

Un widget s un objecte View que serveix dinterfcie dinteracci amb lusuari.


Existeixen multitud de widgets ja implementats a Android, com botons, check-
boxes, caixes de text, etc. El programador es pot definir els seus propis widgets
definint una classe que hereti de View o dun widget ja existent (per exemple, pot
heretar duna caixa de text).

Una vegada afegits els widgets, heu de programar perqu el programa interaccioni
amb lusuari. Heu de capturar els events de lobjecte View amb qu lusuari est
interactuant i desprs fer quelcom quan aix succeeixi (executar una part de codi).

La classe View (de la qual hereten elswidgets) t una srie de mtodes decallback
que serveixen per tractar els events de la interfcie grfica. Aquests mtodes
sn cridats pel sistema Android quan lacci respectiva succeeix en aquest
objecte. Per exemple, quan es toca un bot, el sistema crida el mtode de
callback onTouchEvent().

La classe View t una srie dinterfcies anomenades On<quelcom>Listener,


cadascuna amb un mtode de callback anomenat on<quelcom>(). Per exemple,
OnClickListener (per tractar els clics a un View) defineix el mtode onClick().

Aquestes interfcies, anomenades event listeners (escoltadors desdeveniments),


us permeten capturar la interacci de lusuari amb lUI. Si voleu que el vos-
tre View sigui notificat quan ha sigut clicat, heu dimplementar linterfcie
Programaci multimdia i dispositius mbils 65 Introducci a la programaci de dispositius mbils

OnClickListener, definir el mtode onClick(), que s on realitzareu lacci


quan es faci clic, i registrar-lo al View amb setOnClickListener().

Un event listener s una interfcie de la classe View que cont un nic mtode
de callback. Aquests mtodes seran cridats pel sistema Android quan el View
(al qual est registrat levent listener) sactiva per la interacci de lusuari.

Per exemple, podeu definir un event listener amb un mtode de callback i registrar-
lo a un View de tipus bot. Quan lusuari premi el bot, el sistema cridar el
mtode de callback definit i podreu executar el codi que vulgueu.

Per aix heu de definir un event listener i registrar-lo al View. Un event listener
s un mtode que es cridar pel sistema quan es produeixi un esdeveniment en
concret, per exemple quan es premi un bot.

Per registrar un event listener, en primer lloc heu dobtenir una referncia al View
sobre el que voleu definir la funci de callback. Per obtenir la referncia podeu fer
servir el mtode findViewById(int id) de lobjecte de lActivity. Largument
del mtode (lidentificador) s el que est definit al fitxer AndroidManifest.xml i
el podeu obtenir a partir de lobjecte R.id.

Per exemple, per obtenir una referncia a un bot anomenat buttonSi fareu el
segent:

1 Button btnSi;
2
3 //Listener delbotoSi
4 btnSi = (Button) findViewById(R.id.buttonSi);

Podeu trobar tots els identificadors de widgets de la vostra activitat a la variable


R.id. Una vegada tingueu la referncia al bot, fareu una crida al mtode
setOnClickListener (View.OnClickListener l). Aquest mtode registra
el callback que ser invocat quan aquest View sigui clicat. Com a nic argument,
se li passa la funci de callback que sexecutar.

Ho podeu fer de dues maneres diferents. A la primera, senzillament, definiu la


funci de callback a la mateixa crida a setOnClickListener(). Per exemple:

1 btnSi.setOnClickListener(
2
3 new OnClickListener()
4 {
5 @Override
6 publicvoid onClick(View v)
7 {
8 //Codi que sexecutar quan es faci clic
9 Toast.makeText(c, "Boton si", Toast.LENGTH_LONG).show();
10 }
11 }
12 );

En aquest codi es cridasetOnClickListener() i com a argument es fa una


implementaci de la interfcie OnClickListener() que t un nic mtode per
definir, onClick(). Dins daquest mtode estar el codi que sexecutar quan es
Programaci multimdia i dispositius mbils 66 Introducci a la programaci de dispositius mbils

premi aquest bot. En aquest cas, el codi correspon a mostrar un missatge per
pantalla amb Toast.

Aix shauria de fer per cada View que existeixi al layout i amb qu es vulgui
interactuar.

La segona forma consisteix a implementar OnClickListener com a part


de lActivity. Aix evitar haver de crear totes les implementacions de
OnClickListener, simplement diem que la nostra activitat implementa la in-
terfcie OnClickListener afegint-ho a la seva definici amb:

1 public class ProvabotonsActivity extends Activity implements OnClickListener {

Ara, lactivitat ja implementa la interface, i nicament sha de sobreescriure el m-


tode OnClick(View v). En aquest cas es cridar aquest mtode independentment
de quin View hagi estat clicat, per tant el primer que shaur de fer s comprovar
quin ha sigutlobjecte clicat, com es pot veure al segent codi:

1 public class ProvabotonsActivity extends Activity implements OnClickListener {


2
3 Button btnSi, btnNo;
4
5 @Override
6 public void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.main);
9
10 //Definim els listeners
11 btnSi = (Button)findViewById(R.id.buttonSi);
12 btnSi.setOnClickListener(this);
13 btnNo = (Button)findViewById(R.id.buttonNo);
14 btnNo.setOnClickListener(this);
15 }
16
17 public void onClick(View v)
18 {
19 // Fer alguna cosa quan sha polsat un View.
20
21 // Comprovem quin ha estat el View clicat.
22 if(v== btnSi)
23 {
24 //Executem el codi
25 Toast.makeText(this, "Bot si", Toast.LENGTH_LONG).show();
26 }
27 else if(v == btnNo)
28 {
29 Toast.makeText(this, "Bot no", Toast.LENGTH_LONG).show();
30 }
31 }
32 }

A les interfaces devent listeners existeixen el segents mtodes de callback:

onClick(): de OnClickListener. Es crida quan lusuari fa clic en ltem.

onLongClick(): de OnLongClickListener. Es crida quan lusuari fa una


pulsaci llarga damunt de ltem.

onFocusChange(): de OnFocusChangeListener. Es crida quan lusuari


navega en o fora de ltem fent servir els cursors o el trackball.
Programaci multimdia i dispositius mbils 67 Introducci a la programaci de dispositius mbils

onKey(): de OnKeyListener. Es crida quan lusuari t el focus a ltem i


prem o solta una tecla del dispositiu.

onTouch(): de OnTouchListener. Es crida quan lusuari fa una acci de


tocar ltem (inclou prmer, soltar o un gest sobre ltem).

onCreateContextMenu(): de OnCreateContextMenuListener. Es cri-


da quan un men contextual es crea sobre ltem (resultat duna pulsaci
llarga o de la pulsaci de la tecla de men).

You might also like