Proiect de Diplomă [628737]

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 ă ………………………………………………………………. …………………..
1.2 Scopul proiectului ………………………………………………………………………. ……………

2. Noțiuni preliminare …………. ……………………………………………………………………………………
2.1 Platforma Android …………………………………………………………………………………….
2.1.1 Generalități …………………………………………………………………………………
2.1.2 Istoric…………………………………………………………………………………………
2.1.3 Sistemul de operare Android ……… …………………………………………………
2.1.4 Platforma Hardware …………………………………………………………………….
2.2 Componentele aplicați ei android …………….. …….. …………………………. ……………..
2.2.1 Clase de baza ………………………………………………………… …………… ………
2.2.2 Fisierul Manifest ……………………………………………… …………… ……………
2.2.3 Surse ex terne …………………………………………………… …………… ……………

3. Tehnologii folosite
3.1 Servicii de localizare geografică
3.1.1 GPS Provider
3.1.2 Determinarea pozitiei unui telefon GPX exchange format
3.1.3 Location Listener
3.2 Android Network Provider
3.2.1 Conexiune Wifi
3.2.2 Conexiune Network
3.3 Sensor Manager
3.4 OSMDroid framework de mapare
3.5 Retrofit
3.6 Laravel framework

4. Cerintele aplicatiei
4.1 Caracteristici func ționale
4.2 Caracteristici non -functionale
4.3 Specificatii Dispozitiv
4.4 Factorul Uman
4.5 Cazuri de utilizare

5. Descrierea aplicației
5.1 Aplicatia client

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

4

5.2 Interfața grafică de înregistrare a aplicației
5.3 Interfața de logare
5.4 Ecranul cu informații despre accesul la locație și internet
5.5 Ecranul principal
5.5.1 Tabul cu harta
5.5.2 Tabul cu traseele înregistrate
5.5.3 Tabul cu setul de exerciții zilnice
5.6 Serviciul din fundal
5.7 Ecranul cu notificări
5.8 Ecranul SideNavBar

6. Proiectare î n detaliu și imprementare
6.1 Arhitectura Platformei
6.2 Conectarea aplicației Android la Xampp
6.3 Serviciul Web
6.4 Aplicația client

7. Concluzii și posibilități de dezvoltare

8. Bilbiografie

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

5

Listă de figuri

Figura 2.1. 3.1 Structura Android OS ……………………………………………………………………. …………..1
Figura 2.1.3 .2 – Ierarhia versiunilor Android …………. ………………………. …………………………………1
Figura 2.1.3.3 – Distribuția API -urilor Android …………………………………………………………. ………1
Figura 2.1.4.1 Structură hardware Android ……………………………………………………………… …………
Figura 3.6. 1 – Dependențe Retrofit2 din MyFitTracker ………………………………………………………..

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 generalități despre platforma
Android , despre structura aplicațiilor ce rulează pe a ceastă platformă.

3. Tehnologii folosite
În acest capitol sunt descrise tehnologiile folosite în implementarea aplicaț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ă pe 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 s fâ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 obezi. Î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 . Conform 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 (Qiho o 360)
7. Skype (Microsoft)
8. YouTube (Google)
9. UC Browser (Alibaba Group)
10. Snapchat (SnapChat)

➢ Topul celor mai descarcate 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 la 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.
1.2 Scopul proiectului

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

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

9

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 utilizatorului. 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 pentru 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 telefonului , 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 urmare 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 .

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

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

10

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ă Dalv ik.

O aplicație Android este 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țe le și componentele programului î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 Pl atforma 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 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ă

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

11

în valoare toate resursele dispozitivului ș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 kerne l-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 dispozit ive 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 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.

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

12

Î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 , ochelari 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 f acem 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ă denumirea 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. 3.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ă
cum 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ă benefici eze 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 care expun
capacitățile hardware ale dispozitivului la nivelul superior , frameworkul Java API . HAL
este format din module de bibliotecă multiple, dintre care fiecare implemen tează 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 AP I 21) sau mai mare,
fiecare ap licaț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 disp ozitive 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

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

15

necesită biblioteci scrise în C și C ++. Platforma Android oferă Java API -uri pentru a expune
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 gestionează 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 aplicaț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ă

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

16

ci se poate invoca orice altă aplicație SMS deja instalat ă pentru a transmite un mesaj către
destinatar ul specificat.
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.1.3 .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 Googl e Maps .

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

17

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 siste mului.

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ă versiunilor anterioare, de 480×800 pixeli.

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 de
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 dus 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 ecrane mai mari
și au oferit suport pentru proce soarele 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
Androi d Beam.

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

18

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 profi luri 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.

Android 6.0 Marshmallow
Android Marshmallow aduce îmbunătățirea durate i 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
multitasking.

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ță , un filtru de lumină albastră), modul Daydream VR,
comenzi rapide și multe altele.

Android vine cu un magazin onlin e 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ă posi bilitatea de a
utiliza o aplicație universală , întrucât nu poate fi utilizată pe toate platformele .

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

19

În figura 2.1.3.3 putem urmări distribuț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.1.3.3 – Distribuția API -urilor Android

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

20

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 atingere simultană (multitouch) pe ecran poate fi activată

Figura 2.1.4.1 Structur ă hardware Android

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

21

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.

În lista de dispozitive fizice care furniz ează 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ă m ai 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 aspect 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 senzorilor 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 dispozitiv Android,
producătorul poate defini propriul tip temporar pe ntru 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.

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

22

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 acc elerometrul 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.

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 care 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.

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

23

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 securizează accesul la baza de date.

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, sis temul 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
alte 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 trec e la o altă aplicație. În plus, o
componentă se poate lega de un ser viciu pentru a interacț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 f irul UI , stagnează
receptivitatea cu utilizatorul , întrucât încărcatoarele pot rula pe mai multe fire de execuție .

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

24

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 .

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, toate 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țin e unei component e specifice , iar acest lucru se poate realiza în fișierul 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 decla rații informează sistemul Android cu privire la
componente și condițiile în care acestea 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ă permisiunile pe care alții trebuie să le aibă pentru a interacționa cu componentele
aplicației.
– Enumeră clasele Intrument care deter mină 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 .

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

25

– Declară nivelul minim al API -ului Android pe care îl necesită aplicația.
– Enumeră bibliotecile la care aplicația trebuie să se conecteze .
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 pe ntru a specifica nivelul
API, nu numărul de versiune a SDK (kit de dezvoltare software) 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://schemas.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" />

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

26

<application>
Acest element conține subelementele care declară fiecare dintre
componentele aplicației și are atribute care pot afecta toate componentele. Multe
dintre aceste atribute (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 rescrise de
componente.
Acest nod poate conține :
<activity>
<activity -alias>
<meta -data>
<service>
<receiver>
<pro vider>
<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 l e care o activitate, un serviciu, sau rece ptor de
difuzare poate răspunde . Un filtru de intenție declară capac ităț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 primi re a intențiil or 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>

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

27

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

<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ă
___________________ _______________________________________________________________________________

28

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. Utiliza rea
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 d iferite ș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 imgine .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 m ai 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 pot 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 dispozitivului
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 orientar ea 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 orientarea, 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ă
___________________ _______________________________________________________________________________

29

Resurse color
Un ColorStateList 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 care 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 pur și simplu va fi ales
primul element care îndeplinește criteriile minime cerute .

Pentru definirea reusrsei color trebuie să se aibă în vedere tagul <color> , 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ă
___________________ _______________________________________________________________________________

30

➢ 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ă ima gine 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 valoare 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 ad augă 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ă
___________________ _______________________________________________________________________________

31

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" andr oid:duration="700" />
<item android:drawable="@drawable/persoana2" android:duration="700" />
<item android:drawable="@drawable/persoana3" android:duration="700" />
</animation -list>

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

32

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 determina 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 apel area 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ă proximi tate (spe cificate printr -o rază, în metri) a unei anumite latitudini sau
longitudini .

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 furniz a î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, getCurrentPosition() încearcă să răspundă cât mai repede posibil , cu un
rezultat re dus de precizie și este util doar dacă se solicită un răspuns rapid , indiferent de precizi e.
La dispozitivele cu GPS integ rat , poate dura un minut sau mai mult pentru a obține o localizare
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 .

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

33

Î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 actualizarea 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 est e 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 descrise
ș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.

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

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

34

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 android.permission.ACCESS_COARSE_LOCATION , sau
android.permission.ACCESS_FINE_LOCATION pentru o acuratețe mai mare .

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:

➢ Utilizează cipul GPS din dispozitiv, pre cum ș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ătoarele caracteristici:

➢ Blocarea este foarte rapidă și nu necesită activarea dispozitivului GPS pe dispozitiv
➢ Nu necesită putere suplimentară , prin urmare nu este consumator de baterie

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

35

➢ Are o precizie foarte scăzută; Uneori pot avea o precizie mai bună în zonele populate și
bine mapate care a u multe p uncte de acces WiFi și în care persoanele își împărtășesc locația
pe Google

3.1.5 GPX

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 sunt bazate pe
date Google Maps. API – ul se ocupă în mod automat accesul la serverele Google Maps, descărcarea
de date, afișare hartă și atingeți gesturi pe hartă. Puteți utiliza , de asemenea apeluri API pentru a
adăuga marcatori, poligoane și su prapuneri, și pentru a schimba punctul de vedere al utilizatorului
o anumită zonă a hărții.

O MapView afișează o hartă cu datele obținute de la serviciul OSMDroid . În cazul în care
se focalizează o MapView, acesta va capta atinge rile și va face zoom pe hartă automat. Acesta
prevede toate elementele de interfață cu utilizatorul necesare pentru a controla harta.

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.

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

36

Senzori pe bază de hardware sunt componente fizice construite într -un telefon sau o
tabletă. Ei obțin datele lor prin măsurarea directă proprietăți de mediu specifice, cum a r 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țin 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 tele foane ș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 exemplu, 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
accelerometru pentru a determina orientarea unui dispozitiv în cadru de referință aplicației.
Senzorul câmpului geomagnetic și accelerometru returnează o matrice multi -dimensională a
valorilor senzori lor pentru fiecare SensorEvent. De exemplu, senzorul de câmp geomagnetic
furnizează valori de intensitate a câmpului geomagnetic pentru fiecare dintre cele trei axe 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 permit 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 accelerometrul ui și ale giroscopului sunt întotdeauna bazate pe hardware.

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

37

Î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 împreună cu utilizatorul ) . În acest caz se monitorize ază
mișcarea î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 u nui 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 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
folosit cea mai nouă versiune , Retrofit 2 , ce are la bază rețeaua OkHttp .

Am folosit această bibliotecă deoarece serializează aut omat 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 dep endențe în fișierul build.grade :

Figura 3. 4.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ă
___________________ _______________________________________________________________________________

38

Utilizare Retrofit

Pentru a lucra cu Retrofit am folosit trei clase :
➢ Clasa Model 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 ajusta 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 speci fic.

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
manipula 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ă
___________________ _______________________________________________________________________________

39

➢ 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ă fiecare 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 utilizarea token –
ului.

3.5 Autentificare JWT

JSON Web Token (JWT ) transmite informații care pot fi verificate cu o semnătură digitală.
În fo rma 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

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

40

➢ Revendicările: Revendicările conțin orice informație care se dorește a fi semnată
➢ Semnătura JSON Web (JWS): Anteturile și revendicările semnate digital utilizând
algoritmul în specificat în antet

Antet și revendi că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 secu nde .

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 p entru generarea jetoanelor care sunt
trimise 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 acces ; a ceste modificări nu vor intra în vigoare

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

41

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 acc es sunt oricum de scurtă durată.

3.6 Laravel

Acest subcapitol își propune să descrie frameworkul Laravel , folosit pentru conectarea la
baza de date și gestionarea interogărilor (în engleză queriuri ) .

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 , SQLit e ș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 utiliza te de fiecare dată când se folosesc interogări prime sau constructori
de interogare .

Migr ări
Migrările sunt un fel de control al bazei de date, permițând modific area cu ușurință a
acesteia. Migr ările sunt, de obicei asociat e cu schema constructor Laravel .
Pentru a adăuga toate migrările în baza de date se deschide git în directorul api cu aplicația
și se introduc comenzile
php artisan key:generate , pentru generarea jetonului de autentificare

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();

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

42

Seeduri

Laravel include o metodă simplă de însăm ânțare a bazei de date cu date de testare folosind
clase seed . Toate clasele de seed sunt stocate în directorul database/seeds . 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 dep lin 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ă
___________________ _______________________________________________________________________________

43

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 program 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 utilizator ii 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 musculaturii ș i la
reducerea stresului.
O altă par ticularitate 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 memor ate în memoria 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ă
___________________ _______________________________________________________________________________

44

– 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
doreste sa il completeze
3. ( Optional ) Utilizatorul vizioneaza
simularea exercitiului
4. Utilizatorul își cronometrează
performanța și duce exercițiul la bun
sfârșit .

4.2 Cazuri de utilizare

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

45

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ătoare le 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 semna l 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 cadrul pro gramului AndroidStudio , MiFitTracker este compatibilă cu 81% din dispozitivele
ce rulează pe platforma Android.

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.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 celor două
câmpuri se va afișa un mesaj de eroare corespunzător , iar utilizatorul nu va înainta în aplicație .

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

46

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 eroare pe care un utilizator le poate întâmpina.

➢ Dacă utilizatorul introduce în primul câmp o adresă care nu r espectă formatul pentru email
sau nu are un cont înregistrat în prealabil , atunci se va afișa printr -un toast mesajul “This
email address is invalid”
➢ 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 .

Figura 5.2.1 – Interfața de logare

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

47

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.

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 cara ctere ș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 contul va
fi creat.

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

48

Figura 5.3.1 – Interfața de înregistrare

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ă acordul utilizatorului . În acest scop , am conceput un
view în care utilizatorului ii este explicată necesitatea acestora , iar dacă dec ide să refuze acordul ,
metoda va returna false și va împiedica folosirea serviciilor respective .

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

49

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

Figura 5.4 .1 – Interfața pentru accesarea permisiunilor

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 .

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

50

5.5.1 Tabul cu h arta

Aplicatia este conș tientă de locația utilizatorului datorită serviciului de localizare ce trimite
semnale ca tre 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 aproxi meaz ă locația curent ă(50-55m) in funcț ie de
locatie.

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 triangularea î 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.1.1 – Serviciul de localizare pe hartă

Se observ ă butonul de localizare 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

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

51

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
network și în urmă cu cât timp a fost înregistrată în cache . D acă 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.5 .1.2 – 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ă
___________________ _______________________________________________________________________________

52

Serviciul este conceput în clasa TrackerService și are în vedere :
➢ Verifică dacă există un traseu terminat , înregistrat pe fundal și reținut în LogHelper .
➢ Obține referință la managerul de Locație , la managerul de Senzori , la statutul sistemului
de local izare , 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 telefonul 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 l a notificări prin clasa NotificationHelper care va fi detal iată
ulterior .
➢ La întreruperea Serviciului se va opri cronometrul , 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.5 .1.3 – Ștergerea înregistrării

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

53

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.5.2.1 – 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 .

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

54

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

➢ 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 , cel 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.

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

55

Figura 5.5 .2.2 – Interfața pentru traseele înregistrate

5.5.3 Tabul cu setul de exerciții zilnice

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 c u
regularitate a exercitiilor va ajuta la îmbunatăț irea flexibilit ății, tonifierea musculaturii ș i la
reducerea stresului.
Pentru preluarea listei de exercitii din baza de date am folosit retrofit2 , iar imaginile
corespunzătoare categoriei de mușchi lucr ate

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

56

Figura 5. 5.3.1 – Tabul și activitatea cu exerciții

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 timpul
alocat traseului incheiat și distanța parcursă .

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

57

Figura 5.6. 1 – Serviciul de fundal

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
progre sul .

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

58

Figura 5.7 .1 – 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 , ca re să preia imaginea din api .
Mai jos este codul p entru afișarea numelui , a greutății și a înălțimii .

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

59

Figura 5. 8.1 – SideNavBar pentru doi utilizatori

Î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 .

5.9 Ecranele pentru editarea profilului

Aceste ecrane sunt integrate într -un layout

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

60

Figura 5. 9.1 – Înregistrarea profilului fizic

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

61

Figura 5.9 .2 – Înregistrarea activității pag 2 și 3

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

62

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

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

63

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.1 – Perspectiva struc turală 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 generarea jetonului de autentificare , pentru
serviciile de logare și înregistrare , pentru preluarea profilului utilizatorului , a exercițiilor 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 elementul care permite accesul la aplicație , manipulând rute , metode sau
clase. Acesta are rol în a di versifica conținutul .

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

64

6.2 Serviciul Web

Am configurat fișierul htaccess al modulului Apache pentru o scriere eficientă a serviciului
web . În acest scop . am activat modulul de rescriere . Rescrierea are două părți. Prima precizează
că dacă numel e 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.1 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ă
___________________ _______________________________________________________________________________

65

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 frameworkulu i
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ă
___________________ _______________________________________________________________________________

66

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
➢ acces ul la internet

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

67

➢ 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șierele 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 import ant 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ă furni zorul 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 senzorul 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ă
___________________ _______________________________________________________________________________

68

Acest proiect se bazează 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 ve ctor 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 dispoz itiv.
➢ Se determină capacitățile 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 .

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

69

7. Concluzii și posibilități de dezvoltare

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

70

8. Bibliografie

[1] https://www.agerpres.ro/sanatate/2014/09/04/rata -obezitatii -adultilor -din-sua-este -intolerabil -de-
ridicata -raport –20-57-31
accesat ultima oară la 20 martie 2017

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

[3] http://www.startupcafe.ro/stiri -hitech -20750770 -topul -celor -mai-descarcate -aplicatii.htm
accesat ultima oară la 12 martie 2017

[4] https://www.bodybuilding.com/category/workouts
accesat ultima oară la 2 decembrie 2016

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

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

[7] Carly Page , Primul prototip Android
https://www.theinquirer.net/inquirer/news/2170500/googles -android -prototype -smartphone –
blackberry -rip
accesat ultima oară la 11 martie 2017

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

[9] Articol despre Sistemul de operare Android – generalități
https://www.techopedia.com/definition/25106/android -operating -system
accesat ultima oară la 14 februarie 2017

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

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

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

71

[12]
[13]
[14]
[15]
[16]

Similar Posts