PHP și Java în implementarea unei aplicații Android de tracking și [621944]

Universitatea din București
Facultatea de Matematică și Informatică
Departamentul de Calculatoare și Tehnologia Informației

PROIECT DE DIPLOMĂ

PHP și Java în implementarea unei aplicații Android de tracking și
dezvoltare fizică

Coordonator: Absolvent ă:
Prof. dr. ing. Cherciu Mihail Bîrligea Florentina Simona

BUCUREȘTI
2017

Abstract

În acest moment societatea se afl ă într-o explozie tehnologic ă. Toate dispozitivele electornice iau
viață în urma unei idei ș i al unui algoritm bine structurat. Aplicaț ia MyFitTracker are ca obiectiv
ușurarea munci i depuse de utilizator atunci câ nd vine vorba de men ținerea unui stil de viață
sănă tos . U șurarea muncii se observ ă prin elimi narea timpului pierdut atunci câ nd vine vorba d e
planificarea proprie a exerciț iilor , acestea fiind planificate d e către algoritmu l aplicației.Când vine
vorba de limbaje de programare ce au luat cu asalt secolul XXI , cu siguranță regăsim și limbajul
Android care împreună cu PHP și Java domină piața dispozitivelor smart .Din acest motiv aplicația
prezentată are la bază aceste limbaje .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

3

Cuprinsul lucrării

1. Introducere …………………………………………………………………………………….. …………… ……..7
1.1 Problema abordat ă ……………………………………………………………….. ………………. ..7
1.2 Scopul proiectului ………………………………………………………………………. ………. ….9

2. Noțiuni preliminare …………. …………………………………………………………………………………..10
2.1 Platforma Android…………………………………………………… ……………………… ………10
2.1.1 Generalități……………………………………………………………………………….. 10
2.1.2 Istoric………………………………………………………………………………………..11
2.1.3 Sistemul de operare An droid……………………………. ………………………….12
2.1.4 Platforma Hardware…………………………………….. ………………………….. …19
2.2 Componentele a plicați ei android…………….. …….. ………….. ……………….. ……………. 21
2.2.1 Clase de baza………………………………………………………… …………… ……… 21
2.2.2 Fisierul Manifest……………………………………………… …………… ……………23
2.2.3 Surse externe…………………………………………………… …………… …………… 27

3. Tehnologii folosite …………………………………………………………………………………………….. ..30
3.1 Servicii de localizare geografică…………………………………………………… ……………30
3.1.1 Determinarea pozitiei unui telefon ………………………………………………..31
3.1.2 Furnizor GPS …………………………………………………… ………………………. .32
3.1.3 Furnizor Network …………………………………………………… …………… ……..32
3.1.4 Furnizor Pasiv ……………………………………………………………………. ………33
3.1.5 GPX …………………………………………………………………………………………. 34
3.2 OSMDroid pentru mapare………………….. …………………………………………………….. 34
3.3 Manager ul de Senzori……………………………………………………. ………………………….36
3.3.1 Senzori de pozi ție ………………………………………. ……………………………… 36
3.3.2 Senzori de mișcare. ……………………………………………………………….. …….37
3.4 JSON…………………………………………………………………………………………………….. ..37
3.5 Retrofit 2 ………………………………………………………………………………………. ……… 38
3.6 Autentificare JWT…………………………………………………………………………… ………. 40
3.7 Laravel ………………………………………………………………………………………….. ………. 42
3.7.1 M igrări …………………………………………………………………………….. ………. 44
3.7.2 Seeduri …………………………………………………………………………….. ………. 44

4. Cerintele aplicatiei ………………………………………………………………………………………………..45
4.1 Caracteristici func ționale ……………………………………………………………….. ………… .45
4.2 Factorul Uman ……………………………………………………………………………. ……………46
4.3 Cazuri de utilizare …………………………………………………………………….. ………………46

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

4

5. Descrierea aplicației ………………………………………………………………………………………….51
5.1 Aplicaț ia client ……………………………………………………………………………………..51
5.2 Autentificarea în aplicaț ie………………………………………………………………………52
5.3 Înregistrarea în aplicație …………………………………………………………………………54
5.4 Ecranul cu informații despre accesul la locație și internet …………………………..55
5.5 Ecranul principal …………………………………………………………………………………..56
5.5.1 Tabul cu harta ……………………………………………………………. ……………56
5.5.2 Tabul cu traseele înregistrate ……………………………………………………..59
5.5.3 Tabul cu setul de exerciții …………………………………………………………61
5.6 Serviciul din fundal …….. …………………………………………………………………………62
5.7 Ecranul cu notificări ……………………………………………………………………………….63
5.8 Ecranul SideNavBar ………………………. ………………………………………………………63
5.9 Ecranele pentru editarea profilului ……………………………………………………………65

6. Proiectare î n detaliu și imprementare …………………………………………………………………..68
6.1 Arhitectura Platformei …………………………………………………………………………..68
6.2 Serviciul Web ……………………………………. …………………………………………………69
6.3 Nivelul de date ………………………………………………………………………………………70
6.4 Aplicația client ………………………………………………. ……………………………………..71

7. Concluzii și posibilități de dezvoltare ……………………………………………………………………74

8. Bilbiografie ………………………………………………………….. ………………………………………….75

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

5

Listă de figuri

Figura 2.1 Structura Android OS …………………………………………………………………………………….. 13
Figura 2.2 Ierarhia versiunilor Android ……………………………………………………………………………. 16
Figura 2.3 Distribuția API -urilor Android …………………………………………………………………………. 18
Figura 2.4 Structură hardwar e Android …………………………………………………………………………….. 19
Figura 3.1 Dependențe Retrofit2 din MyFitTracker ……………………………………………………………. 38
Figura 5.2 Interfața de logare ………………………………………………………………………………………….. 53
Figura 5.3 Interfața de înregistrare …………………………………………………………………………………… 54
Figura 5.4 Int erfața pentru accesarea permisiunilor …………………………………………………………… 55
Figura 5.5 Serviciul de localizare pe hartă ……………………………………………………………………….. 56
Figura 5.6 Serviciul de înregistrare și stocare a înregistrării ……………………………………………….. 57
Figura 5.7 Ștergerea înregistrării …………………………………………………………………………………….. 58
Figura 5.8 Interfața inițială pentru traseele înregistrate ………………………………………………………. 59
Figura 5.9 Interfața pentru traseele înregistrate …………………………………………………………………. 60
Figura 5.10 T abul și activitatea cu exerciții ……………………………………………………………………… 61
Figura 5.11 Serviciul de fundal ……………………………………………………………………………………….. 62
Figura 5.12 Ecranul cu notificări ……………………………………………………………………………………. 63
Figura 5.13 SideNavBar pentru doi utilizatori de test ………………………………………………………… 64
Figura 5.14 Înregistrarea profilului fizic …………………………………………………………………………… 65
Figura 5.15 Înregistrarea activității pag 2 și 3 …………………………………………………………………… 66
Figura 5.16 Înregistrarea activității pag 4 și 5 …………………………………………………………………… 67
Figura 6.1 Perspectiva structurală a aplicației …………………………………………………………………… 68
Figura 6.2 Modul de Rescriere – activare ………………………………………………………………………… 69
Figura 6.3 Diagrama bazei de date ……………………………………………………………………………….. …70

Listă de tabele

Tabel 4.1 Specificații funcționale …………………………………………………………………………………… 45
Tabel 5.1 Scenariu general pentru specificatiile sistemului pe care va rula aplicatia ……………… 52

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

6

Conținutul lucrării

Lucrarea este împărțită în 8 capitole astfel :
1. Introducere
În acest capitol se regăsește o prezentare superficială a lucrării prezentând problema
abordată și cum poate fi combătută .

2. Noțiuni preliminare
Capitolul cuprinde câteva aspecte teoretice de bază precum general ități despre platforma
Android și despre structura aplicațiilor ce rulează pe această platformă.

3. Tehnologii folosite
În acest capitol sunt descrise tehnologiile folosite în implementarea ap licației .

4. Cerin țele aplicatiei
Capitolul include cerințele aplicației din punct de vedere al caracteristicilor funcționale și
non-funcționale . Pe l ângă aceste caracteristici , include factorul uman , cazuri posibile de
utilizare dar și specificațiile dispozitivului pentru rulare.

5. Descrierea aplicației
Acest capitol descrie fiecare pagină a aplicaț iei și serviciile care rulează în fundal.

6. Proiectare î n detaliu și imprementare
În acest capitol se descrie arhitectura platformei , serviciul web, precum și aplicația client .

7. Concluzii și posibilități de dezvoltare
În capitolul 8 sunt prezentate atât concluziile cât și posibilitățile de dezvoltare ale aplicației.

8. Bibliografie
Cuprinde documentația parcursă pentru întocmirea lucrării.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

7

1. Introducere

Ar putea aplicația potrivită instalată pe telefoanele ce le folosim zilnic îmbunătăți starea sănătatii
noastre ?

La această întrebare m -am gândit atunci când am ales tema lucrării. Vestea bună este că am găsit
un răspuns , iar vestea rea este ca nu îl veți afla decât după parcurgerea întregii lucrări.

Evoluția tehnologică cu siguranță reprezintă unul din beneficiile unei ere moderne , însă tot această
evoluție ne îndeamnă la inactivitate fizică ,având totul la un click distanță . Activități precum
mersul la bibliotecă , plimbările în parc , jocurile copilăriei și în esență ,activitățile tradiționale
menite să ne scoa tă din casă sunt înlocuite pe rând de aplicații și algoritmi bine gândiți să ne
capteze atenția . Vreau să enumăr câteva din aceste aplicații renumite în lumea utilizatorilor
cibernetici și anume : Facebook , Twitter , Instagram, Snapchat , Wattpad , Book store , FoodPanda,
Wikipedia etc. Nu neg efectul benefic al acestor aplicații dar orientarea către comoditate și prezența
acestor portale creează un mediu nociv atunci când vine vorba de mișcare și o viață sănătoasă în
general .
Multe tipuri diferite de t ehnologie au apărut în ultimii ani pentru a ajuta oamenii să țină pasul cu
sala de fitness. Aplicațiile au devenit cele mai populare în rândul oamenilor , fiind un instrument
tehnologic folosit pentru a atinge un anumit stil de viață . Un motiv important îl reprezintă
mobilitatea . Din acest motiv, și multe altele, tendințele pieței de sănătate mobile au estimat că mai
mult de 3,4 miliarde de utilizatori de smartphone -uri la nivel mondial vor folosi cel puțin o aplicație
de întreținere a sănătății până la sfârșitul anului 2018.

1.1 Problema abordată

Din ce în ce mai multe surse media subliniază problema lipsei de activități fizice . Acest lucru este
evidențiat atât la televizor prin anunțurile de forma “ Pentru o viață sănatoasă faceți miș care cel
puțin 30 de minute pe zi! ” cât și prin articolele din media scrisă ce alarmează cu ridicarea
procentului de obezitate , de exemplu , rata obezității î n SUA “ este pentru prima dată când peste
35 % dintre adulții din Mississippi și Virginia sunt ob ezi. În 20 de state, o treime dintre adulți sunt
obezi, în timp ce procentul obezilor nu este în niciun stat american mai mic de 21 % . ” [1].
Necesitatea unui anunț ce reamintește că mișcarea fizică este necesară unei vieți sănătoase nu poate
decât să ne îngrijoreze și să conștientizăm nivelul de comoditate la care s -a ajuns. Nici România
nu este prea departe când vine vorba de obezitate . Confo rm unui studiu realizat de mediafax
întâlnim “ o rată a obezității de 21,3 la sută și o prevalență a supraponderii de 31,1 la sută, la
românii cu vârste cuprinse între 18 și 79 de ani.” [2]

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

8

Când vine vorba de tehnologie portabilă , telefoanele smart sunt favorite , iar pe aceeași temă
utilizatorii aleg să își petreacă cea mai mare parte din timp pe aplicațiile instalate și nu neapărat
vorbind la telefon. Conform articolului „Topul celor mai descărcate aplicații” , aplicațiile favorite
de utilizatori sunt jocurile și aplicațiile care încurajează comunicarea la distanță [3].

Mai jos voi veți putea observa o ierarhizare concretă a descărcărilor .
➢ Topul aplicațiilor descărcate anul trecut (și al companiilor care le dețin)
1. WhatsApp (Facebook)
2. Facebook Messenger (Facebook)
3. Facebook (Facebook)
4. Instagram (Facebook)
5. Clean Master (Cheetah Mobile)
6. 360 Mobile Security (Qihoo 360)
7. Skype (Microsoft)
8. YouTube (Google)
9. UC Browser (Alibaba Group)
10. Snapchat (SnapChat)

➢ Topul celor mai descarca te jocuri de mobil:
1. Subway Surfers (Kiloo)
2. Candy Crush Saga (King, Tencent)
3. Clash of Clans (Supercell)
4. Despicable Me (Gameloft)
5. My Talking Tom (Outfit7)
6. Temple Run 2 (Imangi, iDreamSky)
7. My Talking Angela (Outfit7)
8. Pou (Zakeh)
9. 8 Ball Pool (Miniclip)
Menținerea unui stil de viață sănătos în zilele noastre poate fi foarte dificil ă datorită lipsei de timp
liber . Conform studiilor , începând cu anii 50, locurile de muncă ce nu necesită activitate fizică au
crescut cu 83% conducând l a boli cardiovasculare, obezitate, diabet și hipertensiune arterială.
Desigur , nu toată lumea este inactivă până la punctul de a deveni obezi sau nu se confruntă c u
probleme grave de sănătate dar , scopul meu este de a preveni ceea ce putem controla.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

9

1.2 Scopul proiectului

Scopul acestei lucrări este de a implementa un sistem prin intermediul căruia un utilizator are
posibilitatea de a -și structura un program zilnic recomandat de exerci ții , din propriul dispozitiv
android .

Proiectul se bazează foarte mult pe calitatea informației oferite , videoclipurile de exemplificare
fiind extrase de pe site -ul oficial de culturism la nivel mondial [4] , fiind conștienți de faptul ca
lipsa informării concrete scade interesul de a întreține un stil de viață s ănătos .Din aceste motive
aplicația are ca scop actualizarea constantă astfel încât utilizatorii să rămână la curent cu cele mai
noi tehnici din domeniu.

Observăm că , în ultimii ani , s-a detectat o creștere rapidă în lumea telefoanelor inteligente î n ceea
ce privește aplica țiile din categoria sănătate și de fitness. Dac ă privim per ansablu în magazinul
de aplic ații Android ni se dezvăluie o î ntreag ă lume a posibilităților de îmbunătăț ire a modului de
trai , cu un oarecare efort din partea utilizator ului. Scopul aplicației este de a oferi o imagine clară
când vine vorba de utilizator , tocmai de aceea se deosebește de competiția din piață prin crearea
unui profil apropiat de realitate , fiind foarte flexibil când vine vorba de datele introduse ,iar pe ntru
flexibilitatea avatarului am folosit formule dinamice de calcul al indicelui de masă corporală .

Aplicația își poate atinge scopul pentru care a fost creată prin următoarele avantaje oferite direct
utilizatorului printre care enumăr :
➢ Înregistrarea activității zilnice cu cel mai mic efort (o singură atingere și aplicația începe să
înregistreze pașii făcuți în acea zi)
➢ Exemplificarea exercitiilor fizice recomandate prin videoclipuri sugestive
➢ Crearea unui avatar conform profilului fizic al utilizatorului

Cele mai multe telefoane includ acum accelerometru – fiind în esență, un mini -seismograf ca cele
utilizate pentru măsurarea cutremurelor, dar care ține evidența mișcării telefonului. Utilizand
accelerometrului din interiorul telefonulu i , MyFitTracker poate măsura activitatea fizică pe tot
parcursul zilei și estimează numărul de pași facuti ,analizand graficul accelerometrului cauzate de
picioarele care lovesc solul. In urma acestui contor , se poate estima distanța parcursa , prin urm are
si un numar estimativ de calorii consumate.

Ca utilizator , distanța parcursă zilnic poate constitui o informație utila pentru cei care doresc sa
se autodepaseasca .

FitTracker este proiectat pentru a rula pe telefon tot timpul. Se poate înregistra distanta parcursa
care este salvata ulterior in telefon , fiind la dispozitia utilizatorului pana la urmatoarea resoftare a
acestuia .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

10

Atunci când cineva doreste sa isi schimbe stilul tău de viață are nevoie de un indrumator , întruc ât
poate fi greu pe c ont propriu , iar aplicația MyFitTracker poate reprezenta mai mult decât o aplicație
ci un prieten , un sfătuitor .

2 Noțiuni preliminare

Capitolul 2 ofer ă informații despre platforma Android , caracterizată din punct de vedere software
și hardware . Structura acestei platforme este una comună pentru dispozitivele construite pentru
Android , în ciuda faptului că elementele componente diferă de la o producție la alta.

Sistemul de operare Android este construit pe nucleul Linux care coordonează partea de hardware
și aplicațiile specifice. În componența unui program intră librăriile , accesate prin intermediul API –
ului , iar programele sunt rulate pe mașina virtuală Dalvik.

O aplicație Android e ste structurată în clase de bază pentru funcționalitate și surse externe ce
asigură interfața aplicației.

O parte componentă , în lipsa căreia aplicația nu poate rula , este fișierul manifest , care determina
structura ,cerințele și componentele programu lui în cauză .

Un dispozitiv android este , în esență , un calculator de dimensiuni reduse , prin urmare prezintă în
alcătuirea sa un procesor ARM , de care se leagă restul componentelor , fie ele de bază sau
opționale.

2.1 Platforma Android

2.1.1 Generalități

Android are în prezent aproape nouă ani de la înființare și in ciuda faptului că se regăsește în
aproape toate sursele media , există încă multe persoane care nu sunt familiarizate cu acesta.

Android este denumirea unui sistem de operare deținut de o companie Americană , Google . De
obicei vine instalat în telefoanele și tabletele cumpărate de public , d e către producătorii acestora ,
oferind acces la numeroase serv icii Google printre care Search , Youtube , Maps și Gmail .

Pe măsură ce numărul de utilizatori este în creștere zi de zi, facilități le sunt, de asemenea, în
creștere. Începand cu telefoane le care au fost folosite doar pentru efectuarea de apelur i telefonice,
dispozitivele mobile ne-au schimbat viața și au devenit o parte din ea. Acum, ele nu sunt folosite

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

11

doar pentr u efectuarea de apeluri, ci au numeroase utilizări în diferite circumstanțe oferind
serviciile unui aparat de fotografiat, player muzical , TV, browser Web etc. într-un dispozitiv
portabil și compact. Dar un dispozitiv nou , o nouă tehnologie , este doar o bucată de metal sau
plastic fără viață . Pentru a da viață unui dispozitiv este nevoie de un sistem de operare care să pună
în valoare toate resursele dispozit ivului și mai departe pentru a-l face util și facil fiecărui utilizator.
În ipostaza de sistem de operare , Android vine ca un amalgam de limbaje unite într-unul
îmbunătățit . Cel mai modern limbaj al dispozitivelor mobile a venit ca o soluție ce putea pune
tehnologia hardware la muncă .

2.1.2 Istoric

Android Inc a fost fondată în Palo Alto din California, SUA de Andy Rubin , Rich Miner, Nick
Sears și Chris White în octombrie 2003 [5]. Intențiile inițiale ale companiei au fost dezvoltarea
unui sistem de operare avansat pentru camerele digitale. Cu toate acestea, când s-a constatat că
piața pentru dispozitive nu era suficient de mare, compania și-a redirecționat eforturile spre
produce rea unui sistem de operare smartphone care să rivalizeze cu Symbian și Microsoft Windows
Mobile[ 6].

În iulie 2005, Google a achiziționat Android Inc . Angajații cheie, inclusiv Rubin, Miner și White,
au rămas la companie după achiziție [7]. Nu s-a știut prea multe despre Android Inc. la momentul
respectiv, dar mulți au presupus că Google intenționa să intre pe piața de telefonie mobilă cu
această mișcare. La Google, echipa condusă de Rubin a dezvoltat o platformă de dispozitive
mobile, alimentată de kernel -ul Linux. Google a comercializat platforma pentru producătorii de
telefoane și pentru operatorii de telefonie cu privire la promisiunea de a oferi un sistem flexibil,
care poate fi actualizat.

Speculațiile privind intenția Google de a intra pe piața de comunicații mobile a continuat să se
dezvolte până în 2006. Un prototip asemănator cu un telefon BlackBerry fără touchscreen și cu o
tastatură fizică QWERTY, a fost mai târziu reinventat pentru a susține un touchscreen, în ideea a
concura cu alte dispozitive anunțate de rivali [8].

Din 2008, Android a văzut numeroase actualizări care au îmbunătățit treptat sistemul de operare,
adăugând noi caracteristici și reparând bug-uri în versiuni anterioare . Fiecare versiune este
denumită în ordine alfabetică după un desert . Luăm ca exemplu versiunea 1.5 "Cupcake" care a
fost urmată de 1.6 "Donut" .

În 2010, Google a lansat seria de dispozitive Nexus – o linie de smartphone -uri și tablete care
rulează sistemul de operare Android și a fost construită de parteneri de fabricație. HTC a colaborat
cu Google pentru a lansa primul smartphone Nexus, Nexus One. Google a actualizat seriile cu
dispozitive mai noi, cum ar fi telefonul Nexus 5 (realizat de LG) și tableta Nexus 7 (realizată de

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

12

Asus). Google lansează telefoanele și tabletele Nexus pentru a acționa ca dispozitive Android,
demonstrând cele mai noi caracteristici software și hardware ale Android.

Începând cu 2010 până în 2013, Hugo Barra a fost purtătorul de cuvânt al produselor, reprezentând
Android la conferințele de presă și Google I / O, conferința anuală dedicată dezvoltatorilor Google.
Implicarea produsului Barra a inclus întregul ecosistem Android al software -ului și al hardware –
ului, printre care lansările sistemului de operare Honeycomb, Ice Cream Sandwich, Jelly Bean și
KitKat.

În 2013, Barra a părăsit echipa Android pentru producatorul chinez de smartphone -uri Xiaomi. În
același an, Larry Page a anunțat într-un post blog că Andy Rubin s-a mutat de la divizia Android
pentru a prelua noi proiecte.

În 2014, Google a lansat Android One, o linie de smartphone -uri care vizează în principal clienții
din țările în curs de dezvoltare.

În prezent Android este un sistem de operare ce se extinde din ce în ce mai mult pe piața
dispozitivelor inteligente implicându -se în proiecte ce vizează televizoare android , ceasuri
inteligente , brățări cardio , ochel ari inteligenți (ochelari Google) și altele.

În urmatoarele subcapitole vom avea în vedere platforma Android caracterizată din punct de vedere
software și hardware .

2.1.3 Sistemul de operare Android

Sisteme le de operare au avut o dezvoltare bruscă în ultimii 15 ani. Pornind de la telefoane le alb
negru și ajungând la telefoane inteligente sau mini computere , se poate spune că sistem ul de
operare mobil a ajuns departe .

Conform unui articol de pe techopedia [ 9] înțelegem că Android este un sistem dezvoltat de Open
Handset Alliance (OHA) și bazat pe Linux. Android OS a preluat conducerea în al 4 -lea trimestru
al anului 2010 devenind astfel unul dintre sisteme de operare preferate pentru smartphone -uri
.Acesta cuprinde nu numai sistemul de operare , ci și aplicații middleware și cheie.

În momentul în care facem referire la arhitectura sistemului de operare Android ne gândim la o
stivă software de layere (straturi în română) . Fiecare layer , la rândul lui , are în alcătuirea sa alte
componente de program . Arhitectura platformei poartă d enumirea de ARM , iar înțelegerea
acesteia se poate realiza prin parcurgerea sa inversă , de la bază până la vârf.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

13

Următoarea diagramă prezintă componentele principale ale platformei Android.

Figura 2. 1 Structura Android OS

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

14

Nucleul Linux
Fundația platformei Android este reprezentată de nucleul Linux 2.6. Android Runtime (prescurtat
ART) , de exemplu , se bazează pe nucleul Linux pentru functionalități de bază . După c um este
ilustrat în Figura 2.1.3 .1 funcțiile de nivel inferior implică administrarea energiei , a ecranului, a
driverelor audio , a conexiunii Wireless precum și a memoriei flash.

Folosirea unui nucleu Linux permite sistemului Android să beneficieze de caracteristicile cheilor
de securitate și totodată permite producătorilor de dispozitive mobile să dezvolte drivere
de hardware pentru un nucleu cunoscut.

Nivelul HAL
Hardware Abstraction Layer (prescurtare HAL) oferă interfețe standard car e expun capacitățile
hardware ale dispozitivului la nivelul superior , frameworkul Java API . HAL este format din
module de bibliotecă multiple, dintre care fiecare implementează o interfață pentru un anumit tip
de componente hardware, cum ar fi camera foto sau Bluetooth . Atunci când un framework API
face un apel pentru a avea acces la hardware – ul dispozitivului, sistemul Android încarcă modulul
de bibliotecă pentru acea componentă hardware.

Nivelul Android Runtime
Pentru dispozitivele care rulează Android versiunea 5.0 (adică nivel API 21) sau mai mare, fiecare
aplicație se execută în propriul său proces și cu propria instanță a Android Runtime (ART) . ART
este scris pentru a rula mai multe mașini virtuale pe d ispozitive cu puțină memorie prin executarea
de fișiere DEX un format bytecode special conceput pentru Android , care este optimizat pentru
amprenta de memorie minimă. Construirea toolchainsurilor , cum ar fi Jack , compilarea su rselor
Java în DEX bytecode, po t rula pe platforma Android.
Înainte de Android versiunea 5.0 (nivel API 21), fișierele .dex erau rulate pe mașina virtuală
Dalvik. Dacă aplicați ile funcționează bine pe ART, atunci ar trebui să ruleze si pe Dalvik, reversul
nefiind realizabil .

Nivelul Biblioteci C/C++
Android include , un set de biblioteci de bază care oferă funcționalitate limbajului de programare
Java, incluzând unele caracteristici Java 8 , utilizate de A PI Java . Multe componente și servicii
de sistem Android , de bază, cum ar fi ART și HAL, sunt construite din cod nativ și necesită
biblioteci scrise în C și C ++. Platforma Android oferă Java API -uri pentru a expune

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

15

funcționalitatea unora dintre aceste biblioteci către aplicații. De exemplu, se poate accesa OpenGL
ES din cadrul Android Java OpenGL API pentru a ad ăuga suport pentru desenarea grafic ă 2D și
3D în aplicație.
Dacă se dezvoltă o aplicație în C sau C ++, se poate utiliza Android NDK pentru a avea acces
la unele dintre aceste biblioteci direct din cod .

Nivelul Framework Java API
Întregul set de funcționalități a l sistemului de operare And roid este disponibil prin intermediul API –
uri scrise în limbajul Java. Aceste API -uri alcătuiesc baza necesară pentru a crea aplicații Android
care includ următoarele:
➢ Un View System bogat și extensibil ce poate fi utilizat pentru a construi interfața de
utilizare a unei aplicații, mai exact pentru a construi liste, grile, casete de text, butoane, sau
chiar un browser web i ncorporabil
➢ Un manager de resurse , oferind acces la resurse non -cod , cum ar fi șiruri de caractere ,
layouturi și fișiere ce țin de partea grafică
➢ Un manager de notificare care permite tuturor aplicațiilor să afișeze alerte personalizate în
bara de stare
➢ Un manager de activitate care gest ionează ciclul de viață al aplicațiilor și oferă o stivă de
navigare către activitatea anterioară
➢ Furnizorii de conținut , prin care se accese ază date de la alte aplicații sau care partajează
propriile lor date
Dezvoltatorii au acces deplin la API – urile pe care aplicațiile de sistem Android le folosesc.

Nivelul Aplica ții
Android vine cu un set de aplicații de bază pentru e -mail, mesaje , calendare, navigare pe internet,
contacte și multe altele. Aplicațiile incluse în platform ă nu au nici un statut special , utilizatorul
fiind lăsat liber să își instal eze orice aplicații dorește . Deci, o aplicație terță poate deveni browser –
ul utilizatorului web implicit, messenger SMS, sau chiar tastatura implicită .
Aplicațiile de sistem funcționează atât ca aplic ații pentru utilizatori cât și pentru a oferi capabilități
cheie pe care dezvoltatorii le pot accesa din propria lor aplicație. De exemplu, dacă aplicația ar dori
să livreze un mesaj SMS, nu este nevoie să se construi ască o funcționalitate nouă ci se poate invoca
orice altă aplicație SMS deja instalat ă pentru a transmite un mesaj către destinatar ul specificat.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

16

Urmează o scurtă descriere a fiecărei versiuni principale de android începând cu Android
1.0 până la versiunea curentă 7.0 .

Figura 2.2 Ierarhia versiunilor Android

Android 1.0 – Alpha
Înainte ca Google să vadă potențialul său , Android a fost inițial conceput ca o interfață touch
pentru aparate de fotografiat. Prima versiune disponibilă pentru telefoane mobile a fost lansată în
septembrie 2008, pe telefonul HTC Dream. Numele specifice , de desert, nu au f ost încă introduse,
astfel încât această versiune a fost intitulată imaginativ Android 1.0.

Caracteristicile sale au fost de bază, dar multe dintre ele există încă și astăzi. Inițial a existat un
simplu browser web și suport pentru Gmail, Google Calendar, Google Maps și YouTube, precum
și aplicația Google Talk mesager.

Android 1.1 – Beta
Se diferențiază de Android 1.0, prin faptul că a adăugat câteva caracteristici simple la aplicațiile
deja existente, cum ar fi afișarea recenziilor în căutările pe Google Maps .

Android 1.5 Cupcake
Această versiune de android aduce în plus suportul pentru widgeturi , tranziții animate când se
revine în desktop, capacitatea de a roti automat ecranul atunci când se pornește telefonul și o
animație pentru pornirea sistemului .

Android 1.6 Donut
Google a ales să avanseze prin alfabet cu fiecare versiune Android, selectând un alt tip de desert
pentru fiecare. Această versiune oferă o funcționalitate îmbunătățită de căutare rapidă și suport
pentru o claritate ,superioară versi unilor anterioare, de 480×800 pixeli.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

17

Android 2.0 Eclair
Android Eclair a adus o serie de schimbări importante, prin urmare, s -a trecut la numărul versiunii
2.0. Personalizare a fost o componentă -cheie, utilizatorii având posibilitatea de a pune imagini d e
fundal in format live .

Android 2.2 Froyo
Această versiune a permis utilizatorilor să își controleze telefoanele fără să le atingă, folosind
tastarea vocală și de căutare. De asemenea, se puteau instala aplicații direct pe cardul de memorie,
fapt ce a d us la o creștere importantă ,pentru perioada respectivă, de la 4 la 8 GB spațiu de stocare.

Android 2.3 Gingerbread
Android 2.3 vine cu o îmbunătățire în ceea ce privește camera frontală și performanța sistemului.
Tot în această versiune au fost adăugate NFC, giroscopul și suport pentru barometru.

Android 3.0 Honeycomb
Honeycomb iese în evidență în istoria Android ca fiind singura versiune dezvoltată special pentru
tablete. Elemente de interfață, cum ar fi tastatura virtuală au fost optimizate pentru ecr ane mai mari
și au oferit suport pentru procesoarele multi -core.

Android 4.0 Ice Cream Sandwich
Ice Cream Sandwich a adus un aspect cu totul nou. A fost introdusă funcția de închidere a
aplicațiilor prin swipe , funcția de înregistrare video la 1080 p și de deblocare a telefonului prin
recunoașterea trăsăturilor feței .

Android 4.1 până la 4.3 Jelly Bean
Această versiune a făcut sistemul de operare Google mai receptiv ca oricând, a îmbunătățit
funcționalitatea de căutare și a introdus capacitatea de a partaja fișiere cu prietenii , utilizând
Android Beam.

Android 4.4 KitKat
Android KitKat a introdus comanda vocală “OK Google” pentru a deschide Google Now, a
îmbunătățit gestionarea mesajelor si multi -taskingul, a adăugat suport pentru emoticonuri.

Android 5.0 Lollipop
Android Lollipop a adus profiluri multiple pe un singur dispozitiv și funcția „fără întreruperi“
pentru amânarea notificărilor . De asemenea se poate debloca telefonul prin Bluetooth cu un
dispozitiv de încredere.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

18

Android 6.0 Marshmallow
Android Marshmallow aduce îmbunătățirea duratei de viață a bateriei și adăugarea de noi
caracteristici interesante cum ar fi senzorul de amprentă digitală pentru deblocarea telefonului sau
a aplicațiilor.

Android 7.0 Nougat
Pe lângă îmbunătățirea performanței și gestionarea bateriei generale datorită unei funcții numite
Doze, Nougat a adus caracteristici utile , cum ar fi split -screen nativ îmbunătățind experiența de
multit asking.

Versiunea 7.1 a urmat la scurt timp după, fiind lansată exclusiv pe telefoanele Google Pixel și Pixel
XL . Acesta a adăugat suport pentru noul lansator Pixel, Google Assistant (o evoluție a Google
Now), lumina de noapte (care este , în esență , u n filtru de lumină albastră), modul Daydream VR,
comenzi rapide și multe altele.

Android vine cu un magazin online pentru aplicații software. Acesta a fost dezvoltat de Google și
permite utilizatorilor să selecteze și să descarce aplicații dezvoltate de către dezvoltatori terți și ,
bineînțeles , să le utilizeze. Din păcate însă , avansarea în versiune afectează posibilitatea de a
utiliza o aplicație universală , întrucât nu poate fi utilizată pe toate platformele .

În figura 2.1.3.3 putem urmări dis tribuția versiunilor Android conform site -ului oficial Android
Developers . [7] . În funcție de aceasta m -am orientat către versiunea potrivită aplicației mele ,
astfel încât să existe un echilibru între performanță și aria de acoperire .

Figura 2.3 Distribuția API -urilor Android [11]

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

19

2.1.4 Platforma Hardware

Vom discuta în acest subcapitol despre arhitectura ARM , principala platformă hardware
utilizată și componentele conectate cu aceasta .
Android este compatibil cu multe componente hardware , iar fiecare dintre acestea
prezintă caracteristici importante care ar putea fi utilizate în diferite aplicații. Câteva dintre acestea
sunt enumerate mai jos .
➢ Prezintă biblioteci grafice atât 2D cât și 3D, potrivite pentru necesitățile clienților .
➢ Suportă aplicații de conectivitate pentru GSM, WiFi și Bluetooth.
➢ Sunt integrate navigare a Web în WebKit și poziționarea globală în Harta Google
➢ La nivel de aplicație , media suport ă 3GP , JPG , MP3 , MPEG4 , AAC , GIF , PNG , AMR
➢ Caracteristica de ating ere simultană (multitouch) pe ecran poate fi activată

Figura 2. 4 Structur ă hardware Android

Senzori

Senzorii Android oferă aplicațiilor acces la determinarea localizării in spațiu a unui dispozitiv
mobil. Senzorii sunt date furnizate de dispozitive virtuale definite în sensors.h .

Senzorii Android sunt dispozitive virtuale care furnizează date care provin dintr -un set de senzori
fizici: accelerometre, giroscoape, magnetometre, barometru, umiditatea, presiunea, lumina, de
proximitate și senzori de ritm cardiac.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

20

În lista de dispozitive fizice care furnizează date nu sunt incluse camera foto, senzor ul de amprentă
digitală, microfon ul și nici ecran ul tactil. Aceste dispozitive au propriul mecanism de raportare;
separarea este arbitrară, dar, în general, senzori Android furnizează date pe o lățime de bandă mai
mică. De exemplu, 100Hz pe 3 canale pentru un accelerometru comparativ cu 25Hz de câte 8 MP
pe 3 canale pentru un aparat de fotografiat sau 44kHz pe 1 canal în cazul unui microfon [5].

Pentru a reduce consumul de energie, unel e arhitecturi sunt ierarhice cu o ulilizare minimă a
procesorului în circuitul integrat specific aplicației (ASIC – cum ar fi de detectare a mișcării de pe
cipul accelerometru), iar într -un microcontroler se realizează , printre altele , detectare a pasilor într-
un senzor hub.

Este la latitudinea producătorului să aleagă arhitectura dispozitivului care să combine armonios
dimensiunea optimă cu precizia , putere a și prețul.

Capacitățile de dozare sunt un aspec t important pentru optimizarea puterii. Fiecare senzor Android
are un „tip“, care prezintă modul în care s enzorul se comportă și ce date oferă.

Tipuri le de senzori oficiale Android sunt definite în senso rs.h sub numele SENSOR_TYPE
➢ Marea majoritate a senzo rilor au un tip de senzor oficial.
➢ Aceste tipuri sunt documentate în SDK -ul Android.
➢ Comportamentul senzorilor cu aceste tipuri sunt testate în Teste de
Compatibilitate Android (CTS).
În cazul în care un producător integrează un nou tip de senzor pe un dis pozitiv Android,
producătorul poate defini propriul tip temporar pentru a face referire la el .
Aceste tipuri nu apar in documentația oficială , astfel dezvoltatorii de aplicații sunt puțin probabil
să le folosească .

Lista tuturor senzorilor prezenți pe dispozitiv este raportată de implementarea HAL.
Pot exista mai mulți senzori de același tip. De exemplu, doi senzori de proximitate sau două
accelerometre.Marea majoritate a aplicațiilor pot să solicite doar un singur senzor de un anumit tip.
Prin urmare o aplicație care solicită accelerometrul implicit va primi primul accelerometrul din
listă.

Senzorii sunt adesea organizați în perechi de wake up ( trezire) și non wake up , prin care ambii
senzori împart același tip, dar diferă prin caracteristica lor de trezire.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

21

2.2 Componentele Aplicație i Android

Aplicațiile android sunt scrise în limbajul de programare Java iar codul lor este compilat , alături
de orice alte resurse , în Android SDK .

Frameworkurile aplicațiilor android permit crearea aplicațiilor inovative prin intermediul
componentelor reutilizabile .Acest capitol își propune să explice cum se pot construi aceste
componente care definesc baza aplicației , dar și cum se pot conecta între ele prin intermediul
intențiilor (Intent).

2.2.1 Clase de bază

Multe dintre limbajele de programare , inclusiv Java sunt orientate pe obiect , asta înseamnă că
vorbim despre obiecte , sau cum mai sunt numite , clase . O clasă este , în principiu , o metodă de
a descrie un obiect , din cadrul aplicației . Clasele sunt împărțite în două mari categorii : clasele
Java și SDK pentru Android . SDK se traduce prin Kit de dezvoltare software și reprezintă un set
de clase și funcții Java pe c are Google(Android) le -a integrat în compilator.

Clasa Activity
Un exemplu concret este clasa Activity , prin intermediul căreia este afișat fiecare ecran parcurs ,
din program . Clasa utilizează diverse elemente de vizualizare ,cum ar fi : text , imagini, butoane ,
ce poartă denumirea de Views și răspunde la acțiuni ale utilizatorilor . La rândul lor , aceste
elemente sunt tot clase : există o clasă Button pentru butoane , o clasă TextView pentru afișarea
textului etc.

Clasa Intent
Un Intent (în română Intenție) este un obiect de tip mesageri e utiliza t pentru a solicita o acțiune
de la o altă componentă a aplicației . Cu toate că intențiile facilitează comunicarea între
componente în mai multe moduri, de regulă se folosesc în trei cazuri fundamentale: atunci când se
dorește pornirea unei activități , atunci când se dorește pornirea unui serviciu sau , în cazul trimiterii
unei transmisii.

Clasa furnizoare de conținut
Un furnizor de conținut administrează și partajează un depozit central de date . Furnizorii de
conținu t sunt destinați să fie utilizați de către alte aplicații, care accesează furnizorul folosind un
obiect client. Împreună, furnizorii și clienții , oferă o interfață standard de date care se ocupă cu
comunicarea dintre proces e și secur izează accesul la baza de date.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

22

Clasa Transmisiilor
Aplicațiile Android pot trimite sau primi mesaje de difuzare din sistemul Android sau din alte
aplicații Android. Aceste transmisii sunt trimise atunci când are loc un eveniment de interes. De
exemplu, sistemul Android trimite transmisii atunci când au loc diverse evenimente de sistem, cum
ar fi atunci când sistemul pornește sau când dispozitivul începe să se încarce. Aplicațiile pot trimite ,
de asemenea transmisi i personalizate, cum ar fi să informeze a lte aplicații cu ceva ce ar putea
reprezenta un interes (unele date noi a fost descărcat e).
Aplicațiile pot înregistra pentru a primi transmisii specifice. Atunci când o transmisie este trimisă ,
sistemul automat rutează difuzarea către aplicațiile care au subscris pentru a primi acel tip particular
de difuzare. Transmisiile pot fi folosite , în general , ca un sistem de mesagerie din cadrul
aplicațiilor .

Clasa Service
Un serviciu este o componentă a aplicației care poate efectua operațiuni de funcționare în fundal,
și nu oferă o interfață pentru utilizator. O componentă poate porni un serviciu, iar acesta poate
continua să ruleze în fundal , chiar dacă utilizatorul trece la o altă aplicație. În plus, o componentă
se poate lega de un ser viciu pentru a inter acționa cu acesta și prentru a realiza comunicarea între
procese (IPC). De exemplu, un serviciu poate efectua ,din fundal, tranzacții de rețea, poate reda
muzică , sau poate interacționa cu un furnizor de conținut .

Clasa Fragmente
Un Fragment reprezintă un comportament sau o porțiune a interfe ței cu utilizatorul în cadrul
unei Activit ăți. O singură activitate poate susține mai multe fragmente pentru a construi o interfață
cu panou ri multiple permițând reutiliza rea unui fragment și în alte activități. Un fragment se
prezintă ca o secțiune modulară a unei activități, care are propriul său ciclu de viață, ce primește
propriile evenimente de intrare, și care se pot adăuga sau elimina în timp ce activitatea se execută .

Clasa Loader
Tradus în română încărcătoare , această clasă permite încărcarea datelor ,de la un furnizor de
conținut sau din altă sursă de date , pentru a fi ulterior afișat e într-o activitate sau fragment. Clasa
își demonstrează eficiența atunci când ,din cauza interogării lente din firul UI , stagnează
receptivitatea cu utilizatorul , întrucât încărcatoarele pot rula pe mai multe fire de execuție .

Clasa Widget
Widgeturile sunt niste miniaturi vizuale ale aplicațiilor care p ot fi incorporate, spre exemplu , în
ecranul principal și care primesc actualizări periodice. O aplicați e componentă care este în măsură
să dețină widgeturi poartă denumirea de gazdă a aplicațiilor Widget .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

23

Clasa proceselor și firelor

Atunci când o componentă a unei aplicații începe și aceasta nu are alte componente care rulează,
sistemul Android dă startul unui nou proces de Linux cu un singur fir de executie. În mod implicit,
toate componentele aceleiași aplicații rulează în același proces și fir (numit firul „principal“). În
cazul în care o componentă a aplicație i începe și există deja u n proces pentru această cerere , atunci
componenta este pornit ă în cadrul acestui proces și utilizează același fir de execuție. Totuși se poate
aranja ca fiecare componentă să ruleze în procese separate, și se pot crea fire suplimentare pentru
orice proces.

În mod implicit, toat e componentele aceleiași aplicații rulează în același proces și cele mai multe
aplicații nu ar trebui să schimbe acest lucru. Uneori este necesar să se control eze procesul care
aparține unei component e specifice , iar acest lucru se poate realiza în fișieru l manifest.

2.2.2 Fi șierul Manifest

Fiecare aplicație trebuie să aibă un fișier AndroidManifest.xml în directorul rădăcină , care oferă
infor mații esențiale despre aplicație și pe care sistemul trebuie să aibă înainte de a putea rula orice
cod al aplicației.
Lucrurile de bază pe care le face AndroidManifest sunt următoarele :
– Stabilește n umele pachetului Java , ce servește ca identificator unic pentru aplicație.
– Descrie componentele aplicației , care includ activitățile, serviciile, transmisiile și furnizorii
de conținut care compun aplicația.
– Numește clase le care implementeaza fiecare dintre componentele enunțate anterior și
publică capacitățile lor . Aceste declarații informează sistemul Android cu privire la
componente și condițiile în care a cestea pot fi lansate.
– Determină procesele care găzduiesc componente ale aplicației.
– Declară permisiunile pe care aplicația trebuie să le aibă pentru a avea acces la părțile
protejate ale API -ului și de a interacționa cu alte aplicații.
– Declară permisiuni le pe care alții trebuie să le aibă pentru a interacționa cu componentele
aplicației.
– Enumeră clasele Intrument care determină profil ul și alte informații în timp ce rulează
aplicația . Aceste declarații sunt prezente în manifest numai cât timp aplicația este în curs
de dezvoltare și sunt eliminate înainte de publicarea aplicației .
– Declară nivelul minim al API -ului Android pe care îl necesită aplicația.
– Enumeră bibliotecile la care aplicația trebuie să se conecteze .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

24

Urmează o listă despre nodurile ce pot apărea în Manifest , împreună cu scopul acestora în aplicație .

<uses -sdk>
Permite compatibilitatea unei aplicații cu una sau mai multe versiuni ale platformei Android, prin
menționarea unui nivel API. Numărul scris va fi comparat cu nivelul API al sistemului Android
dat, iar acesta poate varia de la un dispozitiv la altul .
În ciuda numelui său, acest element este utilizat pentru a specifica nivelul API, nu numărul
de versiune a SDK (kit de dezvoltare so ftware) sau platforma Android. Nivelul API este
întotdeauna reprezentat printr -un număr întreg ,iar dacă acesta nu este menționat , atunci se va
atribui valoarea default 1.

Exemplu :
<?xml version="1.0" encoding="utf -8"?>
<manifest xmlns:android="http://s chemas.android.com/apk/res/android"
package="com.example. myfittracker ">

<uses -permission>

Solicită o permisiune că cererea trebuie să fie acordată pentru ca acesta să funcționeze
corect. Permisiunile sunt acordate de către utilizator atunci când este instalată aplicația (pe
dispozitivele care rulează Android 5.1 și mai mici) sau în timp ce aplicația se execută (pe
dispozitive care rulează Android 6.0 și versiuni ulterioare).

Exemplu :
<uses -permission
android:name="android.permission .ACCESS_NETWORK_STATE" />
<uses -permission
android:name="android.permission.ACCESS_FINE_LOCATION" />

<application>

Acest element conține subelementele care declară fiecare dintre componentele aplicației și are
atribute care pot afecta toate componentele. Multe dintre aceste atribu te (cum ar f permission ,
label , process) setează valori implicite pentru atribute corespunzătoare elementelor
componente . Altele (precum description , enabled ) setează valori , pentru aplicație ,ce nu pot fi
rescris e de componente.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

25

Acest nod poate conține :
<activity>
<activity -alias>
<meta -data>
<service>
<receiver>
<provider>
<uses -library>

Exemplu :
<application
android:hardwareAccelerated="true"
android:allowBackup="true"
android:fullBackupContent="@xml/backupscheme"
android:icon="@mipmap/co"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
</application>

<intent -filter>

Specifică tipurile de intenții le care o activitate, un serviciu, sau receptor de difuzare poate
răspunde. Un filtru de intenție declară capacitățile componentei sale mamă , adică ce poate face o
activitate sau un serviciu și ce tipuri de transmisii pot fi manipulate de un receptor. Se deschide
componenta de primire a intențiilor de tip publicitate, în timp ce sunt filtrați cele care nu sunt
semnificative pentru componenta.
Cea mai mare parte a conținutului filtrului sunt descrise de subelementele
<action>
<category>
<data>

Exemplu :
<intent -filter>
<action android:name="com.example .myfittracker. action.START" />
<action android:name="com.example. myfittracker.action.STOP" />
</intent -filter>

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

26

<action>

Adaugă o acțiune la un filtru intenție. Un element <intent -filter> trebuie să conțină unul sau mai
multe elemente <action> . În cazul în care nu există elemente <action> într-un filtru de intenție,
filtrul nu acceptă nici un obiect Intent.

Exemplu :
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

<activity>

Declară o activitate care implementează partea de interfaț ă grafică a aplicației. Toate activitățile
sunt reprezentate prin elemente de tip <activity> în fișierul manifest. Dacă activitățile nu sunt
declarate , acestea nu vor fi recunoscute de sistem și nu vor putea rula.

Exemplu :
<activity
android :name=".LoginActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
</activity >

<service>
Spre deosebire de activități , serviciile nu prezintă interfață grafică . Ele sunt utilizate în
implementarea unor operațiuni de fundal , pe termen lung , sau pentru comunicarea cu API .

Exemplu :
<service
android:name=".TrackerService"
android:exported="false">
</service>

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

27

2.2.3 Surse externe

O aplicație Android necesită res urse , care sunt separate de cod , cum ar fi imagini, fișiere audio și
orice face referire la prezentarea vizuală a aplicației. De exemplu, se pot defini animații, meniuri,
stiluri, culori, și aspectul interfețe i de utilizator cu ajutorul fișiere lor XML. Utiliz area resurselor
permite actualiza rea ușoară a diverse lor caracteristici ale aplicației, fără modifica rea
codul ui. Furnizarea de seturi de resurse alternative permite optimiz area aplicați ei pentru o varietate
de configurații de dispozitive, cum ar fi limbi diferite și dimensiuni de ecran.
Crearea resurselor
Pentru fiecare resursă inclusă în proiectul Android, SDK definește un ID unic, utilizat pentru a
face referire la aceasta în codul aplicației. De exemplu, dacă aplicația conține un fișier de imagine
imgin e.png (salvat în res/drawable/ ) , SDK generează un ID pentru acea resursă ,
R.drawable. imagine , care poate fi utilizat pentru a face referire la imagine și pentru a o introduce
ulterior în interfața grafică .
Resurse pentru diferite limbi
Unul dintr e cele mai importante aspecte în ceea ce privește furnizarea de resurse separate , de la
codul sursă este abilitatea de a oferi resurse alternative pentru diferite configurații
ale dispozitivului. De exemplu, prin definirea sirurilor de caractere UI în XML, se po t traduce
șirurile în alte limbi și se pot salva aceste siruri de caractere în fișiere separate. Apoi , Android
aplică stringurilor traducerea corespunzătoare , bazându -se pe o limbă de calificare care se adaugă
în directorul de resurse ( res/values -fr/pentru valori string franceză ).
Resurse pentru orientarea layoutului
Android acceptă mai multe calificar i pentru resurse alternative. O calificare este un șir scurt , care
se include în numele directoare lor de resurse pentru a defini configurația dispoziti vului pentru care
ar trebui să fie utilizate aceste resurse. Ar trebui ca layouturile pentru activitățile aplica ției să se
creeze în funcție de orientarea și dimensiunea ecranului dispozitivului . Atunci când ecranul
dispozitivului este în orientarea portret ( pe înălțime), layout are butoane le orientate vertical, dar
atunci când ecranul este în orientarea peisaj (lat), butoanele sunt aliniate orizontal. Pentru a
schimba aspectul în funcție de orien tarea, se pot defini două layouturi diferite și se poate aplica
calificarea corespunzăto ar numelui fiecărui director. Apoi, sistemul aplică în mod automat aspectul
corespunzător , în funcție de orientarea curentă a dispozitivului.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

28

Resurse color
Un ColorSt ateList este un obiect care se poate defini în XML care poate fi aplica t ca o culoare, cu
rolul de a le interschimba , în funcție de starea View obiectului la care este aplicat. De exemplu,
un buton widget poate exista în una din stările apăsat , focusat , sau niciuna ) și, cu ajutorul unei liste
de culori fiecare stare poate avea propria culoare.
Fiecare culoare este definită într – un <item> d in interior ul unui singur <selector> . Fiecare <item>
utilizează diferite atribute pentru a descrie starea în car e ar trebui să fie utilizat.
În timpul fiecă rei schimb ări de sta re, lista de stare este parcursă de sus în jos , iar primul element
care se potrivește cu starea actuală va fi utilizat .
Notă: S elecția nu se bazează pe alegerea celui mai bun element , ci pu r și simplu va fi ales primul
element care îndeplinește criteriile minime cerute .

Pentru definirea reusrsei color trebuie să se aibă în vedere tagul <co lor> , numele și codul specific .
➢ #ARGB
➢ #AARRGGBB
➢ #RRGGBB
➢ #RGB

În cadrul acestor notații , A reprezintă nivelul de transparență , pe când R ,G și B desemnează
culorile Roșu , Verde , respectiv Albastru.
Definirea culorii din fișierul XML este de forma <color name="colorPrimary">#3f51b5</color>

Resurse de tip drawable
O resursă drawable es te un concept general pentru o imagine care poate fi tras ă pe ecran și care
poate fi folosit ă pentru API – uri , cum ar fi getDrawable(int) , sau se aplică unei alte resurse
XML cu atribute de tipul android:drawable și android:icon . Există tipuri diferite de drawables:
➢ Fișiere Bitmap
Un fișier grafic bitmap (poate fi .png, .jpg sau .gif) este definit prin BitmapDrawable.

➢ Fișiere Nine -Patch
Un fișier PNG ce permite redimensionarea imaginii pe baza conținutului ( .9.png ) se
numește NinePatchDrawable.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

29

➢ Listă de Layere
Un drawable care gestionează o serie de alte Drawables. Acestea sunt desenate în ordinea
în care se regăsesc în vectorul de poze , astfel încât elementul cu cel mai mare indice va fi
desenat în partea de sus . Acest proces se numește LayerDrawable.

➢ Listă pentru state -uri
Este u n fișier XML care face referire la diferite imagini bitmap pentru diferite stări (de
exemplu, pentru a utiliza o altă imagine atunci când este apăsat un buton) și se definește prin
StateListDrawable.

➢ Listă pentru nivel
Este un fișier XML care definește un drawable ce gestionează un număr de Drawables
alternative, fiecare atribuie o valoa re maximă numerică și se c reează prin LevelListDrawable.

➢ Drawable pentru tranziții
Un fișier XML care definește un drawable care poate realiza tranziția fade între două
resurse drawable se creează prin TransitionDrawable.

➢ Inserare Drawable
Un fișier XML care definește un drawable ce introduce un alt drawable la o distanță
specificată. Acest lucru este util atunci când un View are nevoie de un drawble de fundal, care
este mai mic decât marginile Viewului actual .

➢ Clipuri Drawable
Un fișier XML care defineș te un drawable peste care se adaugă un alt drawable bazat pe
valoarea curent a a celui din urmă drawable se numește ClipDrawable.

➢ Scalare Drawable
Un fișier XML care definește o drawable care schimbă mărimea unui alt drawable baz at
pe valoarea sa actuală nivel creează un ScaleDrawable .

➢ Formă Drawable
Un fișier XML care definește o formă geometrică, inclusiv culori și gradienți se definește
prin ShapeDrawable .

Notă : În XML , o resursă de culoare poate fi folosită ca drawable. De exemplu ,când se creează
o listă de state , se poate face referire la o resursă de culoare din cadrul drawable prin
android:drawable = ”@color/white” .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

30

Resurse pentru animații
O resursă pentru animații poate defini două tipuri de animații , o animație care modifică
proptietățile unui obiect și alta pentru modificarea obiectelor de tip Drawable. Cea din urmă este
cunoscută sub denumirea de animație View și este divizată in animații Tween , ce au în vedere
rotirea , mutarea , redimensionarea unei singure imagini , respectiv animații Frame ce permit
vizualizarea imaginilor într -o ordine predefinită .
<animation -list
xmlns:android="http://schemas.android.com/apk/res -auto"
android:oneshot="false">
<item android:drawable="@drawable/persoana1" android:duration="700" />
<item android:drawable="@drawable/persoana2" android:duration="700" />
<item android:drawable="@drawable/persoana3" android:duration="700" />
</animation -list>

3. Tehnologii folosite

3.1 Servicii de localizare geografică

Android oferă aplicațiilor acces la serviciile de loc alizare acceptate de dispozitiv , prin clase din
pachet ul android.location. Componenta centrală a frameworkului de locație este serviciul de sistem
LocationManager, care oferă API – uri pentru a determi na locația dispozitivului .

Ca în cazul altor servicii de sistem, LocationManager nu se instanțiază direct. Mai degrabă, se
solicită o instanță din sistem prin apelarea getSystemService(Context.LOCATION_SERVICE).
Metoda returneaz ă un handle la o nouă instanță LocationManager.

Odată ce aplicația are LocationManager, aceasta este capabil ă de a face trei lucruri:
➢ Solicitare a listei tuturor furnizorilor de locație pentru ultima locație cunoscută de utilizator.
➢ Înregistrarea la actualizări periodice ale locației curente obținute de la un furnizor de locație.
➢ Înregistrarea la o anumită intenție (intent) pentru a fi oprit dacă dispozitivul vine într – o
anumită proximitate (spe cificate printr -o rază, în metri) a unei anumite latitudini sau
longitudini .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

31

3.1.1 Determinarea poziției unui telefon

Pentru a obține locația actuală a utilizatorului, se apelează metoda getCurrentPosition() . Aceasta
inițiază o cerere asincron ă pentru a detecta poziț ia utilizatorului, și interoghează hardware -ul de
poziționare pentru a obține informații actualizate. Atunci când poziția este determinată, funcția de
apelare inversă ( în engleză callback) definită este executată. Se poate furniza în mod opțional o a
doua funcție de apel are invers ă pentru a fi executată în cazul în care apare o eroare. Un al treilea
parametru opțional , ar putea seta vârsta maximă a poziției returnate , timpul de așteptare pentru o
solicitare, și , dacă se dorește , o precizie mare a poziți ei.

În mod implicit, getCurrentP osition() încearcă să răspundă cât mai repede posibil , cu un rezultat
redus de precizie și este util doar dacă se solicită un răspuns rapid , indiferent de precizi e. La
dispozitivele cu GPS integrat , poate dura un minut sau mai mult pentru a obține o lo calizare GPS
exactă , așadar date mai puțin precise ( oferite de localizarea prin IP sau WiFi) pot fi returnate la
getCurrentPosition().

Poziția utilizatorului este descrisă prin intermediul unui obiect Pozition , ca o referință la
coordonatele obiectului .

În cazul în care se schimbă datele poziție (fie prin mișcarea dispozitivului sau dacă se obțin
informațiile geografice mai exacte), se poate seta o funcție de apel invers , care este apelată odată
cu actualizar ea informațiilor poziți ei. Acest lucru se face cu ajutorul funcției watchPosition(), care
are aceiași parametri de intrare ca getCurrentPosition(). Funcția de apel invers este apelată de mai
multe ori, permițând actualiza rea locației pe măsură ce se mută dispozitivul , sau să ofere o locație
mai exactă dacă sunt implementate mai multe tehnici pentru g eolocaliza re. Funcția de eroare de
apel invers, care este opțională la fel cum este pentru getCurrentPosition(), poate fi apelată în mod
repetat. Se poate utiliza watchPosition() fără un apel inițial getCurrentPosition().

Metoda watchPosition() returnează un număr de identificare care poate fi utilizat pentru a identifica
în mod unic poziția solicitată watcher; această valoare se utilizeaz ă în tandem cu metoda
clearWatch() folosită pentru a opri vizionarea locați ei utilizatorului.

Pentru determinarea locației există 3 furnizori de rețea , GPS (GPS , AGPS ), network (AGPS ,
CellID , Wifi MacID) și furnizorul pasiv (Wifi MacID, CellID) . Acestea vor fi de scrise și
comparate în subcapitolele ce urmează.

Platformele Android plasează aceste tehnici și tehnologii subiacente în cei 3 furnizori de rețea
enumerați anterior . Nu există o modalitate bună de a ști exact ce va folosi Android, deoarece toate
telefoanele sunt diferite. Tehnologia folosită v ariază în funcție de rețea, de aria de acoperire, de
țară și de dispozitiv.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

32

3.1.2 Furnizor GPS

Acest furnizor determină locația utilizând sateliții. În funcție de anumite condiții , poate dura ceva
timp pentru a returna o locație fixă .Deasemenea , pentru a activa localizarea cu acest serviciu este
necesară permisiunea android.permission.ACCESS_FIN E_LOCATION .

Acuratețea acestui furnizor , de aproximativ 6 metri , este cea mai mare în compatație cu restul ,
însă este și un consumator puternic de baterie .

Ca tehnologie , furnizorul gps folosește GPSul integrat care prezintă următoarele caracteristici din
punct de vedere tehnologic:
➢ Utilizează cipul GPS din dispozitiv
➢ Se folosește de l inia de vedere a sateliților
➢ Durează mult timp pentru a obține o locație fixă
➢ Nu funcționează în jurul clădirilor înalte datorită incapacității sateliților de a comunica
direct cu dispozitivul

Pentru controlarea anumitor date a GPS -ului integrat se folosește clasa LocationManager ce
conține metoda sendExtra -Command() , pentru manipularea stării GPS -ului . Metoda
LocationManager.sendExtra -Command() are nevo ie de 3 parametri : un string pentru specificarea
furnizorului de locație , comanda propriu -zisă și un Bundle care prevede informații adiționale în
scopul realizării comenzii. [10]
Până la momentul actual GPS suportă trei comenzi , ca al doilea parametru :
➢ delete_aiding_data , folosit pentru înlăturarea datelor A -GPS care au fost downloandate în
prealabil
➢ force_time_injection , care retrage timpul curent din serverul NTP configurat și actualizat
pentru calculele GPS
➢ force_xtra_injection realizează downloadarea datelor A -GPS de pe serverele configurate și
folosite de furnizorul de localizare GPS.

3.1.3 Furnizor Network

Acest furnizor determină locația în funcție de disponibilitatea punctelor de acces și a punctelor de
acces WiFi. Rezultatele sunt obținute prin in termediul unei căutări în rețea și necesită oricare dintre
permisiunile următoare pentru o acuratețe mai mare :
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

33

Acuratețea acestui furnizor este, de aproximativ 60 metri , dar spre deosebire de GPS , consumul
de baterie este mult redus .

Ca tehnologie , furnizorul Network folosește A GPS ( adică asistent GPS) și prezintă , din punct de
vedere tehnologic , următoarele caracteristici:

➢ Utilizea ză cipul GPS din dispozitiv, precum și asistența din partea rețelei (rețeaua celulară)
pentru a oferi o soluție rapidă de localizare
➢ Prezintă avantajul unui c onsum redus de energie
➢ Este detul de precis
➢ Funcționează fără nici o linie de vedere spre cer
➢ Depinde de operatorul de telefonie și de telefonul care îl suportă (chiar dacă telefonul îl
acceptă, iar rețeaua nu atunci nu funcționează)

3.1.4 Furnizor Pasiv

Este u n furnizor de locație special pentru primirea locațiilor fără a iniția o fixare a locației. Acest
furnizor poate fi utilizat pentru a primi în mod pasiv actualizări de locație atunci când alte aplicații
sau servicii le solicită fără a cere de fapt locațiile.
Acest furnizor va returna locați ile generate de alți furnizori și ne cesită permisiunea
android.permission.ACCESS_FINE_LOCATION, deși, dacă GPS -ul nu este activat, acest furnizor
ar putea să returneze doar locații imprecise . Se folosește de regulă în cazul aplicațiilor pentru
vreme.

Acuratețea acestui furnizor este de aproximativ 1 kilometru , dar spre deosebire de GPS , consumul
de baterie este mult redus .

Ca tehnologie , furnizorul Network folosește A GPS ( adică asistent GPS) și prezintă , din punct de
vedere tehnologic , următoar ele caracteristici:

➢ Blocarea este foarte rapidă și nu necesită activarea dispozitivului GPS pe dispozitiv
➢ Nu necesită putere suplimentară , prin urmare nu este consumator de baterie
➢ Are o precizie foarte scăzută; Uneori pot avea o precizie mai bună în zon ele populate și
bine mapate care au multe p uncte de acces WiFi și în care persoanele își împărtășesc locația
pe Google

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

34

3.1.5 GPX

GPX , sau Exchange GPS Format , este o schemă XML conceput ă ca un format de date GPS pentru
aplicații software. Acesta poate fi folosit pentru a descrie puncte intermediare (waypoints) , trasee
și rute.

Datele de localizare sunt stocate în tag – uri și pot fi interschimbate între dispozitivul cu GPS
integrat și software. Aplicații softwa re comune pentru date includ vizionare a pistelor , proiectate
pe diverse surse pentru hărți și adnotarea hărților .

Conform documentației oficiale [13] distingem datele ese nțiale conținute în fișiere lul GPX din
cadrul aplicației MyFitTracker :
➢ wptType este un punct de referință individual , într-o colecție de puncte , fără a avea o
relație secvențială. Se compune din WGS 84 ( sistem de localizare GPS al Lumii )
coordonatele unui punct și alte informații descriptive (timp , altitudine ) .
➢ trkType este o evidență, făcută dintr -un segment care conține cel putin un waypoint , adică
o listă ordonată de puncte care descriu o cale. Un segment Track deține o listă de puncte
care sunt conectate logic în ordine. Pentru a reprezenta o singură pistă GPS în cazul în care
recepția GPS a fost pierdut ă sau receptorul GPS a fost oprit, se începe un nou segment
pentru fiecare interval continuu de date de urmărire . Se remarcă faptul că elementul anterior
poate fi repetat .

Din punct de vedere conceptual , căile(tracks) sunt înregistrările persoanei care a vizitat acea
locație, iar rutele sunt sugestii cu privire la destinația utilizatorului . Fiecare punct din tr – o cale are
un marcaj de timp(timestamp) .

Din punct de vedere tehnic , o cale este realizată dintr – un număr suficient de puncte ce permite
stabilirea cu precizie a unui traseu și reprezentarea pe un bitmap. Acesta poate să fie
➢ producția brută a unei înregistrări gps din cursul unei călătorii , pentru înregistrarea traseelor
➢ date extrase dintr – un vector hartă , pentru revederea traseelor memorate.

Proprietatile minime pentru un fișier GPX sunt latitudinea și longitudinea pentru fiecare punct.
Toate celelalte elemente sunt opționale , însă în aplicație este memorată și altitudin ea și timpul .

Latitudine și longitudine sunt exprimate în grade zecimale , iar cota în metri, ambele folosind WGS
84 . Datele și orele nu sunt reprezentate în ora locală, dar în schimb sunt Universal Time
Coordinated (UTC) folosind format ul ISO 8601. [3]

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

35

Pentru aplica ția MyFitTrackre am folosit o clasă gpxHelper . Pentru adăugarea punctelor
intermediare ( waypoints ) , în cadrul stabilirii unei căi , am folosit următoarea instrucțiune :

3.2 OSMDroid pentru mapare

OSMDroid este o variantă gratuită și completă pentru clasa MapView din Android. Acesta include
suport pent ru numeroase surse de acoperire online ș i offline și suport pentru suprapuneri
încorporate pentru : reprezentarea grafică a iconițelor , pentru urmărire a locație i, și pentru desen area
anumitor forme pe hartă .

Cu API – ul OSMDroid , am adăuga t harta în aplicația MyFitTracker , care se bazează pe date
obținute de pe site -ul oficial OpenStreetMap . API – ul se ocupă în mod automat de accesul la
serverele OpenStreet Maps, de descărcarea date lor, afișare a hărții și permite utilizarea gesturi lor pe
hartă. Se pot utiliza ape uri API pentru a adăuga marcatori, poligoane și suprapuneri, și pentru a
schimba punctul de vedere al utilizatorului pentru o anumită zonă a hărții. Prin urmare ,a cest API
prevede cele mai importante elemente de interfață cu utilizatorul necesare pentru a controla harta.

Grafica raster

OSMDroid se bazează pe grafica raster care codifică datele geografice din valorile pixelilor ,
precum și locațiile . [14] . O imagine bitmap este o matrice de puncte de date , reprez entată în
general printr -o grilă dreptunghiular ă de pixeli, care pot fi vizualizate pe un monitor . Imaginile
raster sunt stocate în fișiere imagine cu formate diferite . Din punct de vedere tehnic , u n raster este
caracterizat de lățimea și înălțimea imaginii în pixeli și de numărul de biți per pixel .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

36

Hărțile OSMDroid nu sunt incluse în platforma Android, dar sunt disponibile p entru orice
dispozitiv care rulează Android 2.2 sau mai mare.

Detaliile p entru integrarea hărților în aplicați e sunt prezentate în subcapitolul 6.4 .

3.3 Managerul de Senzori

Cele mai multe dispozitive cu sistem Android au încorporat senzori care măsoară mișcare a și
orientare a. Acești senzori sunt capabil i de a furniza date brute cu mare precizie și acuratețe, și
sunt utile dacă doriți să monitorizeze mișcarea dispozitivului tridimensional sau de poziționare .
Cadrul (frameworkul) pentru senzori Android permite accesarea mai multor tipuri de senzori.
Unii dintre acești senzori sunt bazat i pe hardware iar altele sunt bazate pe software.
Senzori pe bază de hardware sunt componente fizice construite într -un telefon sau o tabletă. Ei
obțin datele lor prin măs urarea directă proprietăți de mediu specifice, cum ar fi accelerarea,
intensitatea câmpului geomagnetic sau schimbarea unghiulară.
Senzori i bazați pe software nu sunt dispozitive fizice, cu toate că ei mimează senzori pe bază de
hardware. Aceștia își obți n datele de la un ul sau mai mulți senzori hardware și sunt numiți uneori,
senzori virtuali sau sintetici. Senzorul de accelerație liniară și senzorul de gravitate sunt exemple
de senzori software.
Puține dispozitive cu sistem Android au fiecare tip de senzor. De exemplu, cele mai multe
dispozitive de telefoane și tablete au un accelerometru și un magnetometru, dar mai puține
dispozitive au barometrele sau termometre. De asemenea, un dispozitiv poate avea mai mult de
un senzor de un anumit tip. De exempl u, un dispozitiv poate avea doi senzori de gravitație,
fiecare dintre ele având o gamă diferită.

3.3.1 Senzori de poziție

Platforma A ndroid oferă doi senzori care permit determinarea poziției unui dispozitiv: senzorul de
câmp geomagnetic și accelerometru . Platforma Android oferă , de asemenea , un senzor care
permite determinarea distanței dintre ecranul unui dispozitiv și un obiect (cunoscut sub numele de
senzor de proximitate ). Senzorul câmpului geomagnetic și senzorul de proximitate sunt hardware.
Pentru a determina orientarea unui dispozitiv, se utiliz ează citirile de la accelerometrul
dispozitivului și senzorul câmpului geomagnetic.

Senzori de poziție sunt utiliza ți pentru determinarea poziției fizice a unui dispozitiv în cadru
mondial de referință. Se poate utiliza senzorul câmpului geomagnetic în combinație cu

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

37

accelerometru pentru a determina orientarea unui dispozitiv în cadru de referință aplicației.
Senzorul câm pului geomagnetic și accelerometru returnează o matrice multi -dimensională a
valorilor senzorilor pentru fiecare SensorEvent. De exemplu, senzorul de câmp geomagnetic
furnizează valori de intensitate a câmpului geomagnetic pentru fiecare dintre cele trei a xe de
coordonate în timpul unui eveniment de senzor unic. De asemenea, senzorul accelerometru
măsoară accelerația aplicată dispozitivului în timpul unui eveniment al senzor ului.

3.3.2 Senzori de mișcare

Platforma Android oferă mai mulți senzori care pe rmit monitorizarea mișc ării unui dispozitiv.
Arhitecturi le senzorilor variază în funcție de tipul de senzor :

➢ Gravitatea, accelerație liniară, vectorul de rotație, mișcare semnificativă, contorizarea
pașilor , și senzori de detectare al pașilor sunt fie bazate pe hardware fie pe software.
➢ Senzorii accelerometrului și ale giroscopului sunt întotdeauna bazate pe hardware.

În lucrarea de față , am folosit senzorul de m ișcare ca o reflectare a mediului fizic în care
dispozitivul este așezat (deplasându -se îm preună cu utilizatorul ) . În acest caz se monitorize ază
mișcare a în raport cu cadru mondial de referință. Senzori de mișcare nu sunt utilizați în mod normal
pentru a monitoriza poziția dispozitivului, dar acestea pot fi folosite cu alți senzori, cum ar fi
senzorul de câmp geomagnetic, pentru a determina poziția unui dispozitiv în raport cu cadru
mondial de referință .

Toți senzorii de mișcare returnează o matrice multi -dimensionale ale valorilor senzorilor pentru
fiecare SensorEvent. De exemplu, în tim pul unui eveniment, accelerometru returnează date de forță
de accelerație pentru cele trei axe de coordonate, iar giroscopul returnează rat a de date de rotație
pentru cele trei axe de coordonate. Aceste valori de date sunt returnate într – o matrice de valori
reale , împreună cu alți parametri SensorEvent.

3.4 JSON

JavaScript Object Notation (JSON) este un format standard pentru reprezentarea datelor structurate
ca obiecte JavaScript, care este frecvent utilizat pentru reprezentarea și transmiterea datelor de pe
site-uri web (de exemplu, trimiterea unor date de la se rver la client, astfel încât acesta poate fi afișat
pe pagină).

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

38

JSON este un format de date ce urm ărește sintaxa obiect elor JavaScript. Chiar dacă se bazează pe
sintaxa JavaScript, acesta poate fi utilizat în mod independent de JavaScript în multe alte medii de
programare care dispun de capacitatea de a citi (parse) și a genera un JSON.

JSON poate exista ca un obiect, sau un șir de caractere – primul este utilizat atunci când se dorește
citirea datelor din JSON, iar cel din urmă este utilizat atunci când se dorește trimiterea JSON în
rețea. Pentru această problemă , JavaScript pune la dispoziție un obiect JSON global care are
metode disponibile pentru conversia între cele două.

Un obiect JSON poate fi stocat în propriul fișier, care este de fapt doar un fișier text cu o extensie
.json, și un tip MIME de aplicație /json. [15]

3.5 Retrofit 2

Acest subcapitol are în vedere descrierea utiliz ării bibliotecii Retrofit pentru gestionarea apelurilor
API REST în aplicația MyFitTracker .

Retrofit este un client REST de scriere , în condiții de siguranță , pentru Android și Java , care are
scopul de a utiliza mult mai ușor serviciile web de tip REST . În cadrul proiectului am folos it cea
mai nouă versiune , Retrofit 2 , ce are la bază rețeaua OkHttp .

Am folosit această bibliotecă deoarece serializează automat răspunsul JSON folosind un POJO
(adică Plain Old Java Object ) , care trebuie definit în avans pentru structura JSON. P entru a
serializa JSON este nevoie de un convertor pentru a – l transforma în Gson mai întâi. Prin urmare
am adăugat următoarele dependențe în fișierul build.grade :

Figura 3. 1 Dependențe Retrofit2 din MyFitTracker

Logging -interceptor generează un log de tipul string , al răspunsului returnat .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

39

Utilizare Retrofit

Pentru a lucra cu Retrofit am folosit trei clase :
➢ Clasa M odel care am folosit -o pentru a mapa datele JSON
➢ Interfața care definește posibile operații HTTP
➢ Clasa Retrofit.Builder – Instanță care utilizează interfața și API -ul Builder, care permite
definirea punctului final URL pentru operațiunea HTTP.

Fiecare metodă a unei interfețe reprezintă un posibil apel API. Ac esta trebuie să aibă o adnotări
HTTP ( GET, POST etc.) pentru a specifica tipul de solicitare și adresa URL. Valoarea returnată
va fi tipul rezultatul ui așteptat printr -un obiect Call .

Am utiliza t blocuri de înlocuire și parametrii de interogare pentru a aju sta adresa URL. Un bloc de
înlocuire se adaugă la URL – ul relativ prin {}.

Cu ajutorul adnotării @Path la parametrul metode i, valoarea acelui parametru va fi legat la blocul
de înlocuire specific.

Convertoare retrofit

Retrofit poate fi configurat să utilizeze un convertor specific. Ace st convertor se ocupă de
serializare a sau deserializarea datelor .
Pentru a converti la și de la JSON am folosit Gson: com.squareup.retrofit: Converter -gson

Autentificarea Retrofit

Retrofit sprijină dezvoltatorii care doresc sa implementeze autentificare în program , cu apeluri
API . Pentru aplicația MyFitTracker am realizat au tentificarea prin utilizarea unui jeton ( în engleză
token ) API.

Există două moduri pri n care se poate realiza autentificare a. Prima metodă ar fi de a ma nipula
antetul pentru solicit ări cu ajutorul adnotări lor. O altă posibilitate ar fi de a utiliza un interceptor
OkHttp.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

40

➢ Adnotări

Cu ajutorul adnotării @Header("Authorization") Retrofit adăugă un câmp de a utorizare la titlul
cererii , cu valoarea pe care o oferă dezvoltatorul pentru acreditări ( în engleză credentials) .

Pentru a genera acreditări de autentificare de bază, se utiliz ează clasa OkHttps Credentials cu
metoda ei de bază (String, String) . Metoda ia numele de utilizator și parola și returnează
acreditarea de autentificare pentru schema de bază.

În aplicație am utilizat un indicativ API de autentificare, prin care se poate apela doar metoda de
obținere a jetonului , getUserDetails(String).

➢ Interceptor ii OkHttp

Metoda de mai sus însă, adaugă doar acreditările, dacă sunt solicitate detaliile de utilizator. Dacă
sunt necesare mai multe apeluri pentru autentificare, se poate utiliza un interceptor. Acesta
modi fică fieca re cerere înainte de a fi trimisă ș i îi alterează titlul . Avantajul este că nu trebuie să
mai fie adăugat @Header("Authorization") la definirea fiecărei metodă API.

Se folosește din nou utilizarea clasei Acreditări pentru autentificare a de bază și utiliza rea token –
ului.

3.6Autentificare JWT

JSON Web Token (JWT ) transmite informații care pot fi verificate cu o semnătură digitală. În
forma lor cea mai de bază, JWTs permit e semnarea informații lor (denumite revendicări) cu o
semnătura care poate fi verificată la un moment ulterior , cu o cheie .

De ce este important JWT ?
Acesta s e ocupă de unele probleme ce vizează informații le transmise de la un client la un server.
JWT permite serverului să verifice informațiile conținute în JWT fără a memora neapărat starea pe
server.

Ce este un JWT?
Înainte de toate se va analiza structura(conținutul) unui JWT ,formată din trei părți distincte, care
sunt codificate în URL pentru transport:

➢ Antet: Antetul conține metadatele pentru token – ul și tipul algoritmului semnăturii și / sau
criptare
➢ Revendicările: Revendicările conțin orice informație care se dorește a fi semnată

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

41

➢ Semnătura JSON Web (JWS): Anteturile și revendicările semnate digital utilizând
algoritmul în specificat în antet

Antet și re vendicări sunt JSON care sunt codificate în baza 64 pentru transport. Antet, revendicări
și semnătura sunt anexate , împreună cu un caracter punct .

Cel mai important lucru despre Jetoane JSON Web este că acestea sunt semnate. Acest lucru
asigură faptul ca revendicările nu au fost falsificate atunci când au fost depozitate și a trecut între
două servicii . Aceasta se numește verificarea semnăturii. JWT are mai multe caracteristici avansate
de criptare, prin urmare dacă este nevoie ca informația din revendicări să fie criptat ă, acest lucru
este posibil folosind JSON de criptare Web.

După cum este menționat anterior , pentru autent ificare s -au utilizat jetoane a căror valabilitate
expiră dupa 3600 de secunde .

Schema de autentificare bazat ă pe jetoane a devenit extrem de popular ă în ultima vreme, deoarece
oferă avantaje importante în comparație cu sesiuni le/cookie -urile . Pentru a obține un jeton este
necesară o autentificare , apoi se setează serviciul pentru generarea jetoanelor care sunt trim ise apoi
ca raspuns, printr -un json . Jsonul este apoi stocat la client .

Mai jos sunt prezentate beneficiile acestei autentificări.

➢ Nu este nevoie de protecție C ross Site Request Forgery
➢ Prezintă o integrare mai bună cu telefonul mobil
➢ Este redus ă încărcare a pe serverul de autorizare
➢ Nu este nevoie de o sesiune distribuită de stocare

Pașii care trebuiesc parcurși pentru autentificarea JWT sunt prezentați mai jos :

➢ Utilizatorul obține jetoanele de Refresh și Acces prin furnizarea de acredit ări la serverul de
autorizare
➢ Utilizatorul trimite jetonul de acces cu fiecare cerere de acces are a resurse lor API protejate
➢ Jetonul de acces este semnat și conține identitatea utilizator ui (de exemplu, ID -ul de
utilizator) și revendicările de autorizare.

Revendicările de autorizare vor fi incluse în jeton ul de acces. De ce este important acest lucru? Ei
bine, să spunem că revendicările de autorizare (de exemplu, privilegiile de utilizator în baza de
date) s unt schimbate în timpul vieții jeton ului de acce s ; aceste modificări nu vor intra în vigoare

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

42

până la emiterea noului jeton de acces. Totuși , î n cele mai multe cazuri, acest lucru nu reprezintă
o mare problemă, pentru că jetoanele de acces sunt oricum de scurtă durată.

3.7 Laravel

Acest subcapitol își propune să descrie frameworkul PHP Laravel , folosit pentru conectarea la
baza de date și gestionarea interogărilor (în engleză queriuri ) . Cele mai importante caracteristici
folosite în proiectul prezentat vor fi menționate mai jos :

➢ Grupări (bundles) oferă un sistem modular de împachetare . Laravel folosește Compozitor
(composer) pe post de manager de dependenț e, pentru a adăuga frameworkuri și pachete
PHP Laravel specifice din magazia ( repository) Packagist.

➢ Constructor ul de interogare oferă o metodă directă de acces la baze de date , oferind un set
de clase și metode capabile de construcție în mod programatic a interogărilor . Acesta
permite , de asemenea selectarea rezultatelor interogărilor executate din cache .

➢ Partea de logică este o parte integra tă a aplicațiilor dezvoltate, pusă în ap licare , fie prin
utilizarea controlere lor fie ca parte a declarațiilor de rută.

➢ Rutare a inversă definește o relație între link – uri și rute, făcând posibil e modificările
ulterioare la rutele care urmează să fie propagate automat în linkuri relevante. Când link –
urile sunt create folosind numele unor rute existente, identificator ii uniformi d e resurse
(URI – uri) corespuzători sunt creați în mod automat de c ătre Laravel.

➢ Controlere de tip restful oferă o modalitate opțională pentru separarea logicii din spatele
servirii HTTP GET și cererii POST.

➢ Clasa de încărcare automată oferă încărcare automată a claselor PHP , fără a fi nevoie de
întreținere manuală a c ăilor de incluziune. La cerere , încărcare a împiedică includerea
componentelor care nu sunt necesare, astfel numai componentele utilizate sunt încărcate.

➢ Compozitori de tip View servesc ca unități logice de cod , personalizate , ce pot fi executate
atunci când este încărcată o imagine.

➢ Unitatea de testare este furnizat ca parte integrantă a Laravel , care conține teste unitare
pentru detect area și prevenirea regresii lor în framework.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

43

➢ Paginația automată simplifică sarcina de punere în aplic are a paginație, înlocuind -o cu
metode automate integrate în Laravel.

➢ Cererea Form ularului este o caracteristică care servește ca bază pentru validarea
formularul ui de intrare prin legare a intern ă a eveniment elor de ascultare( adica event
listeners) . În urma acestei cereri , se invocă metodel e de validare a form ularului și se
generează formularul actual.

Configurare

Configurația bazei de date se va realiza în fișierul config/database.php , mai exact , se vor defini
toate conexiunile inclusiv cele care sunt utilizate în mod implicit .
În prezent , Laravel suportă patru sisteme de baze de date , MySQL , Postgres , SQLite și SQL
Server.

Citirea și scrierea Conexiunilor

Uneori se dorește folosirea unei singure conexiuni pentru instrucțiunea SELECT și a altei
conexiuni pentru INSERT , DELETE sau UPDATE . Folosind acest framewok conexiunile
corespunzătoare vor fi utilizate de fiecare dată când se folosesc interogări prime sau constructori
de interogare .

Artisan CLI

Interfața liniei de comandă Laravel (CLI), numit ă Artisan , a fost introdus ă inițial în Laravel cu un
set limitat de capabilități iar ulterior , s -a realizat m igrația la o arhitectură bazată pe Composer .

Caract eristicile Artisan sunt mapate sub diferite subcomenzi ale liniei de comandă artizan utility ,
oferind funcționalități care ajută la gestionarea și co nstruirea de aplicații bazate pe Laravel.
Utilizări comune ale Artisan includ migrații gestionarea bazei de date și însămânțarea, publicarea
pachet elor și generarea de șabloane de cod pentru noi controllere și migrații; acesta din urmă
permin dezvoltatorul ui să renunțe la crearea scheletelui de cod corespunzător . Funcționalitatea ș i
capacitățile Artisan pot fi extins e prin implementarea unor noi comenzi personalizate, care pot fi
folosite pentru a automatiza sarcinile recurente specifice aplicației.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

44

3.7.1 Migrări

Migrările asigur ă o versiune de control al sistemului pentrul schemele bazei de date , ceea ce face
posibil ă asocierea modificări lor aplicației codebase și a modificărilor necesare în structura bazei
de date. Ca urmare, această caracteristică simplifică implementarea și actualizarea aplicațiilor
bazate pe Laravel. Migr ările sunt, de obicei asociat e cu schema constructor Laravel .

Pentru a adăuga toate migrările în baza de date se deschide commandprompt în directorul api cu
aplicația și se introduc comenzile php artisan key:generate , pentru generarea cheii aplicației în
fișierul .env , un fișier cu proprietatea hidden localizat în directorul api -ului .
Pentru a c reea o tabel ă , de exemplu exercises , din aplicația MyFitTracker , se scrie
Schema::create('exercises', function (Blueprint $table) {
$table ->increments('id');
$table ->integer('equipment_id') ->unsigned();;
$table ->string('name');
$table ->integer('difficulty');
$table ->string('category');
$table ->string('video');
$table ->integer('time');
$table ->boolean('battle_ready');
$table ->timestamps();

3.7.2 Seeduri

Laravel include o metodă simplă de populare a tabelelor din baza de date cu datele implicite
selectate care pot fi utilizate pentru testare sau pot fi utilizate ca parte inițială a configurării. Toate
clasele de seed sunt stocate în directorul database/see ds . Aceste clase pot avea orice nume se
dorește. În mod implicit, o clasă este definit ă for you . Din această clasă, se pot utiliza metode pentru
a rula alte clase de seed, permițând contrul deplin al orinii acestora .

Exemplu de scriere al unei clase seed
DB::table('exercises') ->insert([
'name' => "Lying Prone Quadriceps",
'equipment_id' => 1,
'difficulty' => 3,
'category' => "Legs",
'video' => "http://videocdn.bodybuilding.com/video/mp4/60000/60162m.mp4",
'time' => 30,
'battle_ready' => 0 ]);
Pentru adăugarea seedurilor se folosește comanda php artisan migrate:refresh –seed .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

45

4. Cerin țele aplica ției

4.1 Caracteristici funcț ionale

Dupa ce se logheaz ă, userului i se pun la dispoziție o serie de întrebă ri în legătură cu profilul
său și activitatea sa zilnică. Î n urma raspunsurilor acestuia , i se va asocia un avatar care s ă
corespund ă caracteristicilor fizice ale ut ilizatorului. De asemenea, tot în funcț ie de raspunsurile
date, userul va fi incadrat într-o anumită categorie de dificultate iar aplicaț ia îi va pune la dispoz iție
programe scurte de exerciții potrivite.
Fiecare prog ram es te creat dintr -o serie de exercitii simple sau complexe , potrivite atât
pentru î ncepatori cât și pentru avansaț i, iar fiecare postur ă este exemplificat ă și explicată într-un
video . Aplicaț ia dispune de func ția cronometru, astfel î ncât utilizatorii să se po ată ghida pent ru a
realiza toate exercitiile î ntr-un mod corect, într-un interval de timp alocat. Practicarea cu
regularitate a exercitiilor va ajuta la îmbunatăț irea flexibilit ății, tonifierea musculaturii ș i la
reducerea stresului.
O altă particularitat e a aplicației este funcția de geolocalizare și înregistrare a traseului de
alergare parcurs de utilizator , ce oferă o statistică cu numărul de pași ,timpul și distanța parcursă
până la momentul opririi înregistrării. Aceste trasee pot fi memorate în memo ria internă a
dispozitivului până la un număr de 25 cu scopul de a sublinia o evoluție față de traseele precedente.

Tabel 4.1 Specificații funcționale

Denumirea Înregistrării

Descrierea semnificației

Denumire proiect
MyFitTracker
Denumirea cazului de utilizare Completarea taskurilor zilnice asignate pentru
actorul principal
Codificarea cazului de utilizare
MFT _completareDailyuri
Actor principal
Utilizatorul
Preconditii – Utilizatorul trebuie sa aib ă cont ș i să fie logat

Postconditii de succes – Utilizatorul a completat cu succes taskurile
zilnice
Postconditii de eș ec – Taskurile nu au fost completate la timp si
utilizatorul a pierdut o zi din antrenament

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

46

– Utilizatorul poate completa numai o singur ă
data taskurile a signate in ziua respectivă
Acțiune inițială
Aplicatia alege taskurile zilnice specifice
fiecarui utilizator
Principalul scenariu de
success 1. Utilizatorul deschide fereastra de
dailyuri
2. Utilizatorul selecteaza taskul pe care
doreș te să îl completeze
3. ( Optional ) Utilizatorul vizionează
simularea exercitiului
4. Utilizatorul își cronometrează
performanța și duce exercițiul la bun
sfârșit .

4.2 Factorul uman

Aplicația de față prezintă o interfață intuitivă , făcând -o ușor de utilizat . De asemenea are un număr
redus de pași , toate layout -urile fiind concentrate pe același ecran mulțumită fragmentelor
Android.

Pentru performanța aplicației am utilizat mai multe fire de execuție , altfel toate operațiile ar fi fost
executate pe firul principal , ia r experiența utilizatorului nu ar fi fost una pozitivă .

4.3 Cazuri de utilizare

Cazurile de utilizare identificare pentru aplicația MyFitTracker sunt :
1. Completarea unui profil complex după prima autentificare.
2. Editarea unui profil deja existent
3. Vizualizarea profilului virtual creat
4. Vizualizarea activităților zilnice recomandate în urma analizării profilului
5. Efectuarea exercițiului din setul de activități
6. Localizarea pe hartă pentru determinarea locației
7. Pornirea serviciului de înregistrare a traseului pentru alergare
8. Salvarea traseului
9. Ștergerea traseului temporar după finalizarea înregistrării
10. Vizualizarea statisticilor traseelor aranjate după dată .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

47

Titlu : Adăugarea unui profil complex în baza de date (Caz de utilizare 1)
Descriere : Permite utilizatorului să își construiască profilul pentru personalizarea exercițiilor
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să se înregistreze în baza de date
3. Utilizatorul trebuie să se autentifice
Pași : 1. Se vor afișa , după prima logare a noului cont , o serie de layouturi
2. Utilizatorul trebuie să completeze toate cerințele pentru a finaliza crearea
profilului :
➢ Nume care va fi preluat pentru vizualizarea profilului
➢ Utilizatorul specifică i nformațiile pentru a calcula Indicele de
masă corporal : Sex
înălțime , greutate , vârstă
➢ Utilizatorul specifică informațiile pentru stabilirea exercițiilor
potrivite : activitate zilnică, echipamente disponibile , scopul
folosirii aplicației, nivelul de competitivitate
3. Aplicația crează în baza de date profilul , generează un jeton de încredere
iar utilizatorul nu mai este nevoit să se logheze de pe același dispozitiv

Titlu : Editarea unui profil deja existent (Caz de utilizare 2)
Descriere : Permite utilizatorului să editeze profilul când acesta observă o modificare fizică,
sau a planului de training , astfel încât să -și mențină profilul actualizat
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizat orul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal
Pași : 1. Utilizatorul accesează butonul de editare a profilului din ecranul de
navitație și parcurge toți pașii de editare ( ca în primul caz )
2. Aplicația actualizează în baza de date profilul și recalculeaza indicele de
masă , modifică profilul virtual și setul de exerciții.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

48

Titlu : Vizualizarea profilului virtual creat (Caz de utilizare 3)
Descriere : În urma completării profilului , se va genera un profil automat pe baza
informațiilor primite
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal
Pași : 1. Utilizatorul deschide bara de navigație
2. Aplicația preia din baza de date numele , greutatea ,înălțimea și
imaginea corespunzătoare Indicelui de masă corporal

Titlu : Vizualizarea activităților zilnice recomandate în urma analizării
profilului (Caz de utilizare 4)
Descriere : Se vor genera , conform profilului , exercițiile zilnice recomandate
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal
Pași : 1. Utilizatorul va accesa tabul 3
2. Aplicația va afișa o serie de 5 exerciții zilnice , dintr -un program de 30
de zile cu posibilitate de actualizare ; acestea vizează o singură grupă
de mușchi pentru o dezvoltare armonioasă

Titlu : Efectuarea exercițiului din setul de activități (Caz de utilizare 5)
Descriere : Această activitate prezintă fiecare exercițiu , cu detaliile aferente
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal tab 3
Pași : 1. În tabul 3 , utilizatorul va accesa unul din cele 5 exerciții propuse
2. Aplicația va afișa un nou layout , în afara ecranului principal ce
conține:

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

49

➢ O exemplificare video a exercițiului
➢ Timpul recomandat pentru realizarea acestuia
➢ Numărul de repetări al exercițiului
➢ Descrierea echipamentului folosit
➢ Un cronometru
3. Utilizatorul va apăsa pe video și se va familiariza cu acesta
4. După înțelegerea exercițiul ui , acesta va apăsa pe butonul de start
5. Va începe număratoarea de la 0 a cronometrului iar butonul își va
schimba denumirea în Stop
6. La finalizarea exercițiului , utilizatorul poate accesa din nou butonul
7. Cronometrul se va opri și va afișa timpul final , iar butonul își va
schimba denumirea în Reset
8. Utilizatorul va apăsa pe butonul de reset pentru reluarea
cronometrajului sau pe butonul back pentru începerea altui exercițiu

Titlu : Localizarea pe hartă pentru determinarea locației (Caz de utilizare 6)
Descriere : Această funcție localizează utilizatorul pe hartă și menționează tipul de
serviciu folosit
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal
Pași : 1. Utilizatorul apasă pe butonul de locație
2. Aplicația va cere acces la serviciile de localizare network
3. Se va genera un waypoint pentru localizarea aproximativă a
dispozitivului , cu o eroare inițială de 20 m
4. Aplicația va afișa tipul de servicii folosite (GPS sau Network) și ultima
accesare a acestora

Titlu : Pornirea serviciului de înregistrare a traseului pentru alergare
(Caz de utilizare 7)
Descriere : Înregistrarea unui traseu vizual memorând pașii , distanța și timpul parcurs
până la întreruperea acestui serviciu
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

50

3. Utilizatorul trebuie să se afle în ecranul principal tab 1
Pași : 1. Se va genera harta și butonul de înregistrare
2. Utilizatorul apasă pe butonul de înregistrare din dreapta -jos a ecranului
3. Serviciul de localizare va începe :
➢ Se va cere acces la senzorul de mișcare și va înregistra numărul
de pași , la fiecare mișcare a telefonului
➢ Va începe cronometrul , iar la fiecare două secunde va fi
desenat un nou waypoint
➢ Se va calcula distanța dintre două waypointuri pentru a
determina distanța finală parcursă
4. Utilizatorul va întrerupe serviciul prin apăsarea butonului Stop

Titlu : Salvarea traseului (Caz de utilizare 8)
Descriere : Salvarea traseului parcurs în memoria telefonului
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal tab1
4. Utilizatorul trebuie să fi parcurs deja un traseu
Pași : 1. Utilizatorul va apăsa butonul pentru salvare a traseului
2. Traseul și datele aferente vor fi salvate în memoria telefonului
3. Harta va fi reactualizată și se vor șterge waypointurile traseului anterior

Titlu : Ștergerea traseului temporar după finalizarea înregistrării
(Caz de utilizare 9)
Descriere : Ștergerea traseului temporar dacă s -a accesat din greșeală butonul de
înregistrare sau pur și simplu nu se dorește stocarea acestuia
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal tab1
4. Utilizatorul trebuie să fi parcurs deja un traseu
Pași : 1. Utilizatorul va apăsa butonul de ștergere a traseului
2. Harta va fi reactualizată și se vor șterge toate waypointurile

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

51

3. Informațiile memorate se vor șterge iar butonul va reveni la forma
inițială

Titlu : Vizualizarea statisticilo r traseelor aranjate după dată
(Caz de utilizare 10)
Descriere : Vizualizarea statisticilor și a traseelor parcurse și înregistrate ulterior , în
ordine cronologică
Actor : Utilizatorul final
Precondiții : 1. Aplicația trebuie să fie pornită
2. Utilizatorul trebuie să fie autentificat
3. Utilizatorul trebuie să se afle în ecranul principal tab2
Pași : 1. Aplicația va încărca , implicit , ultimul traseu parcurs și statisticile
acestuia
2. Utilizatorul va accesa o dată din stivă
3. Aplicația va încărca traseul corespunzător datei alese

5. Descrierea aplicației

Acest capitol urmărește să prezinte interfața și perspectiva funcțională a aplicației. MyFitTracker
se folosește de geolocalizare și solicită accesul la internet pentru a fi utilizată în scopul îmbunătățirii
condiției fizice a utilizatorului . În următoarele subcapitole vom analiza aplicația atât din punct de
vedere grafic cât și al caracteristicilo r și ne vom axa pe partea de front -end dezvoltată .

5.1 Aplica ția client

Pentru a utiliza aplicația MyFitTracker și pentru a beneficia de toate funcționalitățile sale este
necesar un dispozitiv cu platformă Android , cu acces constant la Internet (Wifi și pe viitor
Network ), cu un senzor GPS integrat și , de preferat , cu semnal stabil din partea operatorului de
telefonie mobilă.

Primul pas îl constituie instalarea aplicației client pe dispozitiv . Aceasta rulează fără a întâmpina
probleme de performanță pe versiunile de la 4.4 până la 7. 0 . Conform documentației din ca drul
programului AndroidStudio , MiFitTracker este compatibilă cu 81% din dispozitivele ce rulează
pe platforma Android.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

52

Specific platformei menționate anterior , proiectul va fi livrat ca un fișier cu extensia apk și va
putea fi instalată în memoria telefonului ce prezintă următoarele specificații :

Specificatii minime Specificatii recomandate
Sistem de operare Android 4.4 (KitKat) Android 5.0 (Lollipop)
Procesor Dual Core 1.2 GHz Quad Core 1.4 GHz
Memorie RAM 512 MB 1024 MB
Memorie Internă 4 GB 16 GB
Tabel 5. 1 Scenariu general pentru specificatiile sistemului pe care va rula aplicatia

5.2 Autentificarea în aplicație

Pagina de start este reprezentată de interfața pentru logare . În acest view i se cere utilizatorului un
email valid , înregistrat în prealabil și parola corespunzătoare .

În cazul în care butonul LogIn este declanșat înainte de completarea corectă a cel or două câmpuri
se va afișa un mesaj de eroare corespunzător , iar utilizatorul nu va înainta în aplicație .
MyFitTracker este concepută să prezinte o interfață simplă , ușor de utilizat , motiv pentru care am
introdus ,conform Figurii 5.2.1,c azurile de er oare pe care un utilizator le poate întâmpina.

➢ Dacă utilizatorul introduce în primul câmp o adresă care nu respectă formatul pentru email
sau nu are un cont înregistrat în prealabil , atunci se va afișa printr -un toast mesajul “This
email address is inval id”
➢ Dacă câmpul de adresă are valoarea NULL atunci se va afișa mesajul “Please enter your
email ”
➢ În cazul în care parola nu coincide cu paro la care a fost înregistrată iniț ial se va afișa mesajul
“ Wrong Password ”
➢ Dacă serverul este indisponibil atunci pagina de logare va rămâne în stadiul ShowProgress
al interfeței pentru utilizator și va invalida formularul de logare . Pentru ShowProgress am
folosit o animație .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

53

Figura 5. 2 Interfața de logare

Așa cum am menționat în capitolul precedent, Tehnologii folosite , autentificarea este asincronă și
se utilizează un jeton de autentificare , detaliat în subcapitolul 3.5 Retrofit . Mai jos este scrisă
autentificarea prin jetoane în limbajul java.

String authToken = response.body().getAuthToken() ;
editor.putString( "authToken" ,authToken) ;
Log. e(LOG_TAG,"Token login created : " + authToken) ;
editor.putInt( "userID" ,response.body().getUserID()) ;
editor.apply() ;

După autentificarea cu succes , se va verifica dacă utilizatorul a introdus deja datele , printr -un
request de login, și va încărca poza de profil precum și restul informațiilor .

În capitolul anterior am vorbit despre obiectul Json și jetonul de autentificare generat în baza de
date. În urma acestei acțiuni , interfața layoutului de Login nu va mai fi încărcată la accesarea
ulterioară a aplicației , decât dacă se dorește schimbarea utilizatorului . Acest lucru se realizează
prin butonul de Logout din NavSideBar , despre care vom vorbi în subcapitolul 5.8.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

54

5.3 Înregistrare a în aplicație

În cazul în care utilizatorul descarcă pentru prima dată aplicația , acesta nu va avea cont și , prin
urmare , i se va solicita înregistrarea . Acesta va completa câmpurile conform regulilor
➢ În introducerea numelui nu sunt permise alte semne în afară de char și spațiu . Pentru
validarea numei am folosit funcția regx.
➢ Emailul va avea format ul nume@email.com
➢ Parola solicitată va fi de minim 6 caractere și se va introduce în cele două câmpuri , în caz
contrar se va afișa mesaj de eroare
➢ Utilizatorul trebuie să respecte termenii și condițiile și să bifeze căsuța prin care confirmă
vârsta împlinită de 14 ani .
Dacă condițiile anterioare sunt îndeplinite atunci se va apela butonu de register și cont ul va
fi creat.

Figura 5.3 Interfața de înregistrare

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

55

5.4 Ecranul cu informații despre accesul la locație și internet

Utilizatorul este redirecționat către această interfață la prima instalare a aplicației pe telefon . I se
va solicita accesul la locație pentru geolocalizare și la memoria internă pentru memorarea traseelor.

Începând cu API 23 , aplicațiile nu mai pot solicita anumite permisiuni ( de acces la locație, sciere
și citire din memoria internă ) fără acordu l utilizatorului . În acest scop , am conceput un view în
care utilizatorului ii este explicată necesitatea acestora , iar dacă decide să refuze acordul , metoda
va returna false și va împiedica folosirea serviciilor respective .

În caz contrar , utilizatorul va fi redirecționat către ecranul principal .

Figura 5.4 Interfața pentru accesarea permisiunilor

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

56

5.5 Ecranul principal

Ecranul principal este contruit dintr -un view care conține la rândul lui 3 fragmente , unul pentru
harta principală , altul pentru afișarea traseele înregistrate și ultimul pentru lista cu exerciții zilnice
propuse .

5.5.1 Tabul cu harta
Aplicatia este conș tientă de locația utilizatorului datorită serviciului de localizare ce trimite
semna le catre serviciul web legat de poziția geografică . Aceast ă poziție geografi că este preluată cu
ajutorul tehnologiei de triangulare GSM. Tehnologia de triangulare presupune o le gatură între
telefon și antenele GSM la care este conectat, legatură ce implic ă cunoa șterea lor geografic ă, drept
rezultat se calculeaza o medie a distanțelor ș i se aproximeaz ă locația curent ă(50-55m) in funcț ie de
locatie. Harta a fost preluat ă de pe site -ul OpenStreetMaps [12]

Folosirea tehnologiei de triangulare GSM aduce printre beneficii și faptul că nu afectează durata
de viață a bateriei datorită semnalulu i GSM folosit care oricum este î n permanenta a ctivat la un
telefon mobil funcț ional. Un alt avanta j ar fi faptul ca tria ngularea î ncurajeaz ă acurateț ea localizării
mai ales că î n cele mai multe ora șe densit atea de antene GSM este din ce în ce mai crescută , lucru
ce descre ște marja de eroare.

Figura 5. 5 Serviciul de localizare pe hartă

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

57

Se observ ă butonul de localiz are din partea dreapă -sus . La apelarea acestuia , î n figura 5.5.1.1 se
observă apariția unui semnal în partea de jos a ecranului , care atenționează utilizatorul că nu poate
folosi funcția de geolocalizare dacă acesta nu o activează . Atenționare a apare doar în cazul
apiurilor mai mari de 23 datorită noii configurații a sdk -ului android , în caz contrar , serviciul de
localizare se va activa automat .

Imaginea din centru din cadrul aceleași figuri prezintă ultima locație , bazată pe serviciul net work
și în urmă cu cât timp a fost înregistrată în cache . Dacă ultima locație depășește două minute atunci
se va căuta un punct de reper nou . În cazul figurii anterioare s -a găsit o nouă locație gps imediat
după activarea serviciului .

Următoarea figură prezintă Serviciul de înregistrare al traseului parcurs .

Figura 5. 6 Serviciul de înregistrare și stocare a înregistrării

Cât timp butonul din dreapta nu se află în starea default , ca în figura 5.5.1.1 , serviciul de
înregistrare a traseului va fi activat .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

58

Serviciul este conceput în clasa TrackerService și are în vedere :

➢ Verifică dacă există un traseu terminat , înregis trat pe fundal și reținut în LogHelper .
➢ Obține referință la managerul de Locație , la managerul de Senzori , la statutul sistemului
de localizare , verifică apoi dacă utilizatorul a întrerupt localizarea din setări.
➢ Preia ultima locație și adaugă un punct pe hartă . Această acțiune are loc la fiecare 2
secunde. De asemenea timpul maxim de activitate continuă a serviciului este de 8 ore ,
pentru a împiedica consumul bateriei dacă utilizatorul uită să întrerupă serviciul.
➢ Pentru memorarea numărului de pași t elefonul trebuie să fie conceput cu un senzor de
pedometru , altfel numărul pașilor va fi setat la -1.
➢ Statistica în timp real va apărea la notificări prin clasa NotificationHelper care va fi detal iată
ulterior .
➢ La întreruperea Serviciului se va opri c ronometrul , se va salva timpul parcurs și data
curentă , se va salva harta într -un fișier temporar , în caz de este ucisă activitatea și se va
modifica notificarea . Butonul va apărea sub forma altor 3 bu toane cu rol de a salva traseul ,
de a-l șterge sau de a restrânge butoanele anterioare .

Figura 5. 7 Ștergerea înregistrării

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

59

Se observă că a tunci când se utilizează numai Furnizorul network , se folosește mai întâi căutarea
AGPS iar furnizorul de rețea utilizează rezultatele și obține precizie de aproximativ 6-10 metri .
Atunci când se utilizează doar sateliții GPS , atunci se folosește căutarea GPS, iar furnizorul de
rețea utilizează rezultatele și obține o precizie mai mică de 3 metri .

5.5.2 Tabul cu traseele înregistrate

Acest ecran este tot un fragment iar dac ă nu este detectat niciun fișier în directorul /tracks, se va
prelua imaginea din figura 5.5.2.1 .

Figura 5. 8 Interfața inițială pentru traseele înregistrate

Traseele se vor salva în memoria internă a telefonului , mai exact în fișierul
/com.example.myfittracker/files/tracks .

➢ Pentru statistica traseului am creat în clasa Track un constructor de forma aceasta :

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

60

➢ Traseul înregistrat este convertit apoi într -un JSON

➢ Apoi se scrie în memoria telefonului

➢ După ce s -a realizat scrierea în memorie , utilizatorului îi ap ar traseele înregistrare, conform
figurii 5.5.2.2 , ecranul central . Traseele sunt memorate într -un vector și sunt afișate în
ordinea înregistrării , c el mai nou fiind primul. Am apelat funcția de sortare a c âte două
fișiere , după ce se verifică existența acestora , în clasa StorageHelper , iar cel mai recent
va fi cel cu indexul mai mare.

Figura 5. 9 Interfața pentru traseele înregistrate

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

61

5.5.3 Tabul cu setul de exerciții

Fiecare prog ram este creat dintr -o serie de exercitii simple sau complexe , potrivite atât pentru
începatori cât și pentru avansați , iar fiecare postur ă este exemplificat ă și explicată într -un video.

Aplicaț ia dispune de funcția cronometru, astfel î ncât utilizatorii să se poată ghida pent ru a realiza
toate exercitiile î ntr-un mod corect, într-un interval de timp alocat. Practicarea cu regularitate a
exercitiilor va ajuta la îmbunatăț irea flexibilit ății, tonifierea muscula turii ș i la reducerea stresului.

Pentru preluarea listei de exercitii din baza de date am folosit retrofit2 , iar imaginile
corespunzătoare categoriei de mușchi lucrate sunt preluate din baza de date locală .

Figura 5. 10 Tabul și activitatea cu exerciții

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

62

5.6 Serviciul din fundal

Dacă se dorește întreruperea serviciului , în ecranul cu notificări vor surveni câteva schimbări . Prin
urmare se va modifica culoarea butonului ce indică inregistrarea , va fi afișat timpu l alocat traseului
incheiat și distanța parcursă .

Figura 5. 11 Serviciul de fundal

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

63

5.7 Ecranul cu notificări

Serviciul de înregistrare a traseului funcționează , așa cum este prezentat în figura 5.7.1 și ca
notificare , permițând utilizatorului să verifice ocazional traseul , fără a fi necesară deblocarea
telefonului .

La apăsarea acestei notificări , se va deschide ecranul cu harta , pentru a putea urmări progresul .

Figura 5. 12 Ecranul cu notificări

5.8 Ecranul SideNavBar
Având în vedere faptul că serverul administrat este local , trebuie utilizată aceeași sursă de internet
atât pentru server cât și pentru telefon , prin urmare cererile necesită modificarea adresei IP .

Pentru accesarea avatarului corespunzător fiecărui utilizator trebuie să fie inițiată o cerere către
server , care să preia imaginea din api .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

64

Mai jos este codul p entru afișarea numelui , a greutății și a înălțimii .

Figura 5. 13 SideNavBar pentru doi utilizatori de test

În partea inferioară există două butoane meniu . Primul permite editarea profilului și recalculează
Indicele de masă corporal astfel încât să se poată atribui și un nou avatar.
Al doilea buton elimină tokenul de autentificare și revine la sesiunea de login .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

65

5.9 Ecranele pentru editarea profilului

Aceste ecrane sunt integrate într -un layout general de editare a profilului și fiecare acțiune dintr -o
pagină este reprezentată printr -o funcție din cadrul clasei java EditProfile.

Pentru fiecare pagină există o funcție principală care va fi apelată printr -un buton de tip
imageView , așa cum se poate observa și in figurile următoare .

Figura 5. 14 Înregistrarea profilului fizic

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

66

În figura 5.14 este afi șată prima pagină reprezentat ă de funcția nextPage1() din codul sursă anterior .
Aceasta prezintă un datePicker pentru a selecta data nașterii utilizatorului , două radio buttons
pentru selectarea genului și două câmpuri de scriere de tip întreg care respec tă următoarele reguli:
➢ pentru datepicker anul nașterii trebuie sa fie cu 14 mai mic decât anul curent , întrucât
persoanelor în creștere nu le sunt recomandate majoritatea exercițiilor din program : year =
c.get(Calendar.YEAR) -14;
➢ pentru radiobutton se al ege una din cele două variante corespunzătoare
➢ pentru punctul 3 există două cazuri posibile de eroare , dacă utilizatorul a introdus un număr
care nu se află în intervalul [50 , 250] sau dacă utilizatorul a omis acel câmp înainte de a
accesa butonul de tr ecere la următoarea pagină
➢ aceleași reguli se aplică și la punctul 4 dar de data aceasta intervalul este [35 , 300]

După finalizarea primei pagini din formular se trece la cea de -a doua funcție , destul de simplist ă ,
formată dintr -un grup de 5 radiobuttons , singurul caz de eroare fiind neselectarea niciunui
radiobutton înainte de a apela butonul de trecere la următoarea pagină.
Același algoritm se aplică și în cazul paginii 3 , în care sunt prezentate 4 radiobuttons pentru setarea
scopului utilizării aplicației.

Figura 5. 15 Înregistrarea activității pag 2 și 3

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

67

Ajuns la pagina 4 , utilizatorul are de ales între 2 radiobuttons cu valoare booleană , astfel, primul
dintre ele are setată valoarea 0 iar cel de -al doilea valoarea 1. Fiec ărei valori îi sunt atribuite
anumite exerciții setate după dificultate . Dacă utilizatorul bifează căsuța Yes îi vor fi atribuite
exerciții cu un grad din ce în ce mai mare de dificultate , iar pe viitor voi realiza un top al celor mai
activi utilizatori dacă aceștia s -au declarat a fi competitivi.

Ultima pagină are ca scop alegerea echipamentului , pentru a nu i se introduce utilizatorului,
exerciții cu anumite echipamente pe care acesta nu le deține .

Figura 5. 16 Înregistrarea activit ății pag 4 și 5

După finalizarea completării profilului , se va genera un jeton de autentificare , iar opțiunile vor fi
trimise către server cu ajutorul adnotărilor puse la dispoziție de Retrofit2 , despre care am vorbit în
capitolul Tehnologii folosite .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

68

6. Proiectare în detaliu ș i imprementare

În urma prezentării aplicației MyFitTracker , capitolul 6 își propune să urmeze , așa cum este firesc,
o prezentare a arhitecturii platformei precum și caracteristicile tehnice ale aplicației client.

6.1 Arhitectura Platformei

Request Conectare

RequestAck Conectare
Date Query
Rezultat
Rezultat Rezultat
Request Deconectare

RequestAck Deconectare

User Front -end Back -end Baza de date
(Android Studio) (PHP – Laravel) (MySql)

Figura 6 .1 Perspectiva structurală a aplicației

Aplicația a fost dezvoltată după modelul MVC , prescurtarea de la Model View Controller.

➢ Modelul este partea care controleaz ă operațiunile de logică iar clasele integrate în proiect
care se încadrează în această categorie sunt cele pentru gener area jetonului de autentificare ,
pentru serviciile de logare și înregistrare , pentru preluarea profilului utilizatorului , a
exerciții lor fizice și a seriilor de exerciții din baza de date .
➢ View -ul este interfața ce interacționează cu utilizatorul .Prin acesta se introduc informațiile
de logare , de înregistrare , informațiile profilului și se afișează exercițiile .
➢ Controllerul este ele mentul care permite accesul la aplicație , manipulând rute , metode sau
clase. Acesta are rol în a diversifica conținutul .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

69

6.2 Serviciul Web

Serviciul web este scris in PHP 7 și este de tip RESTful . REST este prescurtarea de la
Representational State Transfer . Baza de date pentru utilizatori , de exemplu , este gestionată de
un serviciu web. Acesta utilizează o hipermedie personalizată bazată pe JSON, pentru care se
atribuie mimetype aplicație /json + userdb . Client ul și serverul au fost programați pentru a
înțelege acest format, dar nu știu nimic unul despre altul . Serverul returnează resurse pe baza
unor cereri efectuate pentru anumite adrese URL.

Am configurat apoi fișierul htaccess al modulului Apache pentru o scriere eficientă a ser viciului
web . În acest scop . am activat mo dulul de rescriere ,care are două părți. Prima precizează că dacă
numele fișierului solicitat este un director ( -d) sau un fișier ( -f), rescrierea nu va avea loc . Toate
celelalte cereri sunt transmise către index.php.

Scopul acestei rescrier i este de a prelua de pe server un fișier existent, fără interferențe. Dacă prima
regulă nu ar exista , fiecare solicitare de fișier e (de exemplu imagini ) ar merge la index.php și ar
produce probleme mari de performanță.

Figura 6 .2 Modul de Rescriere – activare

Utimul bloc are rolul de a obține un header de autorizație în momentul unei solicitări de login .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

70

6.3 Nivelul de date

Acest subcapitol face referire la proiectarea bazei de date a aplicației .Pentru dezvoltarea aplicaț iei
am construit un API care interoghează datele și le transmite c ătre frontend. Aceste date sunt
transmise prin rute în format JSON preluate de catre android studio care va apela ruta, va decodifica
și utiliza mai departe datele. Api-ul este realizat in PHP cu ajutorului frameworkului LARAVEL.

Totalitatea informațiilor referitoare la aplicația MyFitTracker sunt stocate în o bază de date MySql
a cărei diagramă UML este prezentată în figura 6. 3.
Figura 6. 3 Diagrama bazei de date

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

71

După ce un utilizator se înregistrează și își completează profilul , în care menționează activitatea ,
caracteristicile fizice , precum și aparatele de care dispune pentru realizarea exercițiilor, se va
adăuga o nouă înregistrare în tabela User .

Mai jos este prezentat procesul de trasnfer al migrărilor din myfittracker -api în baza de date

6.4 Aplicația client

În faza curentă , aplicația este dezvoltată pe localhost, telefonul fiind cone ctat la același network
ca și serverul , adică laptopul personal . Ulterior, API -ul va fi urcat pe un server iar utilizatorul va
comunica cu acesta folosind datele mobile. Cerințele minime , optime pentr u utilizarea laptopului
ca server local sunt 4GB RAM , 10GB ROM și un proce sor dual core de 2 Ghz , iar laptopul
dispune de 16GB RAM , și un procesor i7 6700 de 2.6 Ghz .

În fișierul manifest am adăugat următoarele permisiuni pentru
➢ accesul la conexiunea de internet locală
➢ accesul la conexiunea wifi
➢ accesul la internet

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

72

➢ accesul la ultima locație memorată (benefică din punct de vedere al consumului
bateriei )
➢ accesul la locația curentă ( este necesară folosirea unui locationListener )
➢ permisiunea de a încarca fișierele hartă
➢ permisiunea de a accesa fiși erele scrise anterior

Pentru integrarea MapView -ului OSMDroid în aplicație a fost necesar ă adăugarea codului următor
în fișierul build.gradle :

Pentru o performan ță mai bună , harta vizualizată se stochează în memoria internă a telefonului ,
mai exact în memoria cache . Acest lucru scade și consumul datelor mobile , iar memoria ocupată
se rezumă la maxim 10 Mb pentru harta județului București , de exemplu.

Un lucru important pe care aplicația îl are în vedere este să ofere un anumit nivel de serviciu de
localizare , chiar și în situați a în care un utilizator are cel mai slab dispozitiv și cel mai slab serviciu
de rețea. În cazul MyFitTracker se va solicita prima dată furnizorul Network deoarece funcționează
pe toate dispozitivele mobile iar locația va fi confirmată într -un timp foarte scurt . Pe lângă asta ,
acuratețea este suficientă pentru un traseu de alergare .

În cadrul aplicației s -au urmări t citirile de la se nzorul de gravitate al dispozitiv ului pentru a
deduce mișcări d e utilizator complexe, de exemplu tremurul pentru determinarea unui pas . Tot
aici s -a folosit și senzorul câmpului geomagnetic și acceler ometru pentru a raporta busola .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

73

Acest proiect se baz ează pe două mari categorii de senzori:
➢ Senzori de mișcare
Acești senzori măsoară forțele de accelerare și forțe de rotație de -a lungul a trei axe. Această
categorie include accelerometre, senzori de gravitație, giroscoape și senzori de vector de
rotație.

➢ Senzori de poziție
Acești senzori măsoară poziția fizică a unui dispozitiv. Această categorie include senzori de
orientare și magnetometre.

Pentru a accesa senzor ii disponibil i pe dispozitiv și pentru a dobândi date brute de la aceștia, se
utilizează framework -ul Android pentru senzori . Acesta oferă mai m ulte clase și interfețe care
ajută la efectua rea unei mari varietăți de sarcini legate de senzor. Aceste sarcini sunt :
➢ Determină ce senzori sunt disponibil i pe un dispozitiv.
➢ Se determină capacitățil e individuale ale senzorilor , cum ar fi raza de acoperire ,
produ cătorul, consumul bateriei și rezoluți a.
➢ Dobândirea datelor brute
➢ Înregistrarea sau neînregistrarea unui tip de listener de eveniment senzor care
monitorizează schimbarea senzorului .

O pa rte din activitățile utilizatorului , sunt stocate în baza de date integrată în telefon iar o alta
necesită permisiunea dispozitivul pentru operații CRUD asupra fișierelor locale . Pentru a satisface
cerința de stocare a datelor am folosit SQLite , din cad rul Android .

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

74

7. Concluzii și posibilități de dezvoltare

Lucrarea de față prezintă o aplicație ce are un scop de actualitate relevat , prin urm ărirea un ui stil
de via ță sănătos î n ciuda stimulilor nocivi prezenți în societatea contemporană.

Implementarea aplicației poate fi uș or de digerat la orice v ârstă, fiind o aplicație cu o interfață
prietenoasă pentru utilizatori și cu funcț ii clare și ușor de înț eles. Tocmai din acest moti v succesul
ei pe piață ar trebui sa fie unul asigurat.

Aplica ția este structurată î n jurul limbajulu i Android ceea ce o face fiabilă pentru majoritatea
dispozitivelor inteligente, pe lâ ngă aceasta , aplicația face legă tura cu serverul cu ajutorul
limbajului PHP, limbaj predominant în domeniul urmărit.

Pentru a putea duce aplicația în punctul actual, a trebuit să aplic tehnologii noi învățate în facultate
dintre care enumăr: Framework -ul Laravel – ce faciliteaz ă o comunicare mai bună între baza de
date propriu -zisă și aplicația, Autentificarea JWT – prin care se genereaz ă un jeton ce face diferența
dintre un utilizator real și un bot ; tot autentificarea JWT ajută și la logarea automată fară a
reintroduce credințialele.

Deși am aplicat multe lucruri învă țate în facultate, am făcut și studiu suplimentar pentru învățarea
de tehnici noi, ce m-au ajutat, dintre care enumăr : OSMDroid – o componentă ce încărcă harta de
pe site -ul oficial Open Street Maps , Retrofit2 pentru transformarea HTTP API în interfață Jav a,
JSON pentru conversia obiectelor , s erviciul de localizare geografic ă și utilizarea senzorilor de
mișcare .

Concluzion ând , aplicația MyFitTracker își atinge scopul prin diferențele clare față de competi ța
din pia ță și aici amintim prezența ava tarului ce se apropie de realitate prin customizarea lui cu
datele introdu se și personalizarea exercițiilor în funcție de profilul completat .
Posibilitatea de dezvoltare a aplicației este asigurată de tranziția către un server hostat care să ofere
posiblitea îmbu nătățirii aplicației prin update -uri constante dar și șansa ca utilizatorii să comunice
între ei. Pentru a facilita această funcționalitate, în cadrul aplicației există întrebarea “Ești o fire
competitivă ?”, care mai departe împarte utilizatorii pe categor ii. Cei cu o înclinație spre competiție
vor fi introduși într -un top de unde vor putea vedea evoluțiile celorlanți utilizatori, vor putea
comunica cu ei și vor putea face exerciții speciale împreună.
În viitor în structura aplicației se vor putea adauga noi tab -uri ce vor avea ca scop oferirea de sfaturi
pentru nutriție si dietă zilnică, ele vor ajuta utilizatorii cu idei legate de alimentație pentru a susține
exercițiile din cadrul aplicației. Pe lângă aceasta se poate adăuga un tab de sugestii în care
utilizatorii pot sugera diferite exerciții sau schimbări de funcționalități și grafică.

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

75

8. Bibliografie

[1] (accesat ultima oară la 20 martie 2017 ) Raport pentru rata obezității în SUA [Online]
https://www.agerpres.ro/sanatate/2014/09/04/rata -obezitatii -adultilor -din-sua-este-intolerabil -de-
ridicata -raport –20-57-31

[2] (accesat ultima oară la 20 martie 2017 ) Rata obezi tății la români [Online]
http://www.mediaf ax.ro/stiinta -sanatate/studiu -obezitatea -in-romania -mai-frecventa -la-barbati –
pe-masura -ce-avanseaza -in-varsta -14541218

[3] (accesat ultima oară la 12 martie 2017 ) Raluca Abrihan , Top aplicații descărcate [Online]
http://www.startupcafe.ro/stiri -hitech -20750770 -topul -celor -mai-descarcate -aplicatii.htm

[4] (accesat ultima oară la 2 decembrie 2016 ) Site oficial de bodybuiding [Online]
https://www.bodybuilding.com/category/workouts

[5] (accesat ultima oară la 18 februarie 2017 ) Google`s Android OS : Past, Present and Future
[Online]
http://www.phonearena.com/news/Googles -Android -OS-Past-Present -and-Future_id21273

[6] (accesat ultima oară la 21 februarie 2017 ) Jay Alabaster , Android found er: We aimed to
make a camera OS [Online]
http://www.pcworld.com/article/2034723/android -founder -we-aimed -to-make -a-camera -os.html

[7] (accesat ulti ma oară la 11 martie 2017 ) Carly Page , Primul prototip Android [Online]
https://www.theinquirer.net/inquirer/news/2170500/googles -andro id-prototype -smartphone –
blackberry -rip

[8] Reto Meier, 2010, Professional Android 2 Application Development, Wiley Publishing,
Capitolele 14 si 15

[9] (accesat ultima oară la 14 februarie 2017 ) Techopedia [Online]
https://www.techopedia.com/definition/25106/android -operating -system

[10] Miller G., Stroud A., 2012, Professional Android Sensor Programming, Wrox , Capitolul 1

[11] (accesat ultima oară la 18 martie 2017 ) Android Developer [Online]
https://developer.android.com/about/dashboards/index.html

Proiect de Diplomă
PHP și Java în implementarea unei aplicații Android de tracking și dezvoltare fizică
___________________ _______________________________________________________________________________

76

[12] (accesat ultima oară la 3 mai 2017 ) OpenStreetMap [Online]
https://www.openstreetmap.org/#map=4/37.20/0.83

[13] (accesat ultima oară la 6 decembrie 2016 ) Documentație GPX [Online]
http://www.topografix.com/gpx_for_developers.asp

[14] James D. Foley (1995). Computer Graphics: Principles and Practice. Addison -Wesley
Professional. Capitolul 1.

[15] (accesat ultima oară la 10 mai 2016 ) Tutorial și documentație JSON [Online]
http://beginnersbook.com/2015/04/json -tutorial/

Similar Posts