Academia Academia de Studii Studii Economi Economice ce din Bucure București Facultatea de Cibernetică, Statistică și Informatică Economică
LUCRARE DE LICENȚĂ APLICAȚ IE ANDROID ANDROID PENTRU PENTRU ANALIZA ANALIZA DATE DATELOR LOR PRELUATE PRELUATE DE PE PLATFO PLATFORMA RMA DE SOCIALIZARE SOCIALIZARE FACEBOOK
BUCUREȘI !"#$ Cuprins Introducere Conte%t &biecti'ul (i necesitatea lucrării Structura lucrării e)nolo*ii folosite +latforma Android Caracteristici Andro Android id Ar)itectura e ni'eluri a sistemului Android
Elemente comonente Android SD- Faceboo. SD- entru Android AD /Android De'eloment ool0 De1'oltarea alica2iei Structura aplicației Persisiența datelor Fișiere de resurse Crearea aplicației pe platforma pl atforma Facebook
Conclu1ii Lista tabelelor Lista fi*urilor ANE3E Biblio*rafie
Introducere Conte%t În ultimele decenii, odată odată cu dezvoltarea tot mai mai rapidă a tehnologiei, piața a început să se conc concen entre treze ze tot tot ma maii mu mult lt în juru jurull conc concep eptu tulu luii de smar smartp tpho hone ne (tele telefon fon mobi mobill multimedia multifu multifunc ncțional, ional, conec conectat tat la o rețea GSM GSM sau sau M!S M!S"# "# $ste o tendin tendință normală, normală, av%nd în vedere vedere faptul faptul că traficul de date a devenit tot mai rapid și mai accesibil accesibil ca costuri, smartpho smartphone&ur ne&urile ile oferin oferindd aproa aproape pe toate toate funcționali ionalită tățile cu care este este obi șnuit nuit un utiliza utilizator tor de compute computerr ( agendă agendă,, calendar , navigare G'S G'S,, e&mail e&mail,, broser, editor de te)t, minicalculator mini calculator , aparat foto&video și chiar 2
soft&uri de specialitate precum *dobe 'hotoshop"# 'hotoshop"# !reptat, mijloacele clasice de comunicare între dispozitiv dispozitivele ele mobile mobile sunt tot mai puțin utilizate, utilizate, locul locul lor fiind luat de aplicații ce comunică comunică prin +nternet# +nternet# e e)emplu, utiliz%nd utiliz%nd -aceboo. -aceboo. Messanger Messanger sau S./pe po ți vorbi vorbi gratuit gratuit oriunde oriunde în lume consum%nd foarte pu0in din traficul de date disponibil# Cre1terea numărului de smartphone&uri a fost , cu siguran0ă , influen0ată 1i de nevoia oamenilor de a fi conecta0i în permanen0ă la surse de informa0ii 1i la re0elele de socializare pentru a interac0iona mai u1or între ei# În aceste condi0ii , re0elele de socializare sunt percepute ca un ajutor în procesul de socializare dintre oameni# !ermenul !ermenul 2smartphone3 descrie un dispozitiv mobil , care pe l%ngă caracteristicile sale de telefon are 1i multe alte caracteristici multimedia# n smartphone folose1te un sistem de operare care suportă instalarea 1i 1tergerea de pe dispozitiv a aplica0iilor dezvoltate de programatori# 'rimul dispozitiv pentru care s&a folosit acest termen , smartphone , a fost modelul GS44 5'enelope3 prezentat de compania $ricsson în anul 6778# upă această lansare principalii producători de telefoane mobile 9 :o.ia , Motorola , Son/ $ricsson 1i Samsung s&au concentat asupra procucerii de smartphone&uri# Sistemele de operare S/mbian 1i ;+M de la :o.ia respectiv
dominau
pia0a
la
sf%r1itul
anului
=>>8#
?dată cu lansarea de către *pple a primei genera0ii de telefoane i'hone 1i dezvoltarea sist sistem emulu uluii de oper operar aree *ndro ndroid id de cătr cătree Go Goog ogle le,, pia0 pia0aa smar smartp tpho hone ne&u &uril rilor or s&a s&a dezv dezvol olta tatt considerabil iar marea majoritate a producătorilor s&au orientat spre folosirea sistemului de operare dezvoltat de Google# upă acest an a avut loc ascensiunea dispozitivelor mobile ce au adoptat sistemul de operare *ndroid precum 1i al celor produse de *pple ce rulează i?S# În acest timp, :o.ia cu S/mbion 1i
# !"#$ /mii0
$ !"#4 /mii0
# !"#4
Cota
Cota de
Cre Creștere tere
Cre Creștere tere
/mii0
de
ia iață $ $
sec' sec'en ențial ial
anuală
iață
!"#4
ă
# !"#$ *ndroid
648#>=8,8=6
644#==8,@4A
*?S'
BA#8@7,B=6
BA#767,@>
*pple i?S
@A#867,>>
B6#>=@,@4=
6B>#=6,8
A8#@>,4
3
@@D
A7D
&6D
6AD
66D
>D
6>D
66D
&6@D
=@D
68D
BB>,>>>
8B,>>>
746,A>>
>D
6D
&=4D
&@@D
8B>,>>>
A#B6,A
B#@=,B
>D
6D
&87D
&4D
6A#=8@,>A>
66#@64,=64
#>8>,4>>
AD
=D
6D
667D
68#AA4,>=
==7#@>4,4
A>D
ABD
&=@D
&@@D
6>
de 6=8#B7A,@7B
oper operar aree
de
baza *ltele
B@B,>>>
@=4,A8
6#6=,
>D
>D
=8D
&B=D
otal
$!56!"7,588
$586845,578
$4#6"$!,9
#"":
#"":
;#":
;#:
'rimul smartphone pe care a rulat sistemul de operare *ndroid a fost F!C ream, cunoscut 1i sub numele de ! Mobile G6# În februarie =>>7, telefonul este lansat pe pia0ă cu versiunea 6#B, alias Cupca.e, dar care are c%teva lipsuri# !otu1i, comparativ cu prima versiune, 6#>, Cupca.e face posibilă afi1area tastaturii virtuale pe ecran 1i personalizarea ecranului de pornire cu idget&uri# Încep%nd din =>>7 Google a lansat constant noi versiuni ale sistemului de operare *ndroid, *ndroid, înbunătățind de fiecare fiecare dată problemele problemele apărute la versiunea versiunea precedent precedentăă si adaug%nd adaug%nd noi func0ionalită0i# *stfel în tabelul = sunt prezentate versiunile stemului de operare9 Tabel 2 : +ersiuni ,ndroid (sursă : http://ro&i'ipediaor%/&i'i/,ndroid-(siste http://ro&i'ipediaor%/&i'i/,ndroid-(siste!-de-operare* !-de-operare*
Nume de cod
Data lansarii
$6$
itat
!<*
$6#
Hell/
7 iulie =>6=
$6"
+ce Cream Sandich
6 decembrie =>66
46#
Fone/comb
6> mai =>66
!6464
Gingerbread
decembrie =>6>
!6!
-ro/o
=> mai =>6>
!6"
$clair
= octombrie =>>7
#68
onut
6B septembrie =>>7
#69
Cupca.e
A> aprilie =>>7
4
Sistemul de operare *ndroid beneficiază, de asemenea, de cel mai mare magazin virtual de aplica0ii, Google 'la/, care a devansat recent pe cel de la *pple# *cesta oferă posibilitatea dezvoltatorilor de a adăuaga adăuaga aplica0ia lor contra unei ta)e unice# 'e l%ngă l%ngă aplica țile publicate în Google 'la/ se mai găse1te 1i con0inut video, căr0i 1i muzică#
&biecti'ul (i necesitatea lucrării ?biectivul ?biectivul propus este acela de a dezvolta dezvolta o aplica0ie aplica0ie ce va rula pe sistemul sistemul de operare *ndroid# 'entru a realiza această această aplica ție este necesar să studiem structura sistemului sistemului de operare precum și tehnologiile folosite# -unc0ia principală a aplica0iei prezentate prezentate în cadrul acestei acestei lucrari este aceea de a alcătui alcătui un top al preferin0elor prietenilor prietenilor selectați ai unui utilizator al re0elei de socializare socializare -aceboo.# -aceboo.# În urma studierii magazinului virtual Google Play Google Play, am constatat lipsa unei astfel de aplica0ii care să prezinte unui utilizator utilizator principalele preferințe ale prietenilor# prietenilor# :ecestiatea poate fi justificată prin numărul mare de utilizatori al acestei re0ele de socializare, dintre care majoritatea folosesc smartphone&uri pentru a o accesa 1i prin dorin0a acestora de a vedea preferințele prietenilor#
Structura lucrării În cadrul acestei lucrări vor fi abordate toate no0iunile teoretice necesare pentru a îndeplini îndeplini obiectivul obiectivul propus, propus, acela de a construi construi o aplica aplica ție ce va rula pe sistemul sistemul de operare *ndroid# *stfel, în următorul capitol va fi prezentată structura sistemului de operare prezent%nd fiecare nivel al acestuia# În cea de&a doua parte vom prezenta tehnologiile puse la dispozi0ie de Google ca mediul de dezvoltare precum 1i limbajul de programare# eoarece aplica0ia folose1te 1i re0eaua de socializare -aceboo., va fi prezentat 1i S Iul oferit de aceasta dezvoltatorilor# !oate !oate aceste tehnologii tehnologii vor fi abordate abordate prin intermediul intermediul studierii studierii literaturii de specialitate specialitate și a document documentaației oficiale oficiale## *l treilea capitol va prezenta structura aplica0iei, procesul de dezvoltare al acesteia 1i modalitatea de implementare a no0iunile prezentate în capitolul anterior# ltimul capitol al acestei lucrări prezintă posibile dezvoltări ulterioare ale aceste aplica0ii precum 1i concluziile concluziile la care am ajuns ajuns în urma dezvoltării# dezvoltării# 5
e)nolo*ii folosite În acest capitol vom detalia tehnologiile folosite pentru a dezvolta aplica0ia prezentată# 'roiectul a fost realizat folosind tehnologii 1i tool&uri open&source# *ceastă alegere a fost făcută deoarece prezintă următoarele avantaje9 ➢ *u în spate comunită0i mari de utilizatori 1i dezvoltatori preocupa0i de dezvoltarea
continuă a acestor tehnologii, e)ist%nd suport din partea acestor comunită0i cum ar fi tutoriale 1i acces la diverse resurse cum ar fi librării specializate Ř
Costul redus de dezvoltare al aplica0iei, nee)ist%nd ta)e de licen0iere pentru aceste
tehnologii *plica0ia este destinată dispozitivelor mobile ce rulează *ndroid 1i, prin urmare, aceasta a fost realizată folosind *ndroid S# eoarece s&a dorit conectarea la re0eaua de socializare -aceboo. 1i folosirea anumitor date ale utilizatorilor, a fost folosit 1i -aceboo. S# *mbele S&uri sunt disponibile pentru a fi descărcate în mod gratuit de pe site&urile oficiale# 6
Mediul de programare ales este AD /Android De'eloer ools06 *cesta este o e)tensie a mediului de programare $clipse +$, av%nd integrat *ndroid S# Codul sursă a fost scris în limbajul Hava# În continuare vor fi detaliate tehnologiile folosite în realizarea aplica0iei, precum
1i
justificarea folosirii acestora# acestora#
+latforma Android
Caracteristici Andro Android id *ndroid este un sistem de operare din familia ni), bazat pe .ernel&ul Jinu), cu o interfa interfață utilizator utilizator bazată pe manipular manipularee directă, directă, proiectată proiectată în primul r%nd pentru dispozitive dispozitive mobile cu ecran tactil (touchscreen", folosind input&uri de tip atingere# n aspect foarte important legat de *ndroid îl constituie faptul că are codul sursă publicat de către Google sub licențe open&source# *cest lucru a format o comunitate comunitate activă de dezvoltatori ce folosesc codul sursă sursă al proiectului *?S' *?S' (*ndroid ?pen ?pen Source 'roject" pentru a dezvolta dezvolta și dist distri ribu buii prop propri riile ile vers versiu iuni ni mo modi dific ficat atee ale ale sist sistem emul ului ui de oper operar are# e# *cest cestea ea aduc aduc dese deseor orii func funcționali ionalită tăți noi și actual actualiză izări ri pentru pentru dispozit dispozitive ive mai repede repede dec%t dec%t producă producător torul ul oficial oficial sau oper operat ator orul ul de tele telefo foni niee mo mobi bilă lă,, totu totuși, fără fără a gara garant ntaa func funcționa ionare reaa la para parame metri tri optim optimi# i# e asemenea, comunitatea oferă suport continuu pentru dispozitivele mai vechi ce nu mai primesc actualiză actualizări ri oficiale și ajută utilizatorii utilizatorii nee)perim nee)perimenta entați să porteze porteze *ndroid *ndroid pe dispozitiv dispozitivee ce oficial rulează alte sisteme de operare# Kersiunile lansate de comunitate sunt de cele mai multe ori pre&roo pre&rooted ted și conțin modifică modificări ri inadecva inadecvate te pentru pentru utiliza utilizatorii torii neini neinițiați în acest acest domen domeniu, iu, cum cum ar fi capac capacita itatea tea de suprat supratura urare re sau sau subtu subturare rare a proces procesoru orului# lui# CyanogenMod este versiunea comunitară cea mai populară populară și stă la baza baza majorită majorității celorlalte# celorlalte# e&a lungul lungul timpului, timpului, producătorii producătorii de dispozitive dispozitive și operatorii operatorii de telefonie telefonie mobilă au descurajat orice tentativă de dezvoltare de versiuni paralele a sistemului de operare de către o terță parte# parte# 'roducă 'roducător torii ii își e)prim e)primăă îngrijo îngrijorar rarea ea cu privire privire la func funcționare ionareaa necor necoresp espuză uzătoa toare re a dispozitivelor ce ce rulează astfel de versiuni neoficiale neoficiale și costurile de asistență ce rezultă din acest motiv# motiv# Mai mult dec%t at%t, firmare&ur firmare&urile ile modificate modificate oferă de multe ori funcț ionalită ionalități precum tethering&ul, pentru care operatorii ar percepe un tarif suplimentar# e aceea, multe dispozitive 7
au acces acces restric restricționat la permis permisiunile iunile de de root (admin" (admin" sau sau bootload bootloader&u er&ull blocat# blocat# Chiar Chiar și a șa, cum versiunile dezvoltate de comunitate au devenit tot mai populare iar în S##*# a fost dată chiar o lege în acest acest sens (devenind (devenind legale", legale", producăto producătorii rii au luat pozi ții din ce în ce mai pu țin radicale, radicale, ajung%nd ajung%nd la ora actuală să sprijine sprijine dezvoltarea dezvoltarea lor# Ca urmare a acestui acestui fapt, un număr tot mai mare ma re de dispoz dispozitiv itivee sunt sunt livrate livrate debloc deblocate ate,, pentr pentruu a scăpa scăpa utiliz utilizato atorul rul de ocolire ocolireaa tuturo tuturor r restric restricțiilor hardare hardare în cazul în care acesta acesta optează optează pentru instalarea instalarea unei versiuni versiuni neoficiale neoficiale (tot (totuuși, în 7>D 7>D dint dintre re cazu cazuri, ri, proce proced% d%nd nd astfel astfel,, se pierde pierde garan garanția"# ia"# eși prod produc ucăt ători oriii au o atitudine tot mai deschisă, deschisă, mulți operatori de telefonie comandă comandă încă dispozitive dispozitive blocate, pentru a se asigura asigura de fidelitatea clienților lor#
Ar)itectura e ni'eluri a sistemului Android Sistemul de operare *ndroid este structurat, conform figurii A, pe mai multe nivele, fiecare nivel depinz%nd de func0ionalită0ile oferite de nivelul inferior acestuia#
8
.i%ură 1 : ,rhitectura siste!ului ,ndroid (sursă : http://&&&cpro%ra!!in%co!/android/android-%ettin%-startedht!l* http://&&&cpro%ra!!in%co!/android/android-%ettin%-startedht!l*
:ivelul Linu% -ernel stă la baza arhitecturii *ndroid 1i asigură func0ionalită0i de bază precum gestionarea proceselor, gestionarea sistemului de fi1iere, gestiunea retelistica a dispozitivului 1i driverele# Sistemul Sistemul de operare *ndroid *ndroid este derivat din Jinu) ernel ernel =# și este de fapt creat de la sursă Jinu), compilate pentru pentru dispozitive mobile# ernel&ul acționează ca un strat de abstractizare abstractizare hardare între hardare hardare și stiva softare&ul *ndroid# Jibrăria standard de C a *ndroid&ului,
Librar arie iess cupr :ivelul Libr cuprin inde de un set set de libr librăr ării ii CLC CLC ce stau stau la baza baza func func0i 0ion onăr ării ii componentelor sistemului *ndroid# ? librărie prezentă în acest nivel este SNJite pe care am folosit&o în cadrul aplica0iei prezentate pentru a stoca date persistente# 9
SQLite este o bibliotecă publică în cadrul căreia se găse1te implementarea unui motor de
baze de date, date, de sine stătător, stătător, care nu necesită necesită server sau sau alte configura0ii speciale# speciale# Citirea 1i scrierea datelor se face direct pe dis., o bază de date completă SNJ cu mai multe tabele, vie&uri, inde)i 1i triggeri fiind stocată sub forma unui singur fi1ier# *ceste fi1iere sunt salvate în memoria dispozitivului în directorul9 DATA/data/NUM DATA/data/NUMELE_APLI ELE_APLICAŢIEI/databases CAŢIEI/databases/NUMELE_A! /NUMELE_A!EI_DE_DA EI_DE_DATE TE
-ormatul fi1ierelor stocate este cross&platform, facilit%nd portarea bazelor de date SNJite# !ipurile de date ce pot fi folosite în SNJite sunt !$O! (echivalentul tipului de date String din Hava", +:!$G$; +:!$G$; (echivalentul (echivalentul tipului de date long din din Hava" și ;$*J (echivalentul tipului de date double din Hava" însa nu se face validarea automată a tipurilor de date înainte ca acestea să fie introduse în baza de date# *ndroid S con0ine o serie de clase cu ajutorul cărora poate fi accesat SNJite 1i se poate efectua opera0ii asupra bazelor de date# *ceste clase sunt în pachetul android" Database ș i android" Database" S$lite"
*lte librării prezente la acest nivel al arhitecturii sunt9 ➢ Surface Surface Manager9 Manager9 Supor Suportă tă diferite diferite formate formate și codec&uri codec&uri audio audio și video, video, inclusiv inclusiv
redarea și înregistrarea lor# ➢ S/stem C Jibraries9 n subset al librăriei standard C (libc" special adaptată pentru dispozitive mobile pe care rulează rulează Jinu) ➢ ?penGJ $S Jibraries9 *cestea sunt bibliotecile grafice pentru randare grafica = și
A#
:ivelul Android Runtime include un set de librării care au disponibile marea parte a func0i func0iona onalită lită0ilo 0ilorr dispon disponibil ibilee pentru pentru limbaj limbajul ul de progra programar maree Hava# Hava# În cadrul cadrul acestu acestuii nivel nivel fi1ierele" Class sunt convertite de sistemul *ndroid în fi1iere " De% (un tip special de b/tecode optimizat optimizat pentru dispozitiv dispozitivee mobile fiind necesare necesare pu0ine pu0ine resurse"# resurse"# *ndroid *ndroid rulează în mașina virtuală virtuală alvi.P de la versiunea versiunea @#@, este suportată suportată o nouă ma șină virtuală e)perimen e)perimentală, tală, *;! *;!, care nu este însă activată în mod implicit# *ceasta rulează fi1ierele " De%, fiindu&i alocată c%te o ma1ină virtuală fiecărei aplica0ii#
Alication n Frame=or. Frame=or. oferă dezvoltatorilor un set foarte mare de *'+&uri :ivelul Alicatio pentru ca ace1tia să nu fie nevoi0i să scrie fiecare ac0iune întreprinsă de sisiemul de operare atunci c%nd dezvoltă o aplica0ie *ndroid# *ceste servicii 1i mecanisme stau la baza func0ionării tuturor aplica0iilor# intre acestea amintim9 ➢ *ctivit/ Manager9 gestionează ciclul de via0ă al aplica0iilor 1i poate avea mai
multe stăriP o aplica0ie poate avea mai multe activiatati care pot avea ciclul lor de via0ăP 10
e)istă o activitate principală care porne1te atunci c%nd aplica0ia este lansatăP o activitate se încheie atunci c%nd este lansată o altă activitate ➢ :otification Manager9 *cest manager permite aplicațiilor să creeze alerte personalizate ➢ ;esource ;esource Managers9 Managers9 *plica *plicații au nevoie nevoie de resurse resurse e)terne, e)terne, cum ar fi imagini, imagini, 1iruri de caractere, etc !oate aceste resurse sunt gestionate de către managerul de resurse, care le face disponibile într&un mod standardizat# ➢ Conten Contentt 'rovid 'rovider9 er9 *plic *plicaații împărt împărtăășesc, esc, de asemene asemeneaa date# date# in c%nd în c%nd, c%nd, o singură singură cerere poate poate avea nevoie de unele date din altă aplica ție# *cest *cest acces la date la altă aplicație este activată activată de către către content provider provider :ivelul Alications este ultimul nivel 1i este reprezentat de aplica0iile create de către dezvoltatori 1i care pot fi folosite de utilizatorii finali# ? apli aplica cație cons constă tă într într&u &unn fișier ier# *p. (andr (androi oidd pac. pac.ag age" e" și con conține, ine, de obice obicei, i, A componente9 Q -i1ier -i1ierul ul e)ecuta e)ecutabil bil alvi. alvi. I reprez reprezintă intă codul codul sursă sursă Hava compila compilatt pentru pentru a obține e)ecutabilul 1i care e rulat de ma1ina virtuală alvi.# Q ;esurse ;esurse I orice orice nu este este cod sursă sursă este este o resursă resursă## *plica *plica ția poate poate să con con țină imagini, imagini, fișiere audioLvid audioLvideo eo și numeroa numeroase se fișiere OMJ care descriu descriu la/ou la/out&ul, t&ul, etc# Q Jibrăr Jibrării ii native native I ?pțional, ional, aplic aplicaația poate poate con0in con0inee librării librării native native,, CLC, CLC, care sunt sunt incluse incluse în în fișierul *p. *p.## *ceste aplica0i sunt formate din componente slab cuplate, legăturile fiind făcute printr&un fi1ier manifest#)ml# În cadrul acestui fi1ier sunt prezente metadate despre fiecare componentă 1i cum interac0ionează cu altă componentă#
Elemente comonente 'entru a putea trece la detaliile de implementare, trebuie să e)plicăm mai înt%i c%teva componente specifice platformei9
&" Intents ' Intent (ilters
11
n intent este un obiect obiect de mesagerie ce ce poate fi folosit pentru a solicita solicita o ac țiune din altă component componentăă a aplica aplicației# eși intent&urile intent&urile facilitează facilitează comunica comunicarea rea între componen componente te în diferite moduri, putem separa trei cazuri de utilizare fundamentale9 ❖ eclan eclanșarea area unei unei activ activită ități
? activita activitate te reprezi reprezintă ntă un singur singur ecran ecran al aplic aplicaației# iei# 'uteți începe începe o nou nouăă instan instan ță a unei unei activită activități pas%nd un intent ca parametru parametru func ției start*ctivit/ start*ctivit/ ("# *cesta *cesta descrie descrie activitatea activitatea ce urmează să pornească și conține toate datele necesare# acă acă dori doriți să primi primiți un rezulta rezultatt în momentu momentull în care activita activitatea tea se termină, termină, trebuie trebuie să apela apelați metoda metoda start*ctiv start*ctivit/-o it/-or;esu r;esult lt ("# *ctivitatea *ctivitatea dumneavoast dumneavoastră ră va primi rezultatul rezultatul sub forma unui intent separat, în cadrul callbac.&ului on*ctivit/;esult ("# ❖ eclan eclanșarea unui serviciu serviciu
n serviciu este o componentă componentă care efectuează opera țiuni în fundal, fără a avea nevoie de o interfa interfață utilizator utilizator## 'uteți porni un serviciu serviciu pentru pentru a efectua efectua o operațiune o singură singură dată (cum (cum ar fi descărcar descărcarea ea unui fi șier", pas%nd pas%nd un intent metodei startServic startServicee ("# *cesta *cesta descrie descrie serviciul ce urmează să pornească și conține toate datele necesare# În cazul cazul în care servici serviciul ul este proiect proiectat at cu o interf interfaață client client I serve server, r, vă puteți lega lega la serviciu din altă componentă componentă a aplicației pas%nd pas%nd un intent funcției bindService bindService ("# ❖ !ransmiterea !ransmiterea unui broadcast
n broadcast broadcast reprezintă reprezintă un mesaj ce poate poate fi primit primit de orice aplicație# Sistemul Sistemul transmite transmite astfel astfel de mesaje mesaje pentru diverse diverse evenimente, evenimente, cum ar fi atunci c%nd sistemul sistemul porne ște sau c%nd dispozitivul începe să să se încarce# tilizatorul tilizatorul poate trimite și el mesaje de tip broadcast broadcast către alte aplic licații pas%nd un intent către una din urmă rmătoarele trei rei metode9 sendroad)ast*+ , , send-rderedroad)ast*+ send-rderedro ad)ast*+ , sendSti)kyroad)ast*+ , sendSti)kyroad)ast*+""
in punct de vedere al specificită specificității, putem de asemenea deosebi deosebi două tipuri de intent&uri9 ➢ $)plicite I specifică numele componentei ce trebuie să pornească (mai e)act
numele num ele complet complet al clasei clasei"# "# Keți folosi folosi de obice obiceii un intent intent e)plici e)plicitt pentru pentru a porni porni o activitate activitate sau sau un serviciu serviciu din din cadrul cadrul propriei propriei aplica aplicații, deoarece deoarece cunoa cunoa ște ți numele clasei clasei componen componentei tei respectiv respective# e# e e)emplu e)emplu,, declan declan șa ți o nouă activita activitate te ca răspuns răspuns la o ac țiune efectuată efectuată de utiliza utilizator tor sau porni porniți un serviciu serviciu pentru pentru a descărca descărca un fișier în fundal# fundal# ➢ +mplicite I nu denumesc o componentă componentă specifică însă declară declară o ac țiune generală, ceea ce permite unei component componentee din altă aplica aplica ție să o efectueze# efectueze# e e)emplu, dacă dori doriți să arăta arătați utilizat utilizatoru orului lui o loca locație pe hartă, hartă, pute puteți utiliza utiliza un intent intent impli implicit cit pentr pentruu a solicita ca o altă aplicație capabilă să facă acest lucru# lucru# 12
*tunci *tunci c%nd creați un intent e)plicit e)plicit pentru a porni o activitate activitate sau un serviciu, serviciu, sistemul sistemul lansează imediat componenta specificată# În cazul unui intent implicit, sistemul caută cea mai potrivită componentă prin compararea con conținutului acestuia cu cu filtrele de intenție (intent filters" I declarate declarate în fișierele ierele manifest manifest I ale altor altor aplica aplicații instalate instalate pe dispoz dispozitiv itiv## acă acă sistemul sistemul găsește o singură singură potrivire, potrivire, lansează lansează imediat imediat componen componenta# ta# *ltfel, *ltfel, afi șează ează o fereastră (de tip dialog" dialog" prin care utilizatorul poate poate alege ce aplicație să fie utilizată#
.i%ură 2 : Utiliarea intent$urilor (sursă : http://developerandroidco!/%uide/co!ponents/intents$)ltersht!l http://developerandroidco!/%uide/co!ponents/intents$)ltersht!l * *
Sche Schema ma din Fi*ura ! ilustrează cum este pasat un intent implicit prin intermediul sistemulu sistemuluii pentru a începe o nouă activitate# activitate# *șadar, adar, activitatea activitatea * crează crează un intent ce con ține o startA)ti.ity i.ity *+" Sistemul caută în toate descr descriere iere a ac acțiunii iunii de efec efectua tuatt și îl paseaz paseazăă metode metodeii startA)t
aplicațiile un intent filter potrivit pentru intent&ul primit# *tunci *tunci c%nd găseș te o potrivire, sistemul sistemul pornește acea activitate (în cazul nostru, activitatea <" prin invocarea metodei onCreate *+ căreia îi pasează intent&ul# n intent intent filter filter este este o e)pres e)presie ie I aflată aflată în fi șierul ierul manifes manifestt al aplic aplicaației I ce specifi specifică că tipurile de intent&uri pe care componenta acceptă să le primească# e e)emplu, prin declararea unui intent filter pentru o activitate, devine posibil posibil ca aceasta să fie deschisă de către către alte aplica ții prin intermediul unui anumit intent# e asemenea, asemenea, dacă nu este declarat niciun filtru pentru o activitate, atunci ea poate fi pornită doar e)plicit# in motive de securitate, este recomandat ca pornirea serviciilor să fie făcută printr&un intent intent e)plicit, fără a declara filtre# filtre# -olosind un intent implicit, implicit, nu poți fi sigur sigur cine îl va prelua, prelua, iar utilizatoru utilizatorull nu poate vedea vedea ce serviciu serviciu pornește# 13
" A)ti.ity
? activ activita itate te este este o compon component entăă a aplica aplicației care oferă oferă un ecran ecran cu care care utiliz utilizato atorii rii pot intera interaccționa iona în scopul scopul de a face face ceva, ceva, cum ar fi să formeze formeze un număr număr de telefon telefon,, să facă o fotografie, să trimită un e&mail, sau pentru a vizualiza o hartă# -ereastra umple tipic ecran, dar poate fi mai mică dec%t dec%t acesta și poate sta deasupra deasupra altor ferestre# ? aplic aplicaație poate poate con0ine con0ine una sau mai multe compon component entee de tip *ctiv *ctivit/ it/ în func func ție de desig design, n, una distre distre aceste acesteaa fiind fiind ma marca rcată tă ca și activi activitat tatea ea princi principa pală lă a aplica aplicației# iei# *ctiv *ctivita itate te principală va fi lansată lansată în e)ecu0ie la pornirea aplica0iei# 'entru 'entru a crea crea o activ activita itate, te, trebuie trebuie să crea crea ți o subcl subclasă asă de *ctiv *ctivit/ it/## În aceas această tă subcla subclasă să trebuie să suprascrieti metodele care sunt apelate atunci c%nd activitatea trece dintr&o stare în alta pe parcursul ciclului de via0ă, ca de e)emplu la creare, la opriere, la revenire sau la distrugere# Cele mai importante metode care trebuie tr ebuie suprascrise sunt9 ➢ onCreate ("9 ("9 această metodă trebuie implementată obligatoriu pentru a putea fi
apel apelat atăă c%nd c%nd este este crea creată tă acti activi vita tate tea# a#În În cadr cadrul ul aces aceste teii me meto tode de treb trebui uiee ini0i ini0ial aliz izat atee componentele de bază ale activită0ii# ➢ on'ause ("9 ("9 sistemul apelează această metodă la primul semn ca utilizatorul a părăsit activitatea curentă# curentă#
14
.i%ură 3 : iclul de viață al unui ,ctivit (sursă : http://developerandroidco!/%uide/co!ponents/activitiesht!l http://developerandroidco!/%uide/co!ponents/activitiesht!l * *
15
-igura A ilustrează diverse căi pe care le poate lua o activitate între diferite stări ăla acesteia# acesteia# reptunghiur reptunghiurile ile reprezintă metodele metodele suprascrise suprascrise care le pute ți implementa implementa pentru a efectua opera operațiuni în cazul cazul în care în activitatea respectivă respectivă se face face tranziția între stări# ? activitate poate e)ista în una din cele trei stări9 ❖ 0es12ed 3 *ctivitatea este în prim&planul ecranului fiind utilizată# (*ceastă stare
este uneori uneori menționată ca 5stare activă3#" activă3#" ❖ Pa1sed 3 *ctivitatea nu se află în prim&plan dar este încă vizibilă# Componentele activită0ii aflate în această stare nu interac0ionează cu utilizatorul însă sunt ata1ate manager&uluii de ferestre fiind vizibile utilizatorului# manager&ulu Sto44ed 3 A)ti.itatea este )o24let a)o4erit de o alt5 a)ti.itate *a)ti.itatea este a)12 6n 7ba)kgro1nd7+" 7ba)kgro1nd7+" C1 C1 toate a)estea, a)esta a)esta n1 2ai este .i8ibil 4entr1 1tili8ator 1tili8ator ș i 4oate 9i 6n):is5 de siste2 sis te2 at1n)i );nd este ne.oie ne.oi e de 2e2orie 6n alt5 4arte"
În cazul în care o activitate este întreruptă sau oprită, sistemul poate scădea din memorie, fie fie prin prin soli solici cita tare reaa ca acea aceast staa să se term termin inee (ape (apelu lull me meto tode deii finish ("", ("", sau sau pur pur și simp simplu lu închiderea procesului# C%nd activitatea este deschisă din nou (după ce a fost terminată sau închisă", acesta trebuie să fie crea0ă peste tot# <" (rag2ents
n fragment fragment reprezi reprezintă ntă un compor comportam tament ent sau o porțiune iune de interfa interfață grafic graficăă dintr& dintr&oo activitate# *cesta *cesta a fost creat 1i introdus în cadrul lansării *'+&ului 66 (sau *ndroid *ndroid A#>" pentru a permite unei interfe0e grafice să fie mai fle)ibilă deoarece în cazul tabletelor ecranul este mult mai mare dec%t al unui telefon mobil# Spre e)emplu o aplica0ie poate folosi un obiect de tip -ragment pentru a afi1a o listă de articole în st%nga iar în dreapta poate folosi un alt obiect de tip -ragment pentru a afi1a detalii despre obiectul selectat din listă, ambele obiecte -ragment afl%ndu&se în cadrul aceluia1i obiect *ctivit/# $)emplul cu aceste = obiecte -ragment este ilustrat în figură de mai jos#
16
.i%ură 4 : Utiliarea ra%!entelor (sursă : http://developerandroidco!/%uide/co!ponents/ra%!entsht!l http://developerandroidco!/%uide/co!ponents/ra%!entsht!l * *
Într&o activitate se pot combina mai multe (obiecte de tip" fragmente pentru a construi o interfa0ă grafică, iar un fragment poate fi utilizat în mai multe activită0i# Ciclul de via0ă al unui obiect de tip -ragment este similar cu cel al unui obiect de tip *ctivit/# 'entru a adăuga un obieect de tip -ragment la o nouă activitate se poate proceda în două moduri9 ❖ eclararea fragmentului fragmentului în interiorul fișierului de la/out al activită0ii9
În acest caz se specifică propietatile fragmentului la fel ca pentru un vie# e e)emplu pentru o activitate cu două fragmente vom avea9
> <ragment class= class ="com.example.android.apis.app.!ragmentLayout#itles!ragment" android:id= android:id ="$%id/titles" android:layout_weight android:layout_weight= ="&" android:layout_width= android:layout_width ="'px" android:layout_height android:layout_height= ="match_parent" /> *S1rs5 e%e24l1 )od 3 :tt43//de.elo4er" :tt43//de.el o4er"android")o2/g1ide/)o24on android")o2/g1ide/)o24onents/9rag2ents" ents/9rag2ents" :t2l+
17
upă cum se observă, fiecare fragment trebuie să aibă un identificator unic pentru ca atunci c%nd activitatea este repornită, sistemul să poată restaura fragmentul# ❖ *dăugarea fragmentului la un obiect KieGroup KieGroup e)istent
În orice moment, în timp ce activitatea se e)ecută, se poate adăuga fragmente la activitate# !rebuie doar se fie specificat KieGroup&ul KieGroup&ul la care se adaugă# 'entru a putea face diferite ac0iuni cu fragmente într&o activitate (adăugare, 1tergere sau înlocuire" trebuie să folosim *'+&ul -ragment!ransaction# -ragment!ransaction# ? instan0ă de -ragment!ransaction -ragment!ransaction se poate ob0ine astfel9 astfel9 !ragment,anager ragment,anager ragment,anager = get!ragment,anager - !ragment#ransaction ragment#ransaction = ragment,anager ragment,anager. .(egin#ransaction (egin#ransaction- - *S1rs5 e%e24l1 )od 3 :tt43//de.elo4er" :tt43//de.el o4er"android")o2/g1ide/)o24on android")o2/g1ide/)o24onents/9rag2ents" ents/9rag2ents" :t2l+
'entru a adăuga un fragment se folose1te metoda add (" specific%nd fragmentul de adăugat 1i vie&ul în care se dore1te adăugarea# Spre e)emplu9 *xample!ragment ragment = new *xample!ragment *xample!ragment ragment *xample!ragment- - ragment#ransaction .addadd-0.id. id.ragment_container 1 ragment ragment ragment#ransaction .commit- commit- *S1rs5 e%e24l1 )od 3 :tt43//de.elo4er" :tt43//de.el o4er"android")o2/g1ide/)o24on android")o2/g1ide/)o24onents/9rag2ents" ents/9rag2ents" :t2l+
Se poate adăuga un fragment care să con0ină opera0ii de bac.ground, nu doar componente grafice# *cest *cest lucru se face tot cu ajutorul metodei add (-ragment, ( -ragment, Str%ng" oferind însă un str%ng de identificare unic în loc de id&ul vie&ului# =" Ser.i)es
n serviciu serviciu este o componen componentă tă de aplica aplica ție care poate poate efectua efectua opera ții de func ționalitate ionalitate în fundal și nu oferă o interfață cu utilizatorul# ? componentă componentă a unei unei aplicație poate începe un serviciu și va continua continua să ruleze în fundal, chiar dacă dacă utilizatorul trece la altă aplicație# >" Content Pro.iders
?biectele de tip Content 'roviders gestionează accesul la un set structurat de date# *cestea încapsulează datele 1i pune la dispozi0ie mecanisme de definire a securită0ii datelor# ?biectele Content 'roviders sunt interfe0e standard care conectează datele dintr&un proces cu codul care rulează într&un alt proces# nele elemente de bază ale sistemului *ndroid con0in componente de tip Content'rovider pentru a face datele disponibile altor aplica0ii# 18
atele puse la dispozi0ie de un anumit furnizor sunt accesate folosind un obiect de tip Content;esolver# *cesta este un obiect client care asigură opera0ii de creare, citire, update 1i 1tergere asupra datelor din Content'rovider# atele gestionate de un obiect de tip Content'rovider pot fi9 audio, video, imagini 1i fi1iere de baze de date SNJite#
Android SD- *ndroid S reprezintă o colec0ie de softare 1i de tool&uri specifice cu ajutorul cărora se pot dezvolta aplica0ii pentru sistemul de operare *ndroid# *ceastă colec0ie poate fi descărcată separat prin intermediul S Manager&ului# În continuare sunt prezentate c%teva pachete importante9 Tabel 3 : achete preente in 56 ,ndroid (sursă : http://developerandroidco!/sd'/e7plorin%ht!l http://developerandroidco!/sd'/e7plorin%ht!l * *
+ac)et
Descriere
Locali1are >n cadrul SD-
S !ools
Cuprinde unelte necesare necesare depanării si testării testării aplicațiilor alături de
Rsd.LtoolsL
alte utilitare necesare dezvoltării aplicațiilor# S 'latform&tools
Conține unelte specifice anumitor anumitor platforme platforme de *nd *ndroid roid necesare necesare Rsd.Lplatform& proiectării respectiv depanării aplicațiilor specifice platformei toolsL respective#
ocumentation
? copie offline offline actualizată actualizată a documenta documentației *'+&urilor *'+&urilor diverselor diverselor Rsd.LdocsL platforme *ndroid
S 'latform S/stem +mages
$)istă o platforma S pentru fiecare versiune de *ndroid lansată,
Rsd.LplatformsLRa
care poate fi aleasă ca și platformă țintă pentru aplicații#
ndroid&versionL
-iecare platformă oferă una sau mai multe imagini sistem pentru
Rsd.LplatformsLRa
procesoarele *;M sau O4#*ceste imagini sistem sunt necesare
ndroid&versionL
emulatorului de *ndroid pentru a putea rula# Sourcess for *nd Source *ndroid roid ? copie a codului sursă pentru componentele diverselor platforme
Rsd.Lsources
S
de *ndroid#
Samples for S
$)empl $)emplee care care ilustr ilustrea ează ză func funcționali ionalita tațile divers diverselo elorr *'+&u *'+&uri ri de Rsd.LplatformsLRa *ndroid#
ndroid& versionLsamplesL
Google *'+
'achet 'achet special ce permite unei aplicații să apeleze apeleze servicile servicile oferite
19
Rsd.Ladd&onsL
de Google prin intermediul Google *'+# *ndroid Support
Jibrarie Jibrarie de suport care poate fi inclusă în aplica aplicații pentru a putea
Rsd.Le)trasLandro
oferii acestora acestora funcționalită ionalități disponibile disponibile unui nivel *'+ superior superior în idLsupportL cazul în care acestea trebuie să ruleze pe o versiune de *ndroid mai nouă# Google 'la/
Jibrărie statică care permite integrarea unui serviciu de ta)are în
Rsd.Le)trasLgoogl
apli aplica cații# ii#
eL
'la/ Jibrăr Jibrărie ie ce oferă funcționali ionalită tăți de verifi verificar caree a licen licențelor elor pentru Rsd.Le)trasLgoogl
Jicensing
aplica aplicații atunci atunci c%nd c%nd aceste acesteaa sunt sunt distrib distribuit uitee prin prin interm intermedi ediul ul eL magazinului virtual Google 'la/#
Faceboo. SD- entru Android (a)ebook SD? oferă
o solu0ie simplă 1i rapidă pentru a integra u1or platforma de
socializare cu aplica0iile dezvoltate pentru sistemul de operare *ndroid# *cest S oferă suport pentru autentificarea în cadrul aplica0iei cu datele unui utilizator al platformei de socializare, manipularea obiectelor prezente în *'+&ul -aceboo. precum 1i suport pentru componentele interfe0ei grafice specifice# Gra4: API este este
principala modalitate de a adăuga 1i e)trage date din platformă de
socializare# Cu ajutorul acestui *'+ este posibilă interogarea datelor, încărcarea pozelor 1i multe alte activită0i necesare unor aplica0ii ăla acestei platforme#
AD /Android De'eloment ool0 *! este un mediu de dezvoltarte $clipse care are integrat S&ul de *ndroid# $clipse este un mediu de dezvoltare softare folosit pentru a scrie aplica0ii în Hava# $ste structurat sub forma unei ierarhii de plugin&uri care asigură diferite func0ionalită0i# *! a fost creat pentru a facilita dezvoltarea aplica0iilor destinate dispozitivelor care rulaeaza sistemul de operare *ndroid# *cesta e)tinde capabilită0ile mediului de dezvoltare $clipse, oferind în plus posibilitatea de a proiecta interfe0e grafice special
20
.i%ură " : 8ediul de devoltare ,5T
!ot cu ajut ajutor orul ul aces acestu tuii tool tool se poate adăuga noi versiuni de *'+ precum 1i crearea unor emulatoare pentru a putea instala aplicatile create# upă cum se observa, din componenta Manager
*ndroid se
poate
S instala
versiunea de *'+ dorită pentru a dezvolta aplica0ia#
.i%ură # : 56 8ana%er
21
'entru a testa aplica0ia se poate opta fie pentru a utiliz liza
un
dispozitiv
mobil fie prin a crea un disp dispoz ozit itiv iv virt virtua uall care care simulează simulează toate aproape aproape toate caracteristicile unui dispozitiv mobil#
De1'oltarea alica2iei
22
În acest acest capitol capitol vom vom prezenta prezenta structura aplicației , cum funcționează aceasta și elementele elementele folosite pentru dezvoltarea ei# Structura aplicației +nterfa +nterfața aplica aplicației cuprin cuprinde de 8 ferestr ferestre# e# C%nd C%nd este este lansată lansată aplica aplica ția se afișază activi activitatea tatea
principala (Main*ctivit/"# *ceastă activitate conține un intent care care este folosit pentru a obține date de la aplicația -aceboo. utilizate pentru pentru a se putea realiza cone)iunea cone)iunea la contul deja autentificat în aplicație# !ot !ot din această activitate principală se se vor putea accesa celelalte celelalte ferestre ale aplicației# *stfel *stfel se v&a putea ajunge la fereastra care permite permite selectarea prietenilor# prietenilor# upa selectarea prietenilor pentru care se dorește să se facă topul preferințelor , o alta fereastra fereastra v&a fi afișată ,iar din aceas aceasta ta se va putea putea alege alege topul topul care se dore dorește a fi vizualiza vizualizat#t# 'entru 'entru fiecare fiecare top va fi deschisă deschisă alta fereastra fereastra în care acesta va fi afișat# :avigarea în aplicație se va face cu ajutorul ajutorul butoanelor prezente prezente în fiecare fereastră# fereastră#
.i%ură 9 .erestrele aplicației
-igura de mai sus ne prezintă cele 8 activități și posibilitatea de a naviga printre printre acestea# acestea# 'entru a putea face legătura între cele cele 8 activități am folosit obiecte de tip +ntent# *ceste *ceste obiecte conțin informa informații pentru pentru a putea putea conec conecta ta două două compo component nentee ale aplica aplica ției# +ntent&ul +ntent&ul creat creat conține 23
doi parametrii 9 clasa din din care este apelat apelat intent&ul respectiv și clasa căruia sistemul sistemul ar trebui să transmită intent&ul# 2ntent intent 2ntent intent = new 2ntent 2ntent-,ain3cti4ity.this1select_preerences.class
?biectul intent este apelat apelat din clasa clasa Main*ctivitu/ Main*ctivitu/ și este transmis transmis clasei clasei selectTpreferences# ? activitate nouă este lansată cu ajutorul comenzii startA)ti.ity*+ care primeste ca parametu un +ntent# +ntent# Sistemul primește apelul ș i pornește o instamță a *ctivit/&ului *ctivit/&ului specificat de intent# În continuare continuare vom prezenta *ctivit/&urile și clasele declarate, eviden evidențiind felul în care acestea se leagă leagă între ele# *ceasta aplica ție folosește anumite anumite obiecte obiecte prezente prezente în SIul oferit oferit de -aceboo. -aceboo. dezvoltatorilor și vor fi folosite ca atare , preciz%ndu&se scurt scurt principalele lor caracteristici#
?ainActi'it@ *ceastă activitate este lansată la prima interacțiune a utilizatorului cu aplicația# in cadrul acestei ferestre pot pot fi accesate celelalte activități ale aplicației , și anume anume selectarea selectarea prietenilor pentru care se dorește să se alcatuiască alcatuiască topul preferințelor și afișarea acestui top# (informa (informații despre despre versiunea versiunea curen curentă tă a aplica aplicației"# În această fereastră fereastră utilizatorul poate efectua efectua doua acțiuni prin intermediul a două două butoane# 'rima ac acțiune accesată prin prin butonul Pi)k (riends lansează o nouă activitate care permite selectarea prietenilor in listă# * doua acțiune disponibila prin prin butonul S:o@ To4 To4 & Pre9eren)es lansează o nouă acțiune care la randul ei are mai multe opțiuni de a alege topurile
dorite# Main*ctivit/&ul constituie clasa clasa plincipală a aplicației , aici făc%ndu&se majoritatea operațiilor# În cadrul acestei acestei clase s&a folosit un obiect Session Session care are ca scop autentificarea și gestionarea sesiunilor de conectarea ale unui utilizator la -aceboo.# ? sesiune trebuie sa fie deschisă atunci atunci cand un utilizator dorește să facă o anumită cerere cerere rețelei de socializare# socializare# 'entru a știi
în ce moment moment al cilulului de viață al aplicației ne aflam , este folosit un obiect SessionState #
?data ce o sesiune a fost închisă , aceasta nu mai poate fi redeschisă , fiind necesară crearea unui nou obiect Session# 'entru a lucra cu obiectele Session am folosit clasa UiLi9e)y)leBel4er # 24
*ceastă clasa permite crearea , deschiderea automata , salvarea si restaurarea sesiunii într&un mod similar similar ciclului ciclului de viață al interfețelor grafice grafice *ndro *ndroid# id#
.i%ură .olosirea Ui;ieccle
Întruc%t din această fereastră se face navigarea către alte doua *ctivit/&uri au fost definite doua butoane cărora li s&a asociat un listener care la apasarea butonului face trecerea la activitatea noua precizată prin obiectul +ntent#
.i%ură 10 ,pelarea altor ,ctivit$uri
+ic.FriendsActi'it@ *ceastă clasă utilizează (riendPi)ker(rag2ent pentru a afișa lista de prieteni prieteni a utilizatorului# Metoda 4o41latePara2eters*+ este folosita pentru a popula ce dorim sa transmitem obiectului (riendPi)ker(rag2ent" 25
În această clasă în metoda suprascrisă onStart*+ folosim un obiect -riend'ic.er*pplication -riend'ic.er*pplication care contine o listă de utilizatori (Graphser"#
.i%ură 11 8etoda ontart(* din ic'.riends,ctivit
În această metodă se apeleaza loadData*+ din clasa (riendPi)ker(rag2ent care la randul ei seteaza lista lista de prieteni cu obiectele preluate cu ajutorul Graph *'+ Clasa Pi)k(riendsA)ti.ity este apelata în Main*ctivit/ prin metoda startPi)k(riendsA)ti.ity*+"" În cadrul acestei startPi)k(riendsA)ti.ity*+ acestei metode , ne asiguram asiguram ca sesiunea sesiunea este deschisă și
astfel putem lansa activitatea pentru pentru selecția prietenilor# *cest lucru se realizează realizează tot prin folosirea unui +ntent#
.i%ură 12 .i%ura 3" 8etoda startic'.riends,ctivit(* din 8ain,ctivit
Selectreferences *ceastă activitate este este apelată tot din din Main*ctivit/ și cuprinde B butoane butoane care permit lansarea unei unei noi activitați# *cete *cete butoane sunt sunt 9
26
.i%ură 13 .i%ura 3# 5eclarearea butoanelor clasei clasei elect-preerences
*ceastă navigare către celelalte ferestre se face tot cu ajutorul unui listener pentru fiecare buton care transmite transmite obiectul de tip +ntent +ntent.
S)o=to *ceste *ceste B activita activitați con conțin un un obiect ob iect Listie@ și un obiect UserDataSo1r)e care care con conține informațiile salvate anterior# anterior# 'rin parcurgerea parcurgerea obiectelor UserDataSo1r)e sunt inserate in JistKie JistKie valorile elementelor în funcție de topul la care se referă# *cest *cest lucru este realizat în metoda onCreate*+ cand este lansată activitatea#
.i%ură 14 .i%ura 3= ,)sarea >n ;ist+ie&
27
Persisiența datelor
'entru 'entru a stoca preferin preferințele utilizato utilizatorilor rilor selecta selectați s&a folosit folosit SNJite # *ceste *ceste preferi preferinnțe ajutorul sunt salvate după după ce sunt selecta selecta ți prietenii din lista cu ajutorul metodei get(riendsLikes*+ din
Main*ctivit/# În cadrul acestei metode după ce ne asiguram că sesiunea este deschisă , pentru fiecare prieten din listă este apelat 9$lQ1ery 7SELECT 2o.ies,books,21si),t.,ga2es (0-M 1ser @:ere 1id 7 na2es"get*i+F
*cest Uuer/ este transmis în reUuest împreună cu metoda
4arsePages(ro2G0APB0es4onse*+F
.i%ură 1" 8etoda parsePagesFromGRAPHResponse()
*ceasta metoda dupa cum se observa foloseste un obiect HS?: si un arra/ HS?: cu ajutorul carora parseaza datele obtinute din bundle&ul transmis# upa ce se parseaza , datele necesare sunt introduse intr&un arra/ de String&uri # upa un obiect de tipul respectiv este inserat in baza de date cu functia insert# 28
MySQLiteHelper
*ceasta clasa este folosita pentru a defini modelul bazei de date # 'entru inceput sunt definite numele numele bazei de date precum și versiunea# versiunea# private static final 5tring DATABASE_NAME = "ace(ook_top.d(" = & private static final int DATABASE_VERSION =
!abelele !abelele bazei de date au fost definite cu doua coloane , respectiv id si nume# *u fost create tabelele table_2o.ies, table_21si), table_books, table_t. si table_ga2es#'entru a fi create a fost e)ecutate comanda e)ecSNJ#
.i%ură 1# rearea tabelelor din ?5
UserDataSource În aceasta clasa sunt e)ecutate operatiile asupara bazei de date # *ceste operatii sunt folosite atat in Main*ctivit/ cat si in *ctivit/&urile in care sunt introduse datele in JistKie&uri si afisate utilizatorului# 'entru fiecare dintre cele B date pe care doream sa le obtinem am efectuat operatii de insert si e)tragere # Kom prezenta aceste operatii pentru tabela 2o.ies , celelealte fiind similare .
.i%ură 1= 8etoda @nsert
29
*ceasta metoda insereaza un obiect de tip 2o.ies transmis ca parametru# +n caoloanele declarate in MySQLiteBel4er inseram valorile preluate din obiectul transmis ca parametru# Metoda insert(" este apelata in Main*ctivit/ dupa ce s&a efectuat parsarea inser%nd in tabela corespunzatoare obiectul respectiv# respectiv#
.i%ură 19 @nserarea apelata in 8ain,ctivit
Metoada de e)tragere este folosita pentru a afisa elementele dorite# *ceasta foloseste urmatoarea interogare pentru a e)trage primele 6> elemente din lista ordonate dupa numarul lor de apari apariții , luate descres descrescator cator99 5tring s6l = "5*L*7# name rom mo4ies 809; + name 90*0 + count-name desc limit &'"
*cest Uuer/ returneaza un obiect de tip Cursor # n Cursor reprezinta rezultatul unui Uuer/ si pointeaza un rand din rezultatul intors de Uuer/# +n acest fel , sistemul *ndroid trateaza rezultatele intoarse de Uuer/&uri eficient , nefiind nevoie de a salva toate datele in memorie
30
.i%ură 1 A7tra%erea din ?5
'entru a ne deplasa intre diferite randuri ale rezultatului putem folosi metodele 2o.eTo(irst*+ 2o.eTo(irst*+ si 2o.eToNe%t*+ 2o.eToNe%t*+ " Metoda isA9terLast*+ permite verificarea sfarsitului sfarsitului rezultatelor#
'entru tabelele music,boo.s,tv si games , metodele de inserare si de e)tragere sunt similare#
Fișiere de resurse
'e langa clasele prezentate pana acum , un proiect *ndroid con ține și multe fi șiere de resurse# *ceste sunt folosite pentru a construi interfa interfața grafica a aplicației sau pentru a face referire la anumite variabile care au o valoare constantă .
Android?anifest6%ml -iecare aplicatie trebuie sa aiba un fisier *ndroidManifest#)ml *ndroidManifest#)ml in radacina proiectului# *cest fisier manifest prezinta informatii esentiale despre aplicatie sistemului de operare *ndroid, informatii pe care sistemul trebuie sa le aiba inainte sa poata rula codul aplicatiei# 'rintre alte lucruri , in fisierul manifest se gasesc urmatoarele 9 31
➢ :umele pachetului pachetului Hava al aplicatiei# *cesta este este un identificator unic al aplicatiei ➢ escrierea componentelor componentelor aplicatiei , activitati , servicii si content providers# ➢ eclara ce permisiuni trebuie sa aiba aplicatia pentru a putea accesa parti
protejate ale *'+&ului *'+&ului si sa interactioneze interactioneze cu alte aplicatii aplicatii ➢ eclara si ce permisiuni trebuie sa aiba alte aplicatii pentru a putea sa interactioneze cu aplicatia# ➢ eclara nivelul minim al *ndroid *'+ pe care aplicatia il suporta $lementele ce pot fi prezente in fisierul manifest sunt prezentate mai jos9
<metadata>
*ndroid pune la dispoziție un limbaj OMJ care cuprinde cuprinde subclase ale Kie Kie si KieGroup# KieGroup# 'e baza acestora acestora se pot defini elemente de interfață folosint OMJ #
32
.i%ură 20 @erarhia +ie& si +ie&Broup
ie@&urile sunt idget&uri ale interfetei cu utilizatorul ca de
e)emplu butoane , campuri
te)t, etc# *ceste *ceste vie&uri au atribute pe baza carora carora se poate configura aspectul aspectul si comportamentul lor# n ie@Gro14 este responsabil pentru aranjarea celorlalte ie@&uri , acesta mai fiind cunoscut si ca layo1t 2anager #Clasa #Clasa de baza pentru acest la/out manager este android#vie#KieGroup care e)tinde la randul ei android#vie#Kie , clasa de baza a ie@& urilor# +nterfetele cu utilizatorul ale unei activitati sunt de obicei descrise cu ajutorul unui fisier OMJ (layo1t 9iles" # *ceste pot fi construite construite și prin intermediul grafic , *ndroid *ndroid punand punand la dispozitie un set de Kie&uri Kie&uri (Custom V Jibrar/ Kies" Kies" , propietatile putand fi setate din tabelul 'roperties , fara a fi nevoie de editarea fisierului OMJ# În continuare sunt prezentate prezentate la/out&urile pentru pentru principalele activitați9
33
.i%ură 21 usto! C ;ibrar +ie&s si roperties
main6%ml *cest fisier construieste interfata pentru Main*ctivit/ , activitatea cu care se lanseaza aplica aplicația# *re *re la baza un un 0elati.eLayo1t care care are setat ca bac.ground o imagine referita in alt fisier de resurse , si anume dro@able#
.i%ură 22 ;aout !ain7!l
34
ic.friendsacti'it@6%ml *cest la/out contine un -rameJa/out care face referire la fragmentul oferit de -aceboo. care permite selectarea prietenilor# android:id="$%id/riend_picker_ragment"
selectreferences6%ml 'entru acest la/out s&a folosit un 0elati.eLayo1t si cuprinde B butoane , fiecare buton avan avandd prop propie ieta tate teaa andr android9b oid9bac.g ac.groun roundd seta setate te cu o refe referi rire re la fisi fisier erul ul ba)k_b1tton"%2l din dra@able care contine unele caracteristici ale
unui buton ca forma , culoare si asezarea acestuia#
.i%ură 23 ;aout select-preerences
acti'it@list'ie=6%ml *cest la/out contine un Kie de tip JistKie pentru a afisa topul respectiv#
35
.i%ură 24 ;aout activit-list-vie&
*ceste la/out&uri sunt referite in cadrul activitatilor principale in metodele suprascrise onCreate*+" set7ontent?iew-0.layout. main set7ontent?iew-0.layout. pick_riends_acti4ity set7ontent?iew-0.layout. select_preerences set7ontent?iew-0.layout .acti4ity_list_4iew
n alt fisier fisier de resurse resurse important important se gaseste gaseste în folderul values# values# *cesta *cesta con ține pe l%ngă numele aplicației și un identificator unic oferit de de -aceboo.#
36
.i%ură 2" Desursa trin%s7!l
Crearea aplicației pe platforma Facebook
'entru a putea folosi functionalitațile oferite de -aceboo. S este este necesară înregistrarea pe platforma de socializare a unui cont de dezvoltator# dezvoltator# În acest cont trebuie sa înregistram un Fashe/ generat de un tool prezent în *ndroid S# 'entru aceasta aplicatie , generarea Fashe Fashe/&u /&ului lui s&a facut facut în cadru cadrull clase claseii Main*c Main*ctiv tivit/ it/ în metoda metoda onCreate*+ prin adaugarea urmatorului cod9
37
.i%ură 2# Benerare
upa ce acest cod este generat , el se adauga in tabul Sample *pp din contul de dezvoltator al platformei -aceboo.#
.i%ură 2= @nre%istrare
rmato rmatorul rul pas pas il consti constitui tuiee creare creareaa aplica aplicatie tieii , acest acest lucru lucru facand facandu&s u&see astfel astfel W*ppsW WCreate a :e *ppW9 upa ce ste creata aplicatia va aparea codul aplicatiei care trebuie introdus in fisierul de resurse strings#)ml #
38
.i%ură 29 odul aplicației .aceboo'
'entru aplicatia creata de la Settings va trebui sa adaugam platforma pe care dorim sa o folosim# În acest acest caz am adaugat adaugat *ndroid și am introdus numele pachetului folosit și al activitații principale#
.i%ură 2 lator!a pe care dori! sa olosi! aplicatia
:u în ultimul r%nd atrbuie atrbuie să trimitem o cerere pentru pentru a putea folosi toate facilitațile platformei -aceboo.# -aceboo.# ?data aprobata aprobata aceasta cerere cerere , aplica ția dezvoltată poate poate beneficia de toate toate serviciile implementate cu ajutorul -aceboo. S#
39
.i%ură 30 erere pentru aprobarea olosirii conținutului .aceboo'
40
Conclu1ii
*ceastă aplicație mi&a oferit ocazia studierii unei unei tehnologii tehnologii foarte populare și pentru care în urmatorii ani se prognozează prognozează creșterea folosirii acestora# *plicațiile pentru sistemul de de operere *ndroid au un numar foarte mare de utilizatori , mai ales cele cu specific social# *m reușit să înțelg principa principalele lele compo componente nente ale ale sistemul sistemului ui *ndroi *ndroidd c%t și principale principalele le modalitați de utilizare utilizare ale resurselor puse puse la dispoziție dezvoltatorilor dezvoltatorilor de platforma platforma de socializare socializare -aceboo.# În momentul finalizării redactarii redactarii acestui document document , aplicația se afla într&o stare stare ce îi conferă utilitate , put%nd&i fi aduse îmbunatațiri# 'rintre viitoarele viitoarele dezvoltari dezvoltari ulterioare , cele mai importante ar putea fi 9 ● ● ●
*daugarea unui buton care să permită selectarea tuturor prietenilor din listă# :avigarea spre pagina pagina de -aceboo. -aceboo. a fiecarui element element din topul prezentat# prezentat# *fișarea unui grafic grafic care să permita vizualizarea vizualizarea numarului de de prieteni care care au dat
li.e la elementele din top# ● *fișarea pozei pozei de profil profil a utilizatorului utilizatorului pe prima activitate lansată# ● *naliza altor date preluate din lista de prieteni ai utilizatorului ● ?ptimizarea aplizației pentru viitoarele versiuni versiuni ale sistemului de de operare (*ndroid J "#
În concluzie , consider consider că am reușit să îndeplinesc obiectivul obiectivul prezentat la începutul începutul lucrarii , iar aplica aplicația prezentată prezentată implementează facilitățile enumerate# enumerate# În forma ei actuala actuala această aplica aplicație poate fi folosită de utilizatorii utilizatorii rețelei de socializare socializare -aceboo. -aceboo. care au au deja aplica aplicația de socializa socializare re instalat instalataa și sunt sunt autentific autentificaați# *cesti *cestiaa pot , cu ajutoru ajutorull aplica aplicației prezentate, să selecteze prietenii prietenii pentru care doresc să afle ce preferințe au și să vizualizeze vizualizeze preferințele lor pentru urmatoarele urmatoarele lucruri 9 carți , filme , muzică , seriale seriale și jocuri# upă ce vor vor fi adaugate adaugate func funcționalita ionalitațile prezenta prezentate te ca dezvoltări dezvoltări ulterioa ulterioare re , aplicația va fi publicată publicată în magazinul virtual Google 'la/ deoarece deoarece , după cum am menționat la începutul acestei lucrari , lipse lipsește o astfel astfel de aplica aplicație#
41
Lista tabelelor a!e" 1 # $n%&'% *n+,&e -% o&e +e p%a' 4 2013 a!e" a!e" a!e" 2 # /ers%,n% /ers%,n% An+ro%+ a!e" a!e" 3 # Pa Pae&e e&e preen&e %n An+ro%+ An+ro%+
Lista fi*urilor F%g,r' 1 # Ar%&e&,r Ar% &e&,ra a s%s&em,",% s%s&em ,",% An+ro%+ An +ro%+ F%g,r' 2 # $&%"%a $ &%"%area rea %n&en&,r% %n& en&,r%"or "or F%g,r' 3 # %"," % "," +e %a' a" ,n,% A&%%& F%g,r' 4 # $&%"%a $ &%"%area rea ragmen& r agmen&e"or e"or F%g,r' 5 # e+%," e+%," +e +eo"&are +e o"&are A F%g,r' 6 # anage an agerr F%g,r' 7# A/ anager F%g,r' 8 Feres&re"e ap"%a%e% F%g,r' 9 Fo"os%rea Fo"os%re a $%:%e" $%:% e"eHe"p eHe"per er F%g,r' 10 Ape"area a"&or A&%%&,r% F%g,r' 11 1 1 e&o+a on&ar& on&ar&() () +%n P%;Fr%en+sA&%%& P%;Fr%en+s A&%%& F%g,r' 12 F%g,ra 3.5 e&o+a e &o+a s&ar&P%;Fr%en+sA&% s&ar& P%;Fr%en+sA&%%&() %&() +%n a%nA&%% a%nA&%%& & F%g,r' 13 F%g,ra 3.6 e"a e"arearea rearea !,&oane" !,&oane"or or "ase% e"e& e"e&n :%s&/%e? :%s&/%e ? F%g,r' 15 e&o+a e&o+a parsePagesFromGRAPHResponse parsePagesFromGRAPHResponse() () F%g,r' 16 rearea re area &a!e"e"o &a! e"e"orr +%n @ F%g,r' 17 1 7 e&o+a e& o+a nse nser& r& F%g,r' 18 1 8 nserarea nsera rea ape"a&a ape" a&a %n a%nA&%% a% nA&%%& & F%g,r' 19 BC&rage B C&ragerea rea +%n + %n @ @ F%g,r' 20 erar%a er ar%a /%e? /%e ? s% /%e?Gro,p F%g,r' 21 ,s&om ,s&o m D :%!rar :%! rar /%e?s /%e ?s s% Proper&%es Prope r&%es F%g,r' 22 :ao,& ma%n.Cm" F%g,r' 23 :ao,& :a o,& se"e& se"e&
42
ANE3E
Biblio*rafie
E1 E1 BB BB20 2010 10 BB BB:B :B ames ames I Je"s Je"son on e e An+r An+ro% o%+ + ee ee"o "oper perKs Ks oo;!oo; @,%"+%ng App"%a&%on ?%& &e An+ro%+ A++%son Les"e ra?or+s%""e ra?or+s%""e 2010
43