Aplicație ghid informativ pentru [605390]

PROIECT DE DIPLOMĂ

UNIVERSITATEA POLITE HNICA TIMIȘOARA
FACULTATEA DE INGINE RIE HUNEDOARA
SPECIALIZAREA INFORMATICĂ INDUSTRI ALĂ

LUCRARE DE DIPLOMĂ

Coordonator Stiintific: Absolvent: [anonimizat].dr. Ionel MUSCALAGIU Claudia Ana -Maria ADAM

HUNEDOARA
2018

PROIECT DE DIPLOMĂ

UNIVERSITATEA POLITE HNICA TIMIȘOARA
FACULTATEA DE INGINE RIE HUNEDOARA
SPECIALIZAREA INFORM ATICĂ INDUSTRIALĂ

Dezvoltarea aplicațiilor pe platforma
Android
Aplicație – ghid informativ pentru
filme: Movie Guide

Coordonator Stiintific: Absolvent: [anonimizat].dr. Ionel MUSCALAGIU Claudia Ana -Maria ADAM

HUNEDOARA
2018

PROIECT DE DIPLOMĂ

CUPRINS

Introducere ………………………….. ………………………….. ………………………….. ………………………….. …… 4
Capitolul I ………………………….. ………………………….. ………………………….. ………………………….. …….. 5
Generalități ………………………….. ………………………….. ………………………….. ………………………….. … 5
1.1 Istoric ………………………….. ………………………….. ………………………….. ………………………….. 5
1.2 Ce tehnologi se folosesc pentru dezvoltarea aplicaților?. ………………………….. ………………. 5
1.3 Ce fel de domeniu este necesar pentru dezvoltarea aplicaților Android? ………………………. 5
1.4 Ce este un fisier AKP? ………………………….. ………………………….. ………………………….. ……… 6
1.5 Arhitectura sistemului Android ………………………….. ………………………….. …………………….. 6
Capitolul I I ………………………….. ………………………….. ………………………….. ………………………….. …….. 7
Tehnologi Informatice și unelte de dezvoltare A ndroid ………………………….. ………………………….. .. 7
2.1 Tehnologi Folosite ………………………….. ………………………….. ………………………….. …………. 7
2.2 Bibliotecii ………………………….. ………………………….. ………………………….. ……………………… 9
Capitolul I II ………………………….. ………………………….. ………………………….. ………………………….. ….. 11
Dezvoltarea în Android ………………………….. ………………………….. ………………………….. ……………. 11
3.1 Crearea unui proiect în Android ………………………….. ………………………….. ………………….. 11
3.2 Rularea unui proiect în Android ………………………….. ………………………….. …………………… 14
3.3 Crearea unei interfețe ………………………….. ………………………….. ………………………….. ….. 16
3.4 Crearea unei activitați ………………………….. ………………………….. ………………………….. …. 18
3.2 Intent ………………………….. ………………………….. ………………………….. ………………………… 20
3.3 Servicii ………………………….. ………………………….. ………………………….. ……………………….. 20
3.4 Fragment ………………………….. ………………………….. ………………………….. …………………… 20
Capitolul I V ………………………….. ………………………….. ………………………….. ………………………….. ….. 22
Structura aplica ției Ghid Informativ pentru Filme: Movie Guide ………………………….. …………….. 22
Capitolul V ………………………….. ………………………….. ………………………….. ………………………….. …… 41
Implementarea aplicației Ghid Informativ pentru Filme: Movie Guide ………………………….. ……… 41
Capitolul VI ………………………….. ………………………….. ………………………….. ………………………….. ….. 45
Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ….. 45
Capitolul VII ………………………….. ………………………….. ………………………….. ………………………….. …. 46
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. 46

PROIECT DE DIPLOMĂ

INTRODUCERE

Dezvoltarea recentă și neîntreruptă a industriei dispozitivelor mobile inteligente, odată
cu cresterea performanțelor microelectronicii a avut ca efect răspândirea acestei tehnologii
în toate mediile : afaceri, sănătate, educație, divertisment.
Tehnologiile mobile ocupa un loc important in societatea actuala datorita
avantajele pe care le ofera:
 flexibilitate, in orice moment, prin utilizarea in orice moment;
 costuri de access din ce in ce mai mici la informatie;
 dezvoltarea aplicatiilor pentru o gama larga de domenii: afaceri, sanatate,
educatie, divertisment.
Prin p rezentul studiu de caz : „ Dezvoltarea aplicațiilor pe platforma Android
Aplicație – ghid pentru filme„ se demonstrează preluarea în timp real a datelor despre
filme de pe baza de date online www.themoviedb.com .
Pentru dezvoltarea aplicaț iei s-a uti lizat Android Studio 3.1.1 , care conț ine un
pachet de biblioteci nec esare pentru dezvoltarea aplicațiilor î n mediul Android, iar
programare a fost realizată î n limbajul Java.
Proiectu l este structurat pe capitole, în care sunt prezentate informații generale ale
aplicaț iilor A ndroid: interfete XML, activitaț i.
Capitolul 1. Informaț ii despre elementele unei aplicaț ii Android.
Capitolul 2. Unelt ele necesare dezvoltarii aplicațiilor care rulează pe Android.
Capitolul 3. Modul de programare al aplicaț iilor pe Android.
Capitolul 4. Prezentarea structuri aplicaț iei Ghid Informativ pentru Filme.
Capitolul 5. Implementarea apl icației Ghid Informativ pentru Filme
Capitolul 6 . Concluzii.
Capitolul 7 . Bibliografie.

PROIECT DE DIPLOMĂ

CAPITOLUL I
GENERALITĂȚ I

1.1 Istoric
Android este singurul sistem de operare mobil creat de Google, iar mai tarziu de
consorțiul comercial Open Handset Alliance și reprezintă o platformă software pentru
telefoane mobile și dispozitive bazate pe nucleu Linux. Acesta permite dezvoltatorilor să
scrie cod în limbaj Java. Aplicațiile pot fi scrise și în C sau alte limbaje de programare dar
acest mod de dezvoltare nu est e susținut oficial de Google. Platforma Android a fost lansată
la 5 noiembrie 2007 prin anunțarea fondării unui consorțiu de 48 de companii de hardware,
software și de telecomunicații numit Open Handset Alliance (OHA), incluzând companii ca
Google, HTC, Intel, Motorola, Qualcom, T -Mobile, Sprint Nextel și Nvidia.[1] La 9 decembrie
2008, 14 noi membri au aderat la proiectul Android printre care Sony Ericsson, Vodafone
Group, Asustek Computer Inc, Toshiba Corp și Garmin Ltd. Din data de 21 octombrie 2008,
Android a fost disponibil ca Open Sou rce astfel că Google a deschis întregul cod sursă sub
licența Apache. Sub această licență producătorii sunt liberi să adauge extensii proprietare,
fără a le face disponibile comunității open source, în timp ce contribuțiile Google la această
platformă rămâ n open source. Platforma Android a fost construită pentru a permite
dezvoltatorilor să creeze aplicații mobile care să utilizeze toate resursele pe care un telefon
le are de oferit. A fost construit pentru a fi cu adevărat deschis. O aplicație poate apela
oricare dintre funcționalitățile de bază ale telefonului, cum ar fi efectuarea de apeluri,
trimiterea de mesaje text sau folosirea aparatului de fotografiat. Android -ul nu face diferența
între aplicațiile de bază ale telefonului și cele create de dezvoltat ori. Ele pot fi construite să
aibă acces egal la capacitățile telefonului pentru a oferi utilizatorilor un spectru larg de
aplicații și servicii. Fiind o platformă open source, aceasta va evolua continuu prin
încorporarea tehnologiilor de ultimă generație.

1.2 Ce tehnologii se folosesc pentru dezvoltarea aplicațiilor Android?
Dezvoltarea aplicațiilor pentru platforma Android se poate efectua în câteva
moduri diferite folosind limbajele: C/C++, Java/XML sau Koltin . Limbajele C și C++ sunt
limbaje sursă ale sistemului de operare Android, așadar, aplicațiile realizate cu ajutorul
acestor limbaje se numesc native . Totuși, cele mai multe tipuri de aplicații Android se
dezvoltă folosind combinația de limbaje Java și XML. Java este un limbaj care are nevoie
pentru execuția sa de o mașină virtuală, iar în Android pentru acest lucru se folosește mașina
virtuală Android Runtime (ART). Limbajul XML se folosește pentru crearea layout -ului,
respectiv pentru aranjarea și crearea componentelor vizuale, în timp ce limb ajul Java se
folosește pentru definirea logicii de programare de bază a aplicației.

1.3 Ce fel de domeniu este necesar pentru dezvoltarea aplicațiilor Android?
Java este cel mai popular limbaj pentru crearea aplicațiilor sistemului de operare
Android. Astfel, pentru crearea cu succes a aplicațiilor Android este nevoie de un set de
tehnologii ce permit scrierea codului sursă Java. Premisa pentru scrierea codului de
programare Java este existența lui Java Development Kit (JDK), instalat pe calcul atorul
folosit pentru dezvoltare.
Totuși, pe lângă cererea de bază, crearea aplicațiilor pentru platforma Android
necesită și folosirea diferitor altor instrumente, precum linkeri, depanatoare și diferite

PROIECT DE DIPLOMĂ

biblioteci cu cod finit. Toate aceste com ponente la un loc se numesc Android Software
Development Kit (SDK). Descărcarea și instalarea unei aplicații ne permite să obținem toate
componentele menționate pentru de zvoltarea aplicațiilor Android.

1.4 Ce este un fișier APK?
Limbajul de programare Java este un mediu de execuție, care pe lângă fișierele
cu open -source (.java) și fișierele cu bite -code (.class), cunosc și un tip special pentru
arhivare. Acestea sunt fișierele cu extensia .jar (Java Archive), dar se folosesc pentru
gruparea mai multor fișiere java cu open -source, metadate, precum și diferite resurse. Mediul
de execuție Android nu recunoaște fișierele JAR, dar deține propriul format pentru gruparea
tuturor fișierelor unei aplicații. Este vorba de fișierele Android Application Package (AP K).
APK este abrevierea pentru noțiunea Android Application Package. De fapt, APK este fișierul
care conține toate fișierele necesare pentru distribuirea și instalarea aplicațiilor Android.
Acesta este fișierul ce reprezintă arhiva, aproape identică cu arh ivele JAR și ZIP. Acest fișier
este creat la construirea aplicației. Pentru dispozitivele fizice și virtuale este suficient doar
acest fișier pentru a fi în posibilitatea de a porni aplicația Android creată.

1.5 Arhitectura sistemului Android
Sistemul Android dispune de o arhitectură alca tuită din 5 niveluri ce comunică
între ele:
 Nucleu Linux (Linux Kernel)
 Librării de bază
 Android RUNTIME
 Aplicații Framework
 Aplicații

Arhitectura sistemului Android

PROIECT DE DIPLOMĂ

CAPITOLU L II

TEHNOLOGII INFORMATICE Ș I UNELTELE DE DEZVOLTARE
ANDROID
2.1. Tehnologii Folosite
Pentru a dezvolta aplicații pentru Android este nevoie de un IDE, Android Studio (care
vine la pachet cu SDK -ul pentru Android), și de JDK (Java Development Kit)

Fig. 2.1 Pagină descărcare Android Studio

Fig. 2.2 Pagină descărcare Java Development Kit

PROIECT DE DIPLOMĂ

Dupa instalarea utilităților de mai sus se actualizează SDK managerul cu pachetele
API necesare.

Fig. 2.3 Android SDK Manager

2.1.1 Java
Java este un limbaj de programare orientat -obiect, puternic tipizat. Cele mai multe
aplicații sunt scrise î n Java.
Limbajul Java împrumută o mare parte din sintaxa C ș i C++. Un program Java
compilat, scris corect , poate fi rulat fără modificari pe orice platformă care are instalată o
mașina virtuală Java (JVM – Java Virtuale Machine).
Medii de dezvoltare – Un IDE ( integrated development environment ) este un mediu
de lucru care permite dezvoltarea de aplicatii care utilizeaza anumite limbaje de programare
(cele suportate de IDE). P entru Java sunt folosoite urmatoarele:
 JCreator
 Android Studio
 Eclipse
 NetBeans
 JBuilder
 JDeveloper

PROIECT DE DIPLOMĂ

2.1.2 Android API
Aplicațiile destinate platformei Android sunt create cu ajutorul API -ului Android.
API-ul Android este scris în limbajul de programare Java de către dezvoltatorii platformei
Android, acesta fiind public și gratuit, având de asemenea și o pagină web dedicată
documentației API -ului plus câteva „unelte” suplimentare (tutoriale, „best practices” în
development precum și design, apl icații de test, etc.) pentru a ajuta dezvoltatorii de astfel de
aplicații. Există mai multe versiuni de Android API întrucât acesta se actualizează la fiecare
versiune nouă de Android. Astfel, Android API 1 corespunde primei versiuni de Android, însă
prima versiune de API facută publică este Android API 3 ce corespunde versiunii Android
1.5.

2.1.3 Android Studio
Odată cu apariția sa, Android Studio, a înlocuit ADT -ul (Android Development
Tools) mediului de dezvoltare Eclipse, adăugând în același tim p o interfață mult mai
prietenoasă pentru dezvoltatori, precum și unelte mai ușor accesibile și mai ușor de folosit.
Pe lângă acestea, a fost adăugat și un „build automation system” numit Gradle cu ajutorul
căruia se pot configura buildurile facute pentru aplicațiile Android mult mai simplu și mai
intuitiv. De asemenea cu Gradle se pot descărca biblioteci specifice Android -ului printr -o
simplă linie de cod și un „click” pe butonul de „Sync Project with Gradle Files”.
Din moment ce acum ne aflăm la al doilea mediu de dezvoltare pentru platforma
Android și au intervenit multe schimbări odată cu trecerea de la Eclipse la Android Studio,
se poate preciza faptul că acum trebuie respectată o altă structură de directoare și fișiere
față de cea din primul med iu de dezvoltare:
 build.gradle(project) este fișierul care reprezintă configurațiile care se aplică la
toate modulele aplicației .
 Numele -modulului/
 build/ este directorul care conține „the build outputs”
 libs/ este directorul care conține Bibliotecile priv ate
 build.gradle(module) este fișierul care reprezintă configurațiile pentru build -ul
modulului
 app/ conține toate fișierele sursă principale :
o Android Manifest.xml „descrie natura aplicației și toate componentele sale”
o java/ conține toate fișierele sursă J ava
o res/ conține toate resursele care sunt folosite pentru crearea aplicației cum ar
fi layout -uri sau „UI strings”

2.2. Bibliotecii folosite

2.2.1 Biblioteca v7-palette
Aceasta b iblioteca vă permite să extrageți culori proeminente dintr -o imagine. Pentru
a folosi această bibli otecă într -un proiect Android va trebui editat fișierul build.gradle a
modulului unde va fi folosită biblioteca în felul următor:

implementation "com.android.support:palette -v7:${supportLibVersion} "

PROIECT DE DIPLOMĂ

2.2.2 Biblioteca v7 – recyclerview
Biblioteca recicllerview adaugă clasa RecyclerView. Această clasă oferă suport
pentru widgetul RecyclerView . Pentru a folosi această bibliotecă într -un proiect Android va
trebui editat fișierul build.gradle a modulului unde va fi f olosită biblioteca în felul
următor:

implementation "com.android.support:recyclerview -v7:${supportLibVersion} "

2.2.3 Biblioteca RxJava si Biblioteca
Biblioteca RxJava este folosită pentru compunerea programelor asincrone și a
evenimentelor utilizând secvențe observabile . Biblioteca RxAndroid adaugă clasele minime
la RxJava care fac scrierea componentelor reactive în aplicațiile Android ușor și fără
probleme. Pentru a folosi aceaste bibliotecii într-un proiect Android va trebui editat fișierul
build.g radle a modulului unde v or fi folosite bibliotec ile în felul următor:

implementation 'io.reactivex.rxjava2:rxjava:2.1.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

2.2.4 Biblioteca OKHttp / OKHttp Interceptor / Glide
Biblioteca OKHttp este utilizata ca un client HTTP pentru aplicații Android și Java.
OKHttp Interceptor înregistrează datele de solicitare și de răspuns HTTP. Glide este un
management rapid și eficient al mediilor de tip open source și un cadru de încărcar e a
imaginii pentru Android, care împachetează decodificarea memoria și cache -ul de discuri și
punerea în comun a resurselor într -o interfață simplă și ușor de utilizat. Pentru a folosi
aceaste bibliotecii într-un proiect An droid va trebui editat fișierul build.gradle a modulului
unde v or fi folosite bibliotec ile în felul următor:

implementation "com.squareup.okhttp3:okhttp: ${okhttpVersion} "
implementation "com.squareup.okhttp3:logging -interceptor: ${okhttpVersion} "
implement ation 'com.github.bumptech.glide:glide:4.2.0'

PROIECT DE DIPLOMĂ

CAPIT LUL III

DEZVOLTAREA IN ANDROID

3.1 Creearea unui proiect in Android Studio
1.În fereastra de început, se alege Start a new Android Studio Project (fig. 3.1)

Fig. 3.1 Meniu de întâmpinare

2. Se completează câmpurile necesare și se apasa Next.

Fig. 3.2 Meniu configurare

PROIECT DE DIPLOMĂ

Aplication Name – reprezintă numele aplicației care apare pentru utilizator.
Company Domain – adaugă un domeniu la denumirea pachetului.
Package Name – reprezintă d enumirea completă a proiectului (se folosesc aceleași
convenții ca și la pachetele Java). Denumirea pachetului trebuie sa fie unică, fiecare clasă
din sistemul Android identificandu -se după această denumire.
Project Location – locația unde se stochează proie ctul.

3. Se selectează forma proiectului după cum se vede in fig. 3.3 și se selectează un
SDK minim.

Fig. 3.3 Meniu selectare API

SDK-ul minim este cea mai veche versiune de Android pe care o acceptă aplicația,
indicat de nivelul API, în cazul acesta 15. Pentru a rula pe cât mai multe dispozitive, ar trebui
setat acest lucru la cea mai mică versiune disponibilă care permite aplicației să furnizeze un
set de caracteristici de bază și cât mai actual.

4. Se alege un sablon

Fig. 3.4 Meniu selectare sab lon

PROIECT DE DIPLOMĂ

5. Se completează câmpurile ca în figura de mai jos și se alege Finish.

Fig. 3.5 Meniu final

6. Dupa parcurgerea pașilor de mai sus structura proiectului ar arăta ca în figura de
mai jos:

PROIECT DE DIPLOMĂ

3.2 Rularea unui proiect Android

1. Rularea pe emulator
Pentru a rula aplicația pe emulator , mai întai trebuie creeat un Android Virtual
Device (AVD) care conține configurațiile care permit simularea unui dispozitiv real:
i. Click pe Tools>Android>AVD Manager.
ii. Click Create Virtual Device și se alege un model cât mai apropiat de dimensiunile
dispozitivului real dar cu rezoluție suportabila pentru PC

iii. Se selectează un sistem de operare virtual pentru dispozitivul virtual.

iv. După ce se alege un nume pentru dispozitivul virtual se apasă Finish și lista AVD
Manager arata ca în figura urmatoare:

PROIECT DE DIPLOMĂ

v. Se apasă Run din Android Studio.

2. Rularea pe un dispozitiv real.

I. Implică conectarea dispozitivului real la PC printr -un cablu usb.
II. Bifarea opțiunii Settings>Developer Options>USB Debugging din dispozitivul Android
(pentru modele mai noi se apasă de 7 ori Settings>About Phone> Build Number ca să apară
Developer O;ptions).
III. Se apasă Run.

IV. Se alege dispozitivul conectat evidențiat cu albastru ca în figura:

PROIECT DE DIPLOMĂ

3.3 Creearea unei interfete

Interfața grafică pentru o aplicație Android este construită folosind o ierarhie a
obiectelor View și ViewGroup. Obiectele View sunt de obicei Interface(UI), cum ar fi butoane
sau câmpuri de text. Obiectele ViewGroup sunt containere invizibile care definesc modul în
care obiectele View sunt dispuse, cum ar fi într -o grilă sau o listă verticală.
Pentru a creea layout -ul, se pot instanția obiecte View în cod, dar cel mai simplu și
cel mai eficient mod de a defini layoutul este cu un fișier XML. XML oferă o structură care
poate fi cit ită ușor, similar cu HTML. Denumirea unui element XML pentru obiectul View este
corelată cu clasa Android pe care o reprezintă. Deci, un element <TextView> creează un
widget TextView în UI -ul, și un element <LinearLayout> creează un grup de vizualizare
LinearLayout.
Un Layout definește structura vizuală pentru o interfață de utilizator, și se poate face
in două moduri:
 declarare elementele UI în XML. Android oferă un vocabular XML simplu, care
corespunde claselor și subclaselor View, cum ar fi cele pentru widget -uri și machete.
 instanțiere elemente de layout în timpul rulării. Aplicația poate crea obiecte
View și ViewGroup (și manipula proprietățile lor) din cod.

Creearea interfeței cu XML
Folosind vocabularul XML Android, se proiectează rapid machete UI și elementele de
UI conținute în machete, similar cu crearea paginilor web în HTML – cu o serie de elemente
imbricate. Fiecare fișier layout trebuie să conțină exact un element rădăcină, care trebuie să
fie un obiect View sau ViewGroup. După ce s -a defin it elementul rădăcină, se pot adăuga
obiecte layout suplimentare sau widget -uri ca elemente pentru a construi treptat o ierarhie
View, care definește layout -ul. De exemplu, un layout XML care utilizează un LinearLayout
vertical pentru un TextView și un RadioButton produce interfața :

La compilarea aplicației, fiecare fișier layout XML este compilat într -o resursă View.
Resursa layout se încarcă în aplicație, prin apelarea în corpul metodei Activity.onCreate () a
setContentView (), trimițându -i ca parametru fișierul layout dorit ca interfață uitilizator .

PROIECT DE DIPLOMĂ

protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_my_app );

Metoda onCreate () este apelată automat de către sistemul Android atunci cand
aplicația este lansată.
Fiecare obiect View și ViewGroup suportă propria lor varietate de atribute XML.
Anumite atribute sunt specifice unui obiect View (de exemplu, TextView suportă atributul
textsize), dar aceste atribute sunt, de as emenea, moștenite de orice obiecte View care pot
extinde această clasă.

Unele dintre acestea sunt comune tuturor obiectelor View, deoarece acestea sunt
moștenite de la clasa rădacină View (cum ar fi atributul id).
Orice obiect View poate avea un ID asoc iat cu acesta, pentru a identifica în mod unic
View în cadrul interfetei utilizator.

Cand aplicația este compilată, acest ID este referit ca un întreg, dar ID -ul este de
obicei atribuit în fișierul layout. XML ca un șir de caractere(string), în atributul id.
Acesta este un atribut XML comun tuturor obiectelor View(definite de clasa View).
Sintaxa pentru un ID, în interiorul unei etichete XML este:

android :id="@+id/button.

Simbolul @ la începutul șirului indică faptul că parserul XML ar trebui să extindă restul
șirului de identitate și să -l identifice ca resursă ID.
Simbolul + înseamnă că acesta este un nume de resursă nouă, care trebuie să fie
creat și adăugat la resursele noastre (în fișierul R.java).
Pentru a creea interfețe și a le referi din aplicație, se poate proceda astfel:

 Se definește un view în fișierul layout XML și i se atribuie un ID.
<Button android :id="@+id/button"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :text= "Button" />

 Apoi se crează o instanță a obiectului Button și se incarcă din layout (de obicei,
în metoda onCreate ()):
Button myButton = (Button) findViewById(R.id.my_button);

PROIECT DE DIPLOMĂ

3.4 Creearea unei activitati

O activitate este o componentă de aplicație care oferă un ecran cu care utilizatorul
poate interacționa în scopul de a face ceva, cum ar fi apelarea la telefon, să facă o fotografie,
trimite un e -mail, sau pentru a vizualiza o h artă.
Pentru a creea o activitate, trebuie creeată o subclasă a clasei Activity. În subclasă,
trebuie implementate metodele callback pe care sistemul le apeleaza atunci când activitatea
își schimbă starea, cum ar fi atunci când se creează activitatea, se oprește, a fost reluată,
sau distrusă.
Pentru ca activitatea să fie accesibilă sistemului aceasta trebuie declarată în fisierul
Manifest.xml . Pentru a declara activitatea, trebuie deschis fișierul manifest și adăugat un
element <activity > ca subelement a l elementului <application >. De exemplu:

Există mai multe alte atribute care se pot include în acest element, pentru a defini
proprietăți, cum ar fi eticheta label pentru activitate, o pictogramă pentru activitate, sau o
temă pentru stilul interfeței utilizator. Atributul android:name este obliga toriu pentru că
specifică numele clasei în care este activitatea. După publicarea aplicației, android:name
trebuie să ramână neschimbat .
Un element <activity > poate folosi diverse filtre folosind elementul <intent -filter>
pentru a specifica modul în care alte componente îl pot activa.
Atunci când se creează o nouă aplicație, folosind instrumentele Android SDK,
activitatea șablon creeată automat include un filtru de intenție, care declară că activitatea
răspunde la acțiunea "MAIN" și ar trebui să fie plasată în categoria "Launcher". Filtrul intenție
arată astfel:

Elementul <action> specifică faptul că aceasta este principalul punct de intrare.
Elementul <category> specifică faptul că această activitate ar trebui să fie inc lusă în
categoria “LAUNCHER” a sistemului (pentru a permite utilizatorilor să lanseze această
aplicatie).
Atunci când o activitate trece în și din diferitele stări, aceasta este notificată prin
diverse metode callback. Toate metodele callback sunt metode care se pot suprascrie pentru
a face munca corespunzătoare, atunci când starea activității se schimbă.

PROIECT DE DIPLOMĂ

În figura de mai jos sunt prezentate căile pe care activitatea o poate lua între diferitele
stări:

 onCreate () – apelată atunci când activitatea este creeată pentru prima dată.
 onRestart () -apelată după ce activitatea a fost oprită, chiar înainte ca aceasta
să fie pornită din nou; urmată întotdeauna de onStart ().
 onStart () – apelată chiar înainte ca ac tivitatea sa devina vizibilă pentru utilizator.
 onResume () -apelată chiar înainte ca activitatea să înceapă interacțiunea cu
utilizatorul.
 onPause () -apelată atunci când sistemul este pe cale să înceapă reluarea la o
altă activitate.

PROIECT DE DIPLOMĂ

 onStop () -apelată at unci când activitatea nu mai este vizibilă pentru utilizator.
 onDestroy () – apelată înainte ca activitatea să fie distrusă.

3.5 Intent
Obiectele de tip Intent sunt mesaje asincrone care permit aplicațiilor să solicite
funcționalități de la alte componente Android. Cu ajutorul obiectelor de tip Intent, este
posibilă comunicarea în timpul rulării cu diverse componente aflate fie în interiorul aplicației,
fie localizate în alte aplicații. Printre componentele ce pot fi apelate prin intermediul obiec telor
de tip Intent se numără servicii, activități etc. O activitate poate apela direct o componentă
(Intent explicit) sau poate cere sistemului să evalueze componentele înregistrate pe baza
datelor din Intent (Intent implicit).

3.6 Servicii
O componentă de tip Service este o componentă care se execută în fundal, fără
interacțiune directă cu utilizatorul și al cărei ciclu de viață este independent de cel al altor
componente . Odată pornit, serviciul respectiv își execută în mod implicit în cadrul firului de
execuție principal sarcinile pe care le are de făcut chiar dacă componenta care l -a pornit
inițial este distrusă. Seviciul este folosit atunci când aplicația are de efectuat o operație de
lungă durată care nu interacționează cu utilizatorul sau pentru a f urniza funcționalități pentru
alte aplicații.

3.7 Fragment
Un fragment reprezintă un comportament sau o porțiune de interfață cu utilizatorul din
cadrul unei activități. Se pot combina mai multe fragmente într -o singură activitate pentru a
construi o inte rfață multi -panou sau se poate reutiliza un fragment în mai multe activități.
Imaginea următoare arată o astfel de implementare. Pe un ecran mai mic arată doar
un fragment și permite utilizatorului să navigheze printr -un alt fragment.

Interfață fragmentată pe ecran lat/ ecran mic

PROIECT DE DIPLOMĂ

Obiectele de tip fragment au propiul ciclu de viață. Un fragment trebuie să fie
întotdeauna încorporat într -o activitate, ciclul de viață al fragmentului fiind afectat în mod
direct de ciclul de viață al activității gaz dă. De exemplu, dacă activitatea este întreruptă
atunci și fragmentele incluse în aceasta sunt întrerupte. Ciclul de viață al fragmentului diferă
de cel al activității atunci cand activitatea se rulează, fiecare fragment putând fi manipulat
independent (ad ăugare, eliminare, modificare de fragment, etc.). Ca și structură,
componenta de tip fragment este foarte similară cu cea de tip Activity, în cadrul lor regăsindu –
se pe lângă metode specifice și metodele onCreate(Bundle), onStart(), onResume(), etc.

PROIECT DE DIPLOMĂ

CAPITOLU L IV

STRUCTURA APLICATI EI GHID IMFORMATIV FILME: MOVIE
GUIDE

Pentru realizarea aplicației s -au folosit clase. P entru implementarea claselor s -a
realizat diagram de clase. D iagrama de clase este prezentată î n figura de mai jos:

PROIECT DE DIPLOMĂ

Având structura proiectului se pot detalia puțin clasele și fișierele care compun
aplicația :
1.Principalele clase necesare pentru implementarea aplicației :

 Api.java – realizează legatura între aplicația android ș i baza de date online
(https://www.themoviedb.org/ ) dar ș i cu youtube.
package com.esoxjem.movieguide;

public class Api {
public static final String BASE_POSTER_PATH = "http://image.tmdb.org/t/p/w342" ;
public static final String BASR_BACKDROP_PATH = "http://image.tmdb.org/t/p/w780" ;
static final String YOUTUBE_VIDEO_URL = "http://www.youtube.com/watch?v=%1$s" ;
static final String YOUTUBE_THUMBNAIL_URL = "http://img.youtube.com/vi/%1$s/0.jpg" ;

PROIECT DE DIPLOMĂ

private Api() {
// hide implicit publi c constructor
}

public static String getPosterPath(String posterPath) {
return BASE_POSTER_PATH + posterPath;
}

public static String getBackdropPath(String backdropPath) {
return BASR_BACKDROP_PATH + backdropPath;
}
}

 BaseApplication.java – pune laolaltă resursele aplicației, gestionează lucrul cu
baza de date online.

package com.esoxjem.movieguide;

import android.app.Application;
import android.os.StrictMode;
import com.esoxjem.movieguide.details.DetailsComponent;
import com.esoxjem.movieguide.details.DetailsModule;
import com.esoxjem.movieguide.favorites.FavoritesModule;
import com.esoxjem.movieguide.listing.ListingComponent;
import com.esoxjem.movieguide.listing.Lis tingModule;
import com.esoxjem.movieguide.network.NetworkModule;
import com.esoxjem.movieguide.listing.sorting.SortingModule;

public class BaseApplication extends Application
{
private AppComponent appComponent ;
private DetailsComponent detailsCom ponent;
private ListingComponent listingComponent ;

@Override
public void onCreate()
{
super.onCreate();
StrictMode. enableDefaults ();
appComponent = createAppComponent();
}
private AppComponent createAppComponent()
{
return DaggerAppComponent. builder()
.appModule( new AppModule( this))
.networkModule( new NetworkModule())
.favoritesModule( new FavoritesModule())
.build();
}

public DetailsComponent createDetailsComponent()
{
detailsComponent = appComponent .plus(new DetailsModule());
return detailsComponent ;
}

public void releaseDetailsComponent()
{
detailsComponent = null;
}

PROIECT DE DIPLOMĂ

public ListingComponent createListingComponent()
{
listingComponent = appComponent .plus(new ListingModule());
return listingComponent ;
}

public void releaseListingComponent()
{
listingComponent = null;
}

public ListingComponent getListingComponent()
{
return listingComponent ;
}
}

 Movie.java – prin intremediul acestei clase se preiau date despre filme cum ar
fi: titlul fil mului, posterul filmului, data î n care va aparea filmul, nota de la critici de filme ;
pentru realizarea acestei clasa s-au folosit constructorul implici, și constructorul de copiere.

package com.esoxjem.movieguide;

import android.os.Parcel;
import android.os.Parcelable;

import com.squareup.moshi. Json;

public class Movie implements Parcelable
{
private String id;
private String overview ;
@Json(name = "release_date" )
private String releaseDate ;
@Json(name = "poster_path" )
private String posterPath ;
@Json(name = "backdrop_path" )
private String backdropPath ;
private String title;
@Json(name = "vote_average" )
private double voteAverage ;

public Movie()
{

}

protected Movie(Parcel in)
{
id = in.readString();
overview = in.readString();
releaseDate = in.readString();
posterPath = in.readString();
backdropPath = in.readString();
title = in.readString();
voteAverage = in.readDouble();
}

public static final Creator<Movie> CREATOR = new Creator<Movie>()
{

PROIECT DE DIPLOMĂ

@Override
public Movie createFromParcel(Parcel in)
{
return new Movie(in);
}

@Override
public Movie[] newArray( int size)
{
return new Movie[size];
}
};

public String getId()
{
return id;
}

public void setId(String id)
{
this.id = id;
}

public String getOverview()
{
return overview ;
}

public void setOverview(S tring overview)
{
this.overview = overview;
}

public String getReleaseDate()
{
return releaseDate ;
}

public void setReleaseDate(String releaseDate)
{
this.releaseDate = releaseDate;
}

public String getPosterPath()
{
return posterPath ;
}

public void setPosterPath(String posterPath)
{
this.posterPath = posterPath;
}

public String getBackdropPath()
{
return backdropPath ;
}

public void setBackdropPath(String backdropPath)
{
this.backdropPath = backdropPath;
}

public String getTitle()
{

PROIECT DE DIPLOMĂ

return title;
}

public void setTitle(String title)
{
this.title = title;
}

public double getVoteAverage()
{
return voteAverage ;
}

public void setVoteAverage( double voteAverage)
{
this.voteAverage = voteAverage;
}

@Override
public int describeContents()
{
return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i)
{
parcel.writeString( id);
parcel.writeString( overview );
parcel.writeString( releaseDate );
parcel.writeString( posterPath );
parcel.writeString( backdropPath );
parcel.writeString( title);
parcel.writeDouble( voteAverage );
}
}

 Review.java – prin intremediul acestei clase se preiau comentariile despre
filme; pentru realizarea acestei clase s-au folosit constructorul implici și constructorul de
copiere.

package com.esoxjem.movieguide;

import android.os.Parcel;
import android.os.Parcelable;

public class Review implements Parcelable
{
private String id;
private String author;
private String content;
private String url;

public Review()
{

}

protected Review(Parcel in)
{

PROIECT DE DIPLOMĂ

id = in.readString();
author = in.readString();
content = in.readString();
url = in.readString();
}

public static final Creator<Review> CREATOR = new Creator<Review>()
{
@Override
public Review createFromParcel(Parcel in)
{
return new Review(in);
}

@Override
public Review[] newArray( int size)
{
return new Review[size ];
}
};

public String getId()
{
return id;
}

public void setId(String id)
{
this.id = id;
}

public String getAuthor()
{
return author;
}

public void setAuthor(String author)
{
this.author = author;
}

public String getContent()
{
return content;
}

public void setContent(String content)
{
this.content = content;
}

public String getUrl()
{
return url;
}

public void setUrl(String url)
{
this.url = url;
}

@Override
public int describeContents()
{
return 0;

PROIECT DE DIPLOMĂ

}

@Override
public void writeToParcel(Parcel parcel, int i)
{
parcel.writeString( id);
parcel.writeString( author);
parcel.writeString( content);
parcel.writeString( url);
}
}

 Video.java – cu ajutorul acestei clase se face legatura cu youtube pentru a
vizualiza trailer -ul filmelor; pentru realizarea acestei clasa s -au folosit constructorul implici ș i
constructorul de copiere.

package com.esoxjem.movieguide;

import android.os.Parcel;
import android.os .Parcelable;
import com.squareup.moshi. Json;

public class Video implements Parcelable {
public static final String SITE_YOUTUBE = "YouTube" ;
private String id;
private String name;
private String site;
@Json(name = "key")
private String videoId;
private int size;
private String type;

public Video() {}

protected Video(Parcel in) {
id = in.readString();
name = in.readString();
site = in.readString();
videoId = in.readString();
size = in.readInt();
type = in.readString(); }

public static final Creator<Video> CREATOR = new Creator<Video>() {
@Override
public Video createFromParcel(Parcel in) {
return new Video(in);
}

@Override
public Video[] newArray( int size) {
return new Video[size];
}
};

public static String getUrl(Video video) {
if (SITE_YOUTUBE .equalsIgnoreCase(video.getSite())) {
return String.format(Api.YOUTUBE_VIDEO_URL , video.getVideoId());
} else {
return Constants. EMPTY;
}

PROIECT DE DIPLOMĂ

}

public static String getThumbnailUrl(Video video) {
if (SITE_YOUTUBE .equalsIgnoreCase(video.getSite())) {
return String.format(Api.YOUTUBE_THUMBNAIL_URL , video.getVideoId());
} else {
return Constants. EMPTY;
}
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSite() {
return site;
}

public void setSite(String site) {
this.site = site;
}

public String getVideoId() {
return videoId;
}

public void setVideoId(String videoId) {
this.videoId = videoId;
}

public int getSize() {
return size;
}

public void setSize( int size) {
this.size = size;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {

PROIECT DE DIPLOMĂ

parcel.writeString( id);
parcel.writeString( name);
parcel.writeString( site);
parcel.writeString( videoId);
parcel.writeInt( size);
parcel.writeString( type);
}
}

2.Adaugare la „Favorite” și informații despre filme :

In folderul det ails sunt implementate clasele ș i interfetele nece sare preluarii
informatiilor despre filme.
 MovieDetaileFragment implementat cu Fragment; aceasta clasa pune laolaltă
toate resursele aplicaț iei;

package com.esoxjem.movieguide.details;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation. NonNull;
import android.support.annotation. Nullable ;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;

PROIECT DE DIPLOMĂ

public class MovieDetailsFragment extends Fragment implements MovieDetailsView,
View.OnClickListener
{
@Inject
MovieDetailsPresenter movieDetailsPresenter ;

@BindView (R.id.movie_poster )
ImageView poster;
@BindView (R.id.collapsing_toolbar )
CollapsingToolbarLayout collapsingToolbar ;
@BindView (R.id.movie_name )
TextView title;
@BindView (R.id.movie_year )
TextView releaseDate ;
@BindView (R.id.movie_rating )
TextView rating;
@BindView (R.id.movie_description )
TextView overview ;
@BindView (R.id.trailers_label )
TextView label;
@BindView (R.id.trailers )
LinearLay out trailers ;
@BindView (R.id.trailers_container )
HorizontalScrollView horizontalScrollView ;
@BindView (R.id.reviews_label )
TextView reviews;
@BindView (R.id.reviews)
LinearLayout reviewsContainer ;
@BindView (R.id.favorite )
FloatingActionButton favorite ;
@BindView (R.id.toolbar)
@Nullable Toolbar toolbar;

private Movie movie;
private Unbinder unbinder ;

public MovieDetailsFragment() { }

public static MovieDetailsFragment getInstance( @NonNull Movie movie)
{
Bundle args = new Bundle();
args.putParcelable(Constants. MOVIE, movie);
MovieDetailsFragment movieDetailsFragment = new MovieDetailsFragment();
movieDetailsFragment.setArguments(args);
return movieDetai lsFragment;
}

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRetainInstance( true);
((BaseApplication)
getActivity().getApplication()).createDetailsComponent().inje ct(this);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout. fragment_movie_details ,
container, false);
unbinder = ButterKnife. bind(this, rootView);
setToolbar();
return rootView;

PROIECT DE DIPLOMĂ

}

@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
if (getArguments() != null)
{
Movie movie = (Movie) getArguments().get(Constants. MOVIE);
if (movie != null)
{
this.movie = movie;
movieDetailsPresenter .setView( this);
movieDetailsPresenter .showDetails((movie));
movieDetailsPresenter .showFavoriteButton(movie);
}
}
}

private void setToolbar()
{

collapsingToolbar .setContentScrimColor(ContextCompat. getColor (getContext(),
R.color.colorPrimary));
collapsingToolbar.setTitle(getString(R.string.movie_details));

collapsingToolbar.setCollapsedTitleTextAppearance(R.style.CollapsedToolbar);

collapsingToolbar.setExpandedTitleTextAppearance(R.st yle.ExpandedToolbar);
collapsingToolbar.setTitleEnabled( true);

if (toolbar != null)
{
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

ActionBar actionBar = ((AppCompatActivity)
getActivity ()).getSupportActionBar();
if (actionBar != null)
{
actionBar.setDisplayHomeAsUpEnabled( true);
}
} else
{
// Don't inflate. Tablet is in landscape mode.
}
}

@Override
public void showDetails(Movie movie)
{

Glide.with(getContext()).load(Api.getBackdropPath(movie.getBackdropPath())).into
(poster);
title.setText(movie.getTitle());
releaseDate.setText(String.format(getString(R.string.r elease_date),
movie.getReleaseDate()));
rating.setText(String.format(getString(R.string.rating),
String.valueOf(movie.getVoteAverage())));
overview.setText(movie.getOverview());
movieDetailsPresenter.showTrailers(movie);
movieDetailsPresenter.showReviews(movie);
}

@Override
public void showTrailers(List<Video> trailers)

PROIECT DE DIPLOMĂ

{
if (trailers.isEmpty())
{
label.setVisibility(View.GONE);
this.trailers.setVisibility(View.GONE);
horizontalScrollView.setVisibility(View.GONE);

} else
{
label.setVisibility(View.VISIBLE);
this.trailers.setVisibility(View.VISIBLE);
horizontalScrollView.setVisibility(View.VISIBLE);

this.trailers.removeAllViews();
LayoutInflater inflater = getActivity().getLayoutInflater();
RequestOptions options = new RequestOptions()
.placeholder(R.color.colorPrimary)
.centerCrop()
.override( 150, 150);

for (Video trailer : trailers)
{
View thumbContainer = inflater.inflate(R.layout.video,
this.trailers, false);
ImageView thumbView = ButterKnife.findById(thu mbContainer,
R.id.video_thumb);
thumbView.setTag(R.id.glide_tag, Video.getUrl(trailer));
thumbView.requestLayout();
thumbView.setOnClickListener( this);
Glide.with(getContext())
.load(Video.getThumbnailUrl(trailer))
.apply(options)
.into(thumbView);
this.trailers.addView(thumbContainer);
}
}
}

@Override
public void showReviews (List<Review> reviews)
{
if (reviews.isEmpty())
{
this.reviews.setVisibility(View.GONE);
reviewsContainer.setVisibility(View.GONE);
} else
{
this.reviews.setVisibility(View.VISIBLE);
reviewsContainer.setVisibility(View.VISIBLE);

reviewsContainer.removeAllViews();
LayoutInflater inflater = getActivity().getLayoutInflater();
for (Review review : reviews)
{
ViewGroup reviewContainer = (ViewGroup)
inflater.inflate(R.layout.review, reviewsContainer, false);
TextView reviewAuthor = ButterKnife.findById(reviewContainer,
R.id.review_author);
TextView reviewContent = ButterKnife.findById( reviewContainer,
R.id.review_content);
reviewAuthor.setText(review.getAuthor());
reviewContent.setText(review.getContent());
reviewContent.setOnClickListener( this);
reviewsContainer.addView(re viewContainer);
}

PROIECT DE DIPLOMĂ

}
}

@Override
public void showFavorited()
{
favorite.setImageDrawable(ContextCompat.getDrawable(getContext(),
R.drawable.ic_favorite_white_24dp));
}

@Override
public void showUnFav orited()
{
favorite.setImageDrawable(ContextCompat.getDrawable(getContext(),
R.drawable.ic_favorite_border_white_24dp));
}

@OnClick(R.id.favorite)
public void onClick(View view)
{
switch (view.getId())

In folderul favorites sunt implementate clase le și interfata prin intermediul cărora filmul
preferat este salvat î n lista de favorite .
 FavoritesStore.java – prin intermediul aceastei clase se adaugă la favorite
filmul prin acționarea icon-ului ‚favorite’:

package com.esoxjem.movieguide.favorites;

import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import com.esoxjem.movieguide.Movie;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.inject. Inject;
import javax.inject. Singleton ;

@Singleton
public class FavoritesStore
{
private static final String PREF_NAME = "FavoritesStore" ;
private SharedPreferences pref;

@Inject
public FavoritesStore(Context context)
{ pref = context.getApplicationContext().getSharedPreferences( PREF_NAME ,
Context. MODE_PRIVATE ); }

public void setFavorite(Movie movie)
{ SharedPreferences.Editor editor = pref.edit();
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<Movie> jsonAdapter = moshi.adapter(Movie. class);
String movieJson = jsonAdapter.toJson(movie);
editor.putString(movi e.getId(), movieJson);
editor.apply();
}

PROIECT DE DIPLOMĂ

public boolean isFavorite(String id)
{ String movieJson = pref.getString(id, null);
if (!TextUtils. isEmpty(movieJson))
{ return true ;
} else
{ return false ; }
}

public List<Movie> getFavorites() throws IOException
{ Map<String, ?> allEntries = pref.getAll();
ArrayList<Movie> movies = new ArrayList<>( 24);
Moshi moshi = new Moshi.Builder().build();
for (Map.Entry<String, ?> e ntry : allEntries.entrySet())
{ String movieJson = pref.getString(entry.getKey(), null);
if (!TextUtils. isEmpty(movieJson))
{ JsonAdapter<Movie> jsonAdapter = moshi.adapter(Movie. class);
Movie movie = jsonAda pter.fromJson(movieJson);
movies.add(movie);
} else
{ }
}
return movies;
}

3. Resursele folosite pentru implementarea aplicației :

PROIECT DE DIPLOMĂ

 AndroidManifest.xml – definește permisiunile resurselor utilizate:
<?xml version= "1.0" encoding= "utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package= "com.esoxjem.movieguide" >

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

<application
android:name=".BaseApplication"
android:allowBackup= "true"
android:icon="@mipmap/ic_launcher"
android:label="Movies"
android:theme="@style/AppTheme" >
<activity
android:name=".listing.MoviesListingActivity "
android:launchMode= "singleTask"
android:theme="@style/AppTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity >
<activity
android:name=".details.MovieDetailsActivity"
android:parentActivityName= ".listing.MoviesListingActivity"
android:theme="@style/AppTheme" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".listing.MoviesListingActivity" />
</activity >
<activity android:name=".Search" ></activity >
</application >

</manifest >

 activity_main.xml – asigură interfața cu utilizatorul
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:orientation= "vertical"
tools:context= ".listing.MoviesListingActivity" >

<include
layout="@layout/toolbar"
/>

<fragment
android:id="@+id/fragment_listing"
android:name="com.esoxjem.movieguide.listing.MoviesListingFragment"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
tools:layout= "@layout/fragment_movie s"/>

</LinearLayout >

PROIECT DE DIPLOMĂ

 sorting_option.xml – interfaț a de sortare
<?xml version= "1.0" encoding= "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation= "vertical" >
<TextView
android:id="@+id/review_author"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:paddingLeft= "16dp"
android:paddingRight= "16dp"
android:paddingTop= "20dp"
android:text="@string/sort"
android:textColor= "@android:color/black" />
<RadioGroup
android:id="@+id/sorting_group"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_margin= "20dp"
android:orientation= "vertical" >

<RadioButton
android:id="@+id/most_popular"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:paddingBottom= "8dp"
android:paddingLeft= "16dp"
android:paddingRight= "16dp"
android:paddingTop= "8dp"
android:text="@string/popular_movie" />

<RadioButton
android:id="@+id/highest_rated"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:paddingBottom= "8dp"
android:padding Left="16dp"
android:paddingRight= "16dp"
android:paddingTop= "8dp"
android:text="Highest_Rated" />

<RadioButton
android:id="@+id/favorites"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:paddingBottom= "8dp"
android:paddingLeft= "16dp"
android:paddingRight= "16dp"
android:paddingTop= "8dp"
android:text="@string/favorites_movie" />
<RadioButton
android:id="@+id/newest"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:paddingBottom= "8dp"
android:paddingLeft= "16dp"
android:paddingRigh t="16dp"
android:paddingTop= "8dp"
android:text="@string/newest_movie" />

</RadioGroup >
</LinearLayout >

PROIECT DE DIPLOMĂ

In folderul values se afla urmatoarele:
 colors.xml – culorile folosite in aplicatie.
 dimens.xml – dimensiunile pentru clipuri, poze si butoane.
 string.xml:
<resources >
<string name="app_name" >Movies</ string>
<string name="action_filter" >Filter</ string>
<string name="loading_movies" >Loading Movies</ string>
<string name="movie_guide" >MovieGuide</ string>
<string name="trailers" >Trailers</ string>
<string name="reviews" >Reviews</ string>
<string name="summary" >Summary</ string>
<string name="release_date" >Release Date: %s</ string>
<string name="rating" >%s/10</ string>
<string name="favorites">Favorites</ string>
<string name="newest" >Newest</ string>
<string name="highest_rated" >Highest Rated</ string>
<string name="most_popular" >Most Popular</ string>
<string name="todo">TODO</string>
<string name="action_search" >Search</ string>
<string name="newest_movie" >Newest Movie</ string>
<string name="sort">Sort</string>
<string name="favorites_movie" >Favorites Movie</ string>
<string name="popular_movie" >Popular Movie</ string>
</resources >

 style.xml – style-urile folosite în aplicaț ie:

<resources >

<!– Base application theme. –>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar" >
<item name="colorPrimary" >@color/colorPrimary</ item>
<item name="colorPrimaryDark" >@color/colorPrimaryDark</ item>
<item name="colorAccent" >@color/colorAccent</ item>
<item name="android:windowBackground" >@color/window_background</ item>
<item name="android:dialogTheme" >@style/TitledDialog</ item>
</style>

<style name="TitledDialog" parent="@style/Theme.AppCompat.Light.Dialog" >
<item name="android:windowNoTitle" >false</ item>
</style>

<style name="AppTheme.PrimaryButton" parent="Base.Widget.AppCompat.Button" >
<item name="android:layout _height" >@dimen/button_height</ item>
<item name="android:padding" >@dimen/button_padding</ item>
<item name="android:layout_width" >wrap_content</ item>
<item name="android:background" >?android:attr/colorAccent</ item>
<item name="android:foreground" >?android:attr/selectableItemBackground</ item>
<item name="android:textColor" >@android:color/white</ item>
</style>

<style name="AppTheme.Toolbar" parent="Theme.AppCompat.Light" >
<item name="android:textColo rPrimary" >@android:color/white</ item>
<item name="android:textColorSecondary" >@android:color/white</ item>
<item name="actionMenuTextColor" >@android:color/white</ item>
</style>

PROIECT DE DIPLOMĂ

<style name="AppTheme.AppBarOverlay"
parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

<style name="CollapsedToolbar" parent="@android:style/TextAppearance.Medium" >
<item name="android:textColor" >@android:co lor/white</ item>
<item name="android:textStyle" >normal</ item>
</style>

<style name="ExpandedToolbar" parent="@android:style/TextAppearance.Medium" >
<item name="android:textColor" >@android:color/transparent</ item>
</style>

<string name="movie_details" >Movie</ string>
</resources >

PROIECT DE DIPLOMĂ

CAPITOLU L V

IMPLEMENTAREA APLICAȚ IEI GHID PENTRU FILME: MOVIE
GUIDE

La lansarea aplicației Movie Guide ecranul dispozitivului va afisa :

Imagine de mai sus reprezină pagina principală. Unde sunt î ncarcate cele mai
populare filme.

PROIECT DE DIPLOMĂ

Aplicația pune la dispoziție ș i un buton de sortare care realizeaz ă sortarea în funcț ie
de: cele mai populare filme, cele mai bine cotate filme, cele mai noi filme și cele pe care
utilizatorul le adaugă la favorite.
Prin acționarea butonului de sort va aparea urmatoare interfata:

PROIECT DE DIPLOMĂ

Prin selectare unui film se va deschide o altă interfață care va prezenta detali i despre
film cum ar fi: titlul, data la care va fi realizat, posterul filmului ș i trailer -ul filmului care ne va
duce la youtube.com.

PROIECT DE DIPLOMĂ

Prin selectarea butonului ‘favorite ’ filmul va fi adaugat la lista de filme preferate. Prin
deselectare butonu lui filmul va fi scos din lista. Interfața în care sunt se află filmele preferate
este urmatoarea:

PROIECT DE DIPLOMĂ

CAPITOLUL VI

CONCLUZII

Android este un sistem de operare “open source” bazat pe Linux pentru dispozitive
mobile, cu foarte multe avantaje: proiect deschis, comunitate mare de programatori, cotă de
piață mare, mediu de dezvoltare (Android Studio) foarte bogat (emulator performant, editor
intelligent, testare rapidă, support pentru toate dispozitivele Android) care oferă multe
facilitati, amintind doar cateva mai jos:
 Conectivitate – Wi Fi , Bluetooth.
 Interfața cu utilizatorul plăcuta și intuitivă
 Multi -task – mai multe aplicatii pot rula î n acelasi timp
 Suport Media – MP3, MP4, JPEG, H.264, BMP …
 Aplicații pentru orice
 Dezvoltat de Google

Unul din principalele avantaje ale folosirii platformei Android îl constituie numărul mare
de informații, resurse, mostre de cod și numărul mare de dezvoltatori cu experiență dispuși
să ajute atunci când întâmpini o problemă. Dezvoltarea de noi aplicații nu necesită
achiziționarea unei licențe care costă, dezvo ltarea fiind gratuită și la îndemâna oricărei
persoane care dorește să încerce.

Aplicația Movie Guide a fost dezvoltată folosind SDK -ul Android și mediul Android
Studio făcând uz de multe din facilitățile menționate mai sus ( interfață placuta cu utilizat orul,
conectivitate, multi -task) precum și de alte particularităț i ale limbajelor Java și Android
menționate în această lucrare.

PROIECT DE DIPLOMĂ

CAPITOLUL VII

BIBLIOGRAFIE

[1] Pagina oficială de dezvoltare pe platformaAndroid – https://developer.android.com/index.html
[2] Forum programare general – stackoverflow.com
[3] https://ww w.link -academy.com/curs -introducere -in-dezvoltarea -aplicatiilor -android
[4] https://www.youtube.com/watch?v=LtJymon_g8I&t=131s
[5] https://www.youtube.com/watch?v=qt3WCP -_uaY
[6] https://github.com/
[7] http://www.vogella.c om/tutorials/Android/article.html
[8]http://www.itcsolutions.eu/2011/09/08/android -tutorial -concepte -activitati -si-resurse -ale-unei –
aplicatii -android/

Similar Posts