Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE LICEN
APLICAIE ANDROID PENTRU ANALIZA
DATELOR PRELUATE DE PE
PLATFORMA DE SOCIALIZARE
FACEBOOK
BUCURETI
2014
Cuprins
Introducere
Context
Obiectivul i necesitatea lucrrii
Structura lucrrii
Tehnologii folosite
Platforma Android
Caracteristici Android
Arhitectura pe niveluri a sistemului Android
Elemente componente
Android SDK
Facebook SDK pentru Android
ADT (Android Development Tool)
Dezvoltarea aplicaiei
Structura aplicaiei
Persisiena datelor
Fiiere de resurse
Crearea aplicaiei pe platforma Facebook
Concluzii
Lista tabelelor
Lista figurilor
ANEXE
Bibliografie
Introducere
Context
n ultimele decenii, odat cu dezvoltarea tot mai rapid a tehnologiei, piaa a nceput s se
concentreze tot mai mult n jurul conceptului de smartphone (telefon mobil multimedia
multifuncional, conectat la o reea GSM sau UMTS). Este o tendin normal, avnd n vedere
faptul c traficul de date a devenit tot mai rapid i mai accesibil ca costuri, smartphone-urile
oferind aproape toate funcionalitile cu care este obinuit un utilizator de computer ( agend,
calendar, navigare GPS, e-mail, browser, editor de text, minicalculator, aparat foto-video i chiar
2
soft-uri de specialitate precum Adobe Photoshop). Treptat, mijloacele clasice de comunicare ntre
dispozitivele mobile sunt tot mai puin utilizate, locul lor fiind luat de aplica ii ce comunic prin
Internet. De exemplu, utiliznd Facebook Messanger sau Skype poi vorbi gratuit oriunde n
lume consumnd foarte puin din traficul de date disponibil.
Creterea numrului de smartphone-uri a fost , cu siguran , influenat i de nevoia
oamenilor de a fi conectai n permanen la surse de informaii i la reelele de socializare pentru
a interaciona mai uor ntre ei. n aceste condiii , reelele de socializare sunt percepute ca un
ajutor n procesul de socializare dintre oameni.
Termenul smartphone descrie un dispozitiv mobil , care pe lng caracteristicile sale de
telefon are i multe alte caracteristici multimedia. Un smartphone folosete un sistem de operare
care suport instalarea i tergerea de pe dispozitiv a aplicaiilor dezvoltate de programatori.
Primul dispozitiv pentru care s-a folosit acest termen , smartphone , a fost modelul GS88
Penelope prezentat de compania Ericsson n anul 1997. Dup aceast lansare principalii
productori de telefoane mobile : Nokia , Motorola , Sony Ericsson i Samsung s-au concentat
asupra procucerii de smartphone-uri. Sistemele de operare Symbian i RIM de la Nokia respectiv
BlackBerry
dominau
piaa
la
sfritul
anului
2007.
T1 2014 (mii)
T4 2013 (mii)
T1 2013
Cota
Cota de
Cretere
Cretere
(mii)
de
pia T4
secvenial
anual
pia
2013
T1
2014
Android
187.027,721
188.227,483
AOSP
53.749,521
53.919,640
Apple iOS
43.719,00
51.024,482
150.621,7
37.406,8
44%
39%
-1%
13%
11%
0%
10%
11%
-14%
24%
17%
BlackBerry
550,000
765,000
981,300
0%
1%
-28%
-44%
750,000
3.516,3
5.426,5
0%
1%
-79%
-86%
13.274,030
11.418,218
6.070,800
3%
2%
16%
119%
127.593,495
167.338,026
229.408,8
30%
35%
-24%
-44%
Altele
545,000
428,637
1.126,6
0%
0%
27%
-52%
Total
427.208,766
476.637,786
431.042,5
100%
100%
-10%
-1%
10
BlackBerry
OS
Windows
Phone
Sisteme
de
operare
de
baza
Primul smartphone pe care a rulat sistemul de operare Android a fost HTC Dream,
cunoscut i sub numele de T Mobile G1. n februarie 2009, telefonul este lansat pe pia cu
versiunea 1.5, alias Cupcake, dar care are cteva lipsuri. Totui, comparativ cu prima versiune,
1.0, Cupcake face posibil afiarea tastaturii virtuale pe ecran i personalizarea ecranului de
pornire cu widget-uri.
ncepnd din 2009 Google a lansat constant noi versiuni ale sistemului de operare
Android, nbuntind de fiecare dat problemele aprute la versiunea precedent si adaugnd
noi funcionaliti. Astfel n tabelul 2 sunt prezentate versiunile stemului de operare:
Tabel 2 : Versiuni Android
(surs : http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)
Versiune
Nume de cod
Data lansarii
4.4
KitKat
TBA
4.1
Jelly Bean
9 iulie 2012
4.0
16 decembrie 2011
3.1
Honeycomb
10 mai 2011
2.3.3
Gingerbread
6 decembrie 2010
2.2
Froyo
20 mai 2010
2.0
Eclair
26 octombrie 2009
1.6
Donut
15 septembrie 2009
1.5
Cupcake
30 aprilie 2009
Sistemul de operare Android beneficiaz, de asemenea, de cel mai mare magazin virtual
de aplicaii, Google Play, care a devansat recent pe cel de la Apple. Acesta ofer posibilitatea
dezvoltatorilor de a aduaga aplicaia lor contra unei taxe unice. Pe lng aplica ile publicate n
Google Play se mai gsete i coninut video, cri i muzic.
Tehnologii folosite
n acest capitol vom detalia tehnologiile folosite pentru a dezvolta aplicaia prezentat.
Proiectul a fost realizat folosind tehnologii i tool-uri open-source. Aceast alegere a fost
fcut deoarece prezint urmtoarele avantaje:
Au n spate comuniti mari de utilizatori i dezvoltatori preocupai de dezvoltarea
continu a acestor tehnologii, existnd suport din partea acestor comuniti cum ar fi
tutoriale i acces la diverse resurse cum ar fi librrii specializate
Costul redus de dezvoltare al aplicaiei, neexistnd taxe de liceniere pentru aceste
tehnologii
Aplicaia este destinat dispozitivelor mobile ce ruleaz Android i, prin urmare, aceasta
a fost realizat folosind Android SDK. Deoarece s-a dorit conectarea la reeaua de socializare
Facebook i folosirea anumitor date ale utilizatorilor, a fost folosit i Facebook SDK. Ambele
SDK-uri sunt disponibile pentru a fi descrcate n mod gratuit de pe site-urile oficiale.
6
Mediul de programare ales este ADT (Android Developer Tools). Acesta este o extensie a
mediului de programare Eclipse IDE, avnd integrat Android SDK.
Codul surs a fost scris n limbajul Java.
n continuare vor fi detaliate tehnologiile folosite n realizarea aplicaiei, precum
Platforma Android
Caracteristici Android
Android este un sistem de operare din familia Unix, bazat pe kernel-ul Linux, cu o
interfa utilizator bazat pe manipulare direct, proiectat n primul rnd pentru dispozitive
mobile cu ecran tactil (touchscreen), folosind input-uri de tip atingere.
Un aspect foarte important legat de Android l constituie faptul c are codul surs publicat
de ctre Google sub licene open-source. Acest lucru a format o comunitate activ de dezvoltatori
ce folosesc codul surs al proiectului AOSP (Android Open Source Project) pentru a dezvolta i
distribui propriile versiuni modificate ale sistemului de operare. Acestea aduc deseori
funcionaliti noi i actualizri pentru dispozitive mai repede dect productorul oficial sau
operatorul de telefonie mobil, totui, fr a garanta funcionarea la parametri optimi. De
asemenea, comunitatea ofer suport continuu pentru dispozitivele mai vechi ce nu mai primesc
actualizri oficiale i ajut utilizatorii neexperimentai s porteze Android pe dispozitive ce
oficial ruleaz alte sisteme de operare. Versiunile lansate de comunitate sunt de cele mai multe
ori pre-rooted i conin modificri inadecvate pentru utilizatorii neiniiai n acest domeniu, cum
ar fi capacitatea de supraturare sau subturare a procesorului. CyanogenMod este versiunea
comunitar cea mai popular i st la baza majoritii celorlalte.
De-a lungul timpului, productorii de dispozitive i operatorii de telefonie mobil au
descurajat orice tentativ de dezvoltare de versiuni paralele a sistemului de operare de ctre o
ter parte. Productorii i exprim ngrijorarea cu privire la funcionarea necorespuztoare a
dispozitivelor ce ruleaz astfel de versiuni neoficiale i costurile de asisten ce rezult din acest
motiv. Mai mult dect att, firmware-urile modificate ofer de multe ori funcionaliti precum
tethering-ul, pentru care operatorii ar percepe un tarif suplimentar. De aceea, multe dispozitive
7
au acces restricionat la permisiunile de root (admin) sau bootloader-ul blocat. Chiar i aa, cum
versiunile dezvoltate de comunitate au devenit tot mai populare iar n S.U.A. a fost dat chiar o
lege n acest sens (devenind legale), productorii au luat poziii din ce n ce mai pu in radicale,
ajungnd la ora actual s sprijine dezvoltarea lor. Ca urmare a acestui fapt, un numr tot mai
mare de dispozitive sunt livrate deblocate, pentru a scpa utilizatorul de ocolirea tuturor
restriciilor hardware n cazul n care acesta opteaz pentru instalarea unei versiuni neoficiale
(totui, n 90% dintre cazuri, procednd astfel, se pierde garania). Dei productorii au o
atitudine tot mai deschis, muli operatori de telefonie comand nc dispozitive blocate, pentru a
se asigura de fidelitatea clienilor lor.
SQLite este o bibliotec public n cadrul creia se gsete implementarea unui motor de
baze de date, de sine stttor, care nu necesit server sau alte configuraii speciale.
Citirea i scrierea datelor se face direct pe disk, o baz de date complet SQL cu mai
multe tabele, view-uri, indexi i triggeri fiind stocat sub forma unui singur fiier. Aceste fiiere
sunt salvate n memoria dispozitivului n directorul:
DATA/data/NUMELE_APLICAIEI/databases/NUMELE_BAZEI_DE_DATE
Formatul fiierelor stocate este cross-platform, facilitnd portarea bazelor de date SQLite.
Tipurile de date ce pot fi folosite n SQLite sunt TEXT (echivalentul tipului de date
String din Java), INTEGER (echivalentul tipului de date long din Java) i REAL (echivalentul
tipului de date double din Java) nsa nu se face validarea automat a tipurilor de date nainte ca
acestea s fie introduse n baza de date.
Android SDK conine o serie de clase cu ajutorul crora poate fi accesat SQLite i se
poate efectua operaii asupra bazelor de date. Aceste clase sunt n pachetul android. Database i
android. Database. Sqlite.
Alte librrii prezente la acest nivel al arhitecturii sunt:
Surface Manager: Suport diferite formate i codec-uri audio i video, inclusiv
redarea i nregistrarea lor.
System C Libraries: Un subset al librriei standard C (libc) special adaptat
pentru dispozitive mobile pe care ruleaz Linux
OpenGL ES Libraries: Acestea sunt bibliotecile grafice pentru randare grafica 2D
i 3D.
Nivelul Android Runtime include un set de librrii care au disponibile marea parte a
funcionalitilor disponibile pentru limbajul de programare Java. n cadrul acestui nivel
fiierele. Class sunt convertite de sistemul Android n fiiere. Dex (un tip special de bytecode
optimizat pentru dispozitive mobile fiind necesare puine resurse). Android ruleaz n ma ina
virtual Dalvik; de la versiunea 4.4, este suportat o nou ma in virtual experimental, ART,
care nu este ns activat n mod implicit. Aceasta ruleaz fiierele. Dex, fiindu-i alocat cte o
main virtual fiecrei aplicaii.
Nivelul Application Framework ofer dezvoltatorilor un set foarte mare de API-uri
pentru ca acetia s nu fie nevoii s scrie fiecare aciune ntreprins de sisiemul de operare
atunci cnd dezvolt o aplicaie Android. Aceste servicii i mecanisme stau la baza funcionrii
tuturor aplicaiilor. Dintre acestea amintim:
Activity Manager: gestioneaz ciclul de via al aplicaiilor i poate avea mai
multe stri; o aplicaie poate avea mai multe activiatati care pot avea ciclul lor de via;
10
exist o activitate principal care pornete atunci cnd aplicaia este lansat; o activitate
se ncheie atunci cnd este lansat o alt activitate
Notification Manager: Acest manager permite aplicaiilor s creeze alerte
personalizate
Resource Managers: Aplicaii au nevoie de resurse externe, cum ar fi imagini,
iruri de caractere, etc Toate aceste resurse sunt gestionate de ctre managerul de resurse,
care le face disponibile ntr-un mod standardizat.
Content Provider: Aplicaii mprtesc, de asemenea date. Din cnd n cnd, o
singur cerere poate avea nevoie de unele date din alt aplicaie. Acest acces la date la
alt aplicaie este activat de ctre content provider
Nivelul Applications este ultimul nivel i este reprezentat de aplicaiile create de ctre
dezvoltatori i care pot fi folosite de utilizatorii finali.
O aplicaie const ntr-un fiier. Apk (android package) i conine, de obicei, 3
componente:
Fiierul executabil Dalvik reprezint codul surs Java compilat pentru a obine
executabilul i care e rulat de maina virtual Dalvik.
Resurse orice nu este cod surs este o resurs. Aplicaia poate s con in imagini,
fiiere audio/video i numeroase fiiere XML care descriu layout-ul, etc.
Librrii native Opional, aplicaia poate conine librrii native, C/C++, care sunt
incluse n fiierul Apk.
Aceste aplicai sunt formate din componente slab cuplate, legturile fiind fcute printr-un
fiier manifest.xml. n cadrul acestui fiier sunt prezente metadate despre fiecare component i
cum interacioneaz cu alt component.
Elemente componente
Pentru a putea trece la detaliile de implementare, trebuie s explicm mai nti cteva
componente specifice platformei:
Un intent este un obiect de mesagerie ce poate fi folosit pentru a solicita o aciune din alt
component a aplicaiei. Dei intent-urile faciliteaz comunicarea ntre componente n diferite
moduri, putem separa trei cazuri de utilizare fundamentale:
Declanarea unei activiti
O activitate reprezint un singur ecran al aplicaiei. Putei ncepe o nou instan a unei
activiti pasnd un intent ca parametru funciei startActivity (). Acesta descrie activitatea ce
urmeaz s porneasc i conine toate datele necesare.
Dac dorii s primii un rezultat n momentul n care activitatea se termin, trebuie s
apelai metoda startActivityForResult (). Activitatea dumneavoastr va primi rezultatul sub
forma unui intent separat, n cadrul callback-ului onActivityResult ().
Declanarea unui serviciu
Un serviciu este o component care efectueaz operaiuni n fundal, fr a avea nevoie de o
interfa utilizator. Putei porni un serviciu pentru a efectua o operaiune o singur dat (cum ar fi
descrcarea unui fiier), pasnd un intent metodei startService (). Acesta descrie serviciul ce
urmeaz s porneasc i conine toate datele necesare.
n cazul n care serviciul este proiectat cu o interfa client server, v putei lega la
serviciu din alt component a aplicaiei pasnd un intent funciei bindService ().
Transmiterea unui broadcast
Un broadcast reprezint un mesaj ce poate fi primit de orice aplicaie. Sistemul transmite
astfel de mesaje pentru diverse evenimente, cum ar fi atunci cnd sistemul pornete sau cnd
dispozitivul ncepe s se ncarce. Utilizatorul poate trimite i el mesaje de tip broadcast ctre alte
aplicaii pasnd un intent ctre una din urmtoarele trei metode: sendBroadcast(),
sendOrderedBroadcast(), sendStickyBroadcast().
Din punct de vedere al specificitii, putem de asemenea deosebi dou tipuri de intent-uri:
Explicite specific numele componentei ce trebuie s porneasc (mai exact
numele complet al clasei). Vei folosi de obicei un intent explicit pentru a porni o
activitate sau un serviciu din cadrul propriei aplicaii, deoarece cunoatei numele clasei
componentei respective. De exemplu, declanai o nou activitate ca rspuns la o aciune
efectuat de utilizator sau pornii un serviciu pentru a descrca un fiier n fundal.
Implicite nu denumesc o component specific ns declar o aciune general,
ceea ce permite unei componente din alt aplicaie s o efectueze. De exemplu, dac
dorii s artai utilizatorului o locaie pe hart, putei utiliza un intent implicit pentru a
solicita ca o alt aplicaie capabil s fac acest lucru.
12
Atunci cnd creai un intent explicit pentru a porni o activitate sau un serviciu, sistemul
lanseaz imediat componenta specificat. n cazul unui intent implicit, sistemul caut cea mai
potrivit component prin compararea coninutului acestuia cu filtrele de intenie (intent filters)
declarate n fiierele manifest ale altor aplicaii instalate pe dispozitiv. Dac sistemul gse te o
singur potrivire, lanseaz imediat componenta. Altfel, afieaz o fereastr (de tip dialog) prin
care utilizatorul poate alege ce aplicaie s fie utilizat.
Schema din Figura 2 ilustreaz cum este pasat un intent implicit prin intermediul
sistemului pentru a ncepe o nou activitate. Aadar, activitatea A creaz un intent ce con ine o
descriere a aciunii de efectuat i l paseaz metodei startActivity (). Sistemul caut n toate
aplicaiile un intent filter potrivit pentru intent-ul primit. Atunci cnd gsete o potrivire, sistemul
pornete acea activitate (n cazul nostru, activitatea B) prin invocarea metodei onCreate () creia
i paseaz intent-ul.
Un intent filter este o expresie aflat n fiierul manifest al aplica iei ce specific
tipurile de intent-uri pe care componenta accept s le primeasc. De exemplu, prin declararea
unui intent filter pentru o activitate, devine posibil ca aceasta s fie deschis de ctre alte aplicaii
prin intermediul unui anumit intent. De asemenea, dac nu este declarat niciun filtru pentru o
activitate, atunci ea poate fi pornit doar explicit.
Din motive de securitate, este recomandat ca pornirea serviciilor s fie fcut printr-un
intent explicit, fr a declara filtre. Folosind un intent implicit, nu po i fi sigur cine l va prelua,
iar utilizatorul nu poate vedea ce serviciu pornete.
13
2. Activity
O activitate este o component a aplicaiei care ofer un ecran cu care utilizatorii pot
interaciona n scopul de a face ceva, cum ar fi s formeze un numr de telefon, s fac o
fotografie, s trimit un e-mail, sau pentru a vizualiza o hart. Fereastra umple tipic ecran, dar
poate fi mai mic dect acesta i poate sta deasupra altor ferestre.
O aplicaie poate conine una sau mai multe componente de tip Activity n funcie de
design, una distre acestea fiind marcat ca i activitatea principal a aplica iei. Activitate
principal va fi lansat n execuie la pornirea aplicaiei.
Pentru a crea o activitate, trebuie s creai o subclas de Activity. n aceast subclas
trebuie s suprascrieti metodele care sunt apelate atunci cnd activitatea trece dintr-o stare n alta
pe parcursul ciclului de via, ca de exemplu la creare, la opriere, la revenire sau la distrugere.
Cele mai importante metode care trebuie suprascrise sunt:
onCreate (): aceast metod trebuie implementat obligatoriu pentru a putea fi
apelat cnd este creat activitatea.n cadrul acestei metode trebuie iniializate
componentele de baz ale activitii.
onPause (): sistemul apeleaz aceast metod la primul semn ca utilizatorul a
prsit activitatea curent.
14
15
Figura 3 ilustreaz diverse ci pe care le poate lua o activitate ntre diferite stri la
acesteia. Dreptunghiurile reprezint metodele suprascrise care le pute i implementa pentru a
efectua operaiuni n cazul n care n activitatea respectiv se face tranziia ntre stri.
O activitate poate exista n una din cele trei stri:
Resumed: Activitatea este n prim-planul ecranului fiind utilizat. (Aceast stare
este uneori menionat ca stare activ.)
Paused: Activitatea nu se afl n prim-plan dar este nc vizibil. Componentele
activitii aflate n aceast stare nu interacioneaz cu utilizatorul ns sunt ataate
manager-ului de ferestre fiind vizibile utilizatorului.
Stopped: Activitatea este complet acoperit de o alt activitate (activitatea este
acum n "background"). Cu toate acestea, acesta nu mai este vizibil pentru utilizator i
poate fi nchis de sistem atunci cnd este nevoie de memorie n alt parte.
n cazul n care o activitate este ntrerupt sau oprit, sistemul poate scdea din memorie,
fie prin solicitarea ca aceasta s se termine (apelul metodei finish ()), sau pur i simplu
nchiderea procesului. Cnd activitatea este deschis din nou (dup ce a fost terminat sau
nchis), acesta trebuie s fie crea peste tot.
3. Fragments
Un fragment reprezint un comportament sau o poriune de interfa grafic dintr-o
activitate. Acesta a fost creat i introdus n cadrul lansrii API-ului 11 (sau Android 3.0) pentru a
permite unei interfee grafice s fie mai flexibil deoarece n cazul tabletelor ecranul este mult
mai mare dect al unui telefon mobil. Spre exemplu o aplicaie poate folosi un obiect de tip
Fragment pentru a afia o list de articole n stnga iar n dreapta poate folosi un alt obiect de tip
Fragment pentru a afia detalii despre obiectul selectat din list, ambele obiecte Fragment
aflndu-se n cadrul aceluiai obiect Activity. Exemplul cu aceste 2 obiecte Fragment este ilustrat
n figur de mai jos.
16
ntr-o activitate se pot combina mai multe (obiecte de tip) fragmente pentru a construi o
interfa grafic, iar un fragment poate fi utilizat n mai multe activiti. Ciclul de via al unui
obiect de tip Fragment este similar cu cel al unui obiect de tip Activity. Pentru a aduga un
obieect de tip Fragment la o nou activitate se poate proceda n dou moduri:
Declararea fragmentului n interiorul fiierului de layout al activitii:
n acest caz se specific propietatile fragmentului la fel ca pentru un view. De exemplu pentru o
activitate cu dou fragmente vom avea:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<fragment
class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
android:id="@+id/titles" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
/>
<FrameLayout android:id="@+id/details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
</LinearLayout>
(Surs exemplu cod : http://developer.android.com/guide/components/fragments.html)
17
Dup cum se observ, fiecare fragment trebuie s aib un identificator unic pentru ca
atunci cnd activitatea este repornit, sistemul s poat restaura fragmentul.
Adugarea fragmentului la un obiect ViewGroup existent
n orice moment, n timp ce activitatea se execut, se poate aduga fragmente la
activitate. Trebuie doar se fie specificat ViewGroup-ul la care se adaug.
Pentru a putea face diferite aciuni cu fragmente ntr-o activitate (adugare, tergere sau
nlocuire) trebuie s folosim API-ul FragmentTransaction. O instan de FragmentTransaction se
poate obine astfel:
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
(Surs exemplu cod : http://developer.android.com/guide/components/fragments.html)
Datele puse la dispoziie de un anumit furnizor sunt accesate folosind un obiect de tip
ContentResolver. Acesta este un obiect client care asigur operaii de creare, citire, update i
tergere asupra datelor din ContentProvider.
Datele gestionate de un obiect de tip ContentProvider pot fi: audio, video, imagini i
fiiere de baze de date SQLite.
Android SDK
Android SDK reprezint o colecie de software i de tool-uri specifice cu ajutorul crora
se pot dezvolta aplicaii pentru sistemul de operare Android. Aceast colecie poate fi descrcat
separat prin intermediul SDK Manager-ului.
n continuare sunt prezentate cteva pachete importante:
Tabel 3 : Pachete prezente in SDK Android
(surs : http://developer.android.com/sdk/exploring.html )
Pachet
Descriere
Localizare n
cadrul SDK
SDK Tools
<sdk>/tools/
<sdk>/platform-
tools/
respective.
Documentation
<sdk>/docs/
platforme Android
SDK Platform
System Images
<sdk>/platforms/<a
ndroid-version>/
Fiecare platform ofer una sau mai multe imagini sistem pentru
<sdk>/platforms/<a
ndroid-version>/
<sdk>/sources
SDK
de Android.
<sdk>/platforms/<a
Android.
ndroidversion>/samples/
Google API
19
<sdk>/add-ons/
<sdk>/extras/andro
id/support/
Play
Licensing
<sdk>/extras/googl
aplicaii.
e/
<sdk>/extras/googl
e/
20
Android
se
poate
SDK
instala
21
un
dispozitiv
virtual
care
Dezvoltarea aplicaiei
22
n acest capitol vom prezenta structura aplicaiei , cum funcioneaz aceasta i elementele
folosite pentru dezvoltarea ei.
Structura aplicaiei
Interfaa aplicaiei cuprinde 7 ferestre. Cnd este lansat aplicaia se afiaz activitatea
principala (MainActivity). Aceast activitate conine un intent care este folosit pentru a obine
date de la aplicaia Facebook utilizate pentru a se putea realiza conexiunea la contul deja
autentificat n aplicaie. Tot din aceast activitate principal se vor putea accesa celelalte ferestre
ale aplicaiei. Astfel se v-a putea ajunge la fereastra care permite selectarea prietenilor. Dupa
selectarea prietenilor pentru care se dorete s se fac topul preferinelor , o alta fereastra v-a fi
afiat ,iar din aceasta se va putea alege topul care se dorete a fi vizualizat. Pentru fiecare top
va fi deschis alta fereastra n care acesta va fi afiat. Navigarea n aplicaie se va face cu ajutorul
butoanelor prezente n fiecare fereastr.
Figura de mai sus ne prezint cele 7 activiti i posibilitatea de a naviga printre acestea.
Pentru a putea face legtura ntre cele 7 activiti am folosit obiecte de tip Intent. Aceste obiecte
conin informaii pentru a putea conecta dou componente ale aplicaiei. Intent-ul creat conine
23
doi parametrii : clasa din care este apelat intent-ul respectiv i clasa cruia sistemul ar trebui s
transmit intent-ul.
Intent intent = new Intent(MainActivity.this,select_preferences.class);
Obiectul intent este apelat din clasa MainActivituy i este transmis clasei
select_preferences.
O activitate nou este lansat cu ajutorul comenzii startActivity() care primeste ca
parametu un Intent. Sistemul primete apelul i pornete o instam a Activity-ului specificat de
intent.
n continuare vom prezenta Activity-urile i clasele declarate, evideniind felul n care
acestea se leag ntre ele. Aceasta aplicaie folosete anumite obiecte prezente n SDKul oferit
de Facebook dezvoltatorilor i vor fi folosite ca atare , precizndu-se scurt principalele lor
caracteristici.
MainActivity
Aceast activitate este lansat la prima interaciune a utilizatorului cu aplicaia. Din
cadrul acestei ferestre pot fi accesate celelalte activiti ale aplicaiei , i anume selectarea
prietenilor pentru care se dorete s se alcatuiasc topul preferinelor i afiarea acestui top.
(informaii despre versiunea curent a aplicaiei).
n aceast fereastr utilizatorul poate efectua doua aciuni prin intermediul a dou
butoane. Prima aciune accesat prin butonul Pick Friends lanseaz o nou activitate care
permite selectarea prietenilor in list. A doua aciune disponibila prin butonul Show Top 10
Preferences lanseaz o nou aciune care la randul ei are mai multe opiuni de a alege topurile
dorite.
MainActivity-ul constituie clasa plincipal a aplicaiei , aici fcndu-se majoritatea
operaiilor. n cadrul acestei clase s-a folosit un obiect Session care are ca scop autentificarea i
gestionarea sesiunilor de conectarea ale unui utilizator la Facebook. O sesiune trebuie sa fie
deschis atunci cand un utilizator dorete s fac o anumit cerere reelei de socializare. Pentru a
tii n ce moment al cilulului de via al aplicaiei ne aflam , este folosit un obiect SessionState .
Odata ce o sesiune a fost nchis , aceasta nu mai poate fi redeschis , fiind necesar crearea unui
nou obiect Session. Pentru a lucra cu obiectele Session am folosit clasa UiLifecycleHelper .
24
Aceast clasa permite crearea , deschiderea automata , salvarea si restaurarea sesiunii ntr-un
mod similar ciclului de via al interfeelor grafice Android.
ntruct din aceast fereastr se face navigarea ctre alte doua Activity-uri au fost definite
doua butoane crora li s-a asociat un listener care la apasarea butonului face trecerea la
activitatea noua precizat prin obiectul Intent.
PickFriendsActivity
Aceast clas utilizeaz FriendPickerFragment pentru a afia lista de prieteni a
utilizatorului. Metoda populateParameters() este folosita pentru a popula ce dorim sa
transmitem obiectului FriendPickerFragment.
25
Select_preferences
Aceast activitate este apelat tot din MainActivity i cuprinde 5 butoane care permit
lansarea unei noi activitai. Acete butoane sunt :
26
Aceast navigare ctre celelalte ferestre se face tot cu ajutorul unui listener pentru fiecare
buton care transmite obiectul de tip Intent.
Show_top
Aceste 5 activitai conin un obiect ListView i un obiect UserDataSource care conine
informaiile salvate anterior. Prin parcurgerea obiectelor UserDataSource sunt inserate in
ListView valorile elementelor n funcie de topul la care se refer. Acest lucru este realizat n
metoda onCreate() cand este lansat activitatea.
27
Persisiena datelor
Pentru a stoca preferinele utilizatorilor selectai s-a folosit SQLite . Aceste preferine
sunt salvate dup ce sunt selectai prietenii din lista cu ajutorul metodei getFriendsLikes() din
MainActivity.
n cadrul acestei metode dup ce ne asiguram c sesiunea este deschis , pentru fiecare
prieten din list este apelat fqlQuery = "SELECT movies,books,music,tv,games FROM user
where uid ="+ names.get(i); Acest query este transmis n request mpreun cu metoda
parsePagesFromGRAPHResponse();
Aceasta metoda dupa cum se observa foloseste un obiect JSON si un array JSON cu
ajutorul carora parseaza datele obtinute din bundle-ul transmis. Dupa ce se parseaza , datele
necesare sunt introduse intr-un array de String-uri . Dupa un obiect de tipul respectiv este inserat
in baza de date cu functia insert.
28
MySQLiteHelper
Aceasta clasa este folosita pentru a defini modelul bazei de date . Pentru inceput sunt
definite numele bazei de date precum i versiunea.
private static final String DATABASE_NAME = "facebook_top.db";
private static final int DATABASE_VERSION = 1;
Tabelele bazei de date au fost definite cu doua coloane , respectiv id si nume. Au fost
create tabelele table_movies, table_music, table_books, table_tv si table_games.Pentru a fi
create a fost executate comanda execSQL.
UserDataSource
n aceasta clasa sunt executate operatiile asupara bazei de date . Aceste operatii sunt
folosite atat in MainActivity cat si in Activity-urile in care sunt introduse datele in ListView-uri
si afisate utilizatorului.
Pentru fiecare dintre cele 5 date pe care doream sa le obtinem am efectuat operatii de
insert si extragere . Vom prezenta aceste operatii pentru tabela movies , celelealte fiind similare .
29
Metoada de extragere este folosita pentru a afisa elementele dorite. Aceasta foloseste
urmatoarea interogare pentru a extrage primele 10 elemente din lista ordonate dupa numarul lor
de apariii , luate descrescator:
String sql = "SELECT name from movies GROUP BY name ORDER BY count(name) desc
limit 10";
Acest query returneaza un obiect de tip Cursor . Un Cursor reprezinta rezultatul unui
query si pointeaza un rand din rezultatul intors de query. In acest fel , sistemul Android trateaza
rezultatele intoarse de query-uri eficient , nefiind nevoie de a salva toate datele in memorie
30
Pentru a ne deplasa intre diferite randuri ale rezultatului putem folosi metodele
moveToFirst() si moveToNext() . Metoda isAfterLast() permite verificarea sfarsitului rezultatelor.
Pentru tabelele music,books,tv si games , metodele de inserare si de extragere sunt
similare.
Fiiere de resurse
Pe langa clasele prezentate pana acum , un proiect Android conine i multe fiiere de
resurse. Aceste sunt folosite pentru a construi interfaa grafica a aplicaiei sau pentru a face
referire la anumite variabile care au o valoare constant.
AndroidManifest.xml
Fiecare aplicatie trebuie sa aiba un fisier AndroidManifest.xml in radacina proiectului.
Acest fisier manifest prezinta informatii esentiale despre aplicatie sistemului de operare Android,
informatii pe care sistemul trebuie sa le aiba inainte sa poata rula codul aplicatiei. Printre alte
lucruri , in fisierul manifest se gasesc urmatoarele :
31
Android pune la dispoziie un limbaj XML care cuprinde subclase ale View si
ViewGroup. Pe baza acestora se pot defini elemente de interfa folosint XML .
32
33
main.xml
Acest fisier construieste interfata pentru MainActivity , activitatea cu care se lanseaza
aplicaia. Are la baza un RelativeLayout care are setat ca background o imagine referita in alt
fisier de resurse , si anume drowable.
34
pick_friends_activity.xml
Acest layout contine un FrameLayout care face referire la fragmentul oferit de Facebook
care permite selectarea prietenilor.
android:id="@+id/friend_picker_fragment"
select_preferences.xml
Pentru acest layout s-a folosit un RelativeLayout si cuprinde 5 butoane , fiecare buton
avand propietatea android:background setate cu o referire la fisierul back_button.xml din
drawable care contine unele caracteristici ale unui buton ca forma , culoare si asezarea acestuia.
activity_list_view.xml
Acest layout contine un View de tip ListView pentru a afisa topul respectiv.
35
Un alt fisier de resurse important se gaseste n folderul values. Acesta conine pe lng
numele aplicaiei i un identificator unic oferit de Facebook.
36
37
Dupa ce acest cod este generat , el se adauga in tabul Sample App din contul de
dezvoltator al platformei Facebook.
Urmatorul pas il constituie crearea aplicatiei , acest lucru facandu-se astfel 'Apps' >
'Create a New App':
Dupa ce ste creata aplicatia va aparea codul aplicatiei care trebuie introdus in fisierul de
resurse strings.xml .
38
Nu n ultimul rnd atrbuie s trimitem o cerere pentru a putea folosi toate facilitaile
platformei Facebook. Odata aprobata aceasta cerere , aplicaia dezvoltat poate beneficia de toate
serviciile implementate cu ajutorul Facebook SDK.
39
40
Concluzii
Aceast aplicaie mi-a oferit ocazia studierii unei tehnologii foarte populare i pentru care
n urmatorii ani se prognozeaz creterea folosirii acestora. Aplicaiile pentru sistemul de operere
Android au un numar foarte mare de utilizatori , mai ales cele cu specific social.
Am reuit s nelg principalele componente ale sistemului Android ct i principalele
modalitai de utilizare ale resurselor puse la dispoziie dezvoltatorilor de platforma de socializare
Facebook.
n momentul finalizrii redactarii acestui document , aplicaia se afla ntr-o stare ce i
confer utilitate , putnd-i fi aduse mbunatairi. Printre viitoarele dezvoltari ulterioare , cele
mai importante ar putea fi :
Adaugarea unui buton care s permit selectarea tuturor prietenilor din list.
Navigarea spre pagina de Facebook a fiecarui element din topul prezentat.
Afiarea unui grafic care s permita vizualizarea numarului de prieteni care au dat
like la elementele din top.
Afiarea pozei de profil a utilizatorului pe prima activitate lansat.
Analiza altor date preluate din lista de prieteni ai utilizatorului
Optimizarea aplizaiei pentru viitoarele versiuni ale sistemului de operare
(Android L ).
41
Lista tabelelor
Tabel 1 : Uniti vndute i cote de pia T4 2013
Tabel 2 : Versiuni Android
Tabel 3 : Pachete prezente in SDK Android
Lista figurilor
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
Figur
42
ANEXE
Bibliografie
[1]
STEE2010 STEELE James , TO Nelson , The Android Developers
Cookbook Building
Application with the Android SDK , AddisonWesley , Crawfordsville , 2010
43