41
SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ž D I N Zoran Turk RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA U TERETANI ZAVRŠNI RAD Varaždin, 2013.

RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

SVEUČILIŠTE U ZAGREBU

FAKULTET ORGANIZACIJE I INFORMATIKE

V A R A Ž D I N

Zoran Turk

RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA U TERETANI

ZAVRŠNI RAD

Varaždin, 2013.

Page 2: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

SVEUČILIŠTE U ZAGREBU

FAKULTET ORGANIZACIJE I INFORMATIKE

V A R A Ž D I N

Zoran Turk

Redoviti Student

Matični broj: 38148/09–R

Studij: Informacijski sustavi

RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA U TERETANI

ZAVRŠNI RAD

Mentor:

Tihomir Orehovački, mag. inf.

Varaždin, rujan 2013.

Page 3: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

I

Sadržaj:

1. Uvod ...................................................................................................................................... 1

2. Android ................................................................................................................................. 2

2.1. Arhitektura operacijskog sustava Andorid ..................................................................... 3

2.1.1. Aplikacijski okvir .................................................................................................... 5

2.1.2. Biblioteke ................................................................................................................ 5

2.1.3. Aplikacijski sloj ....................................................................................................... 6

3. Andorid okruženje ............................................................................................................... 7

3.1. Aktivnost ........................................................................................................................ 7

3.2. Servisi ........................................................................................................................... 10

3.3. Dobavljači sadržaja i primatelji prijenosa .................................................................... 12

3.4. Android resursi ............................................................................................................. 12

3.5. Namjera ........................................................................................................................ 15

3.6. SQLite ........................................................................................................................... 17

3.6.1. Cursor i Content Values ........................................................................................ 18

4. Praktični dio ....................................................................................................................... 20

4.1. Izvedba početnog sučelja .............................................................................................. 21

4.2. Izvedba komponente Vježbe ........................................................................................ 22

4.3. Izvedba komponente Trening ....................................................................................... 24

4.4. Izvedba komponente Dnevnik ...................................................................................... 28

4.5. Izvedba komponente Napredak .................................................................................... 30

4.6. Izvedba komponente Profil/Postavke ........................................................................... 32

4.7. Pregled i usporedba sličnih aplikacija .......................................................................... 33

5. Zaključak ............................................................................................................................ 36

Literatura ................................................................................................................................ 37

Page 4: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

1

1. Uvod

U današnje vrijeme tehnologije, većina ljudi ne može zamisliti dan proveden bez korištenja

mobilnog uređaja, pretraživanje Interneta, gledanja TV-a itd. Tehnologija je postala veliki dio

svakodnevice. Kako tehnologija napreduje iz dana u dan, mobilni uređaji su, u vrlo kratkom

vremenu, proširili svoje mogućnosti. Nekada su to bili uređaji korišteni samo za komunikaciju,

dok je danas svaki mobilni uređaj malo osobno računalo. Sve što je osobno računalo u

mogućnosti napraviti, može i današnji mobilni uređaj. Došlo je vrijeme takozvanih pametnih

mobitela (eng. smartphone). Većina današnjih mobilnih uređaja ima mogućnost pregledavanja

Interneta, fotografiranja, video poziva itd. Bitnu ulogu naglog razvoja mobilnih uređaja imao

je Android.

Android je operacijski sustav za mobilne uređaje. Upravo je on što omogućuje mobilnom

uređaju da postane „pametan“. Android je još uvijek relativno mlad u svijetu mobilnih uređaja,

ali je ubrzo postao najkorišteniji mobilni operacijski sustav (OS) današnjice (IDC,2013). U vrlo

kratkom roku je nadmašio konkurenciju poput Appelovog iPhone OS-a i Windows Mobile OS-

a. Za razliku od konkurencije, isti je otvoren, fleksibilan i besplatan. Drugi razlog zašto je

Android tako snažan na tržištu je Google Play. Isti prema novijim statistikama sadrži preko

milijun aplikacija i preko tri milijarde preuzimanja (Wolfe, 2013; Rowinski, 2013).

Uz Android operacijski sustav pojavio se i novi val programskih inženjera koji su htjeli iskoristi

popularnost Androida u svoje svrhe. Kao što je navedeno, Android je bio besplatan, pa tako i

razvoj aplikacija za njega. Tema rada je razvoj Android aplikacije koja omogućuje jednostavno

praćenje napredovanja u teretani, vizualno predstavljanje rezultata i pružanje upute pri

vježbanju. Dokazano je da korištenje dnevnika treninga i zapisivanje rezultata omogućuje

postizanje boljih rezultata (Henriques, 2012), a upravo je to svrha aplikacije koja je razvijena

za potrebe ovoga rada. U radu će biti opisane osnovne komponente aplikacije, opis svih

funkcionalnosti, te prikaz korisničkog sučelja. Na kraju će biti prikazana usporedba aplikacije

i njenih funkcionalnosti sa već postojećim, sličnim aplikacijama s Google Play-a.

Osim praktičnog primjera, u radu će se opisati osnove Android operacijskog sustava, temeljna

načela kako sustav funkcionira, te objasniti osnovne komponente Android programskog

okruženje koje su neophodne za razvoj mobilnih aplikacija.

Page 5: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

2

2. Android

Android je jedan od najpoznatijih te ujedno i vodeći operacijski sustav u svijetu mobilnih

uređaja, gdje njegova zastupljenost prelazi 50% cjelokupnoga tržišta (IDC,2013). Android je

2003. godine započeo kao projekt, dok ga je dvije godine poslije, pod vodstvom Android

Incorporation tvrtke, preuzeo Google. Andy Rubin, jedan od suosnivača tvrtke Android

Incorporation, opisuje Android operacijski sustav kao prvu istinski otvorenu i sveobuhvatnu

platformu za mobilne uređaje, softver koji je omogućio inovaciju mobilne tehnologije (Rubin,

2007). Ostali suosnivači Android Incorporation bili su Rich Miner, Nick Sears, Chris White.

Google je htio da Android operacijski sustav bude otvorenog kôda (eng. open-source), te je tako

većina Android programskog kôda izdana pod Apache License licencom. To je ujedno bio i

razlog zašto je Android postao jako popularan i mnoštvo kompanija poput Motorole i Sony-a

danas koriste Android kao operacijski sustav na svojim mobilnim uređajima (Paul, 2010).

Slika 1. prikazuje prvi mobilni uređaj s Android operacijskim sustavom, izdan 22. studenog

2008. godine pod nazivom HTC Dream G1.

Slika 2.1. HTC Dream G1

Page 6: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

3

Nakon prve komercijalne verzije (verzija 1.0), Android operacijski sustav je prolazio kroz

brojne nadogradnje koje su postupno poboljšavale operacijski sustav. Tablica 1.1. prikazuje

različite verzije Android operacijskog sustava. S obzirom da razlike između verzija nisu važne

za kontekst ovoga rada, iste neću biti razmatrane.

Verzija Kodno ime API Zastupljenost

1.6 Donut 4 0.1%

2.1 Eclair 7 1.2%

2.2 Froyo 8 2.5%

2.3 - 2.3.2 Gingerbread 9 0.1%

2.3.3 - 2.3.7 10 33.0%

3.2 Honeycomb 13 0.1%

4.0.3 - 4.0.4 Ice Cream Sandwich 15 22.5%

4.1.x Jelly Bean 16 34.0%

4.2.x 17 6.5%

Tablica 1Verzije Android operacijskog sustava

2.1. Arhitektura operacijskog sustava Andorid

Komponente operacijskog sustava Android dijele se u pet cjelina (Meier, 2010), kao što je

prikazano na slici 2.2.

Slika 2.2 Arhitektura Andorid operacijskog sustava (Prema: Meier 2010.)

Page 7: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

4

Linux jezgra (eng Kernel) - Osnovne usluge poput programske podrške hardvera, upravljanje

procesa i memorije, sigurnost, mreža obrađene su od strane Linux jezgre 2.6

Biblioteke (eng. Libraries) – Android obuhvaća razne C / C++ biblioteke poput libc i SSL1,

ali i:

- Biblioteke za reprodukciju video i audio zapisa,

- Biblioteke za upravljanjem prikaza na zaslonu (eng. surface manager),

- Biblioteke za grafiku koje sadrže SGL i OpenGL za prikaz 2D i 3D grafike,

- SQLite podršku

- SSL i WebKit za integriran internet pretraživač i sigurnost.

Android vrijeme izvršavanja (eng. Runtime) – Zaslužen je za pokretanje aplikacija. Zajedno

s bibliotekama čini osnovu aplikacijskog okvira, a sastoji je od:

- Dalvik virtualnog stroja koji omogućuje uređaju da može izvoditi višestruke instance

učinkovito.

- Osnovnih (eng. core) Android biblioteka koje osiguravaju većinu funkcionalnosti

Java programskog jezika.

Aplikacijski okvir (eng. Application Framework) – pruža potrebne klase za kreiranje

Android aplikacija.

Aplikacijski sloj (eng. Application layer) - Sve aplikacije, bile one implementirane u Android

operacijski sustav ili instalirane od strane korisnika, su izgrađene upravo pomoću ovog sloja.

1 SSL - Secure Sockets Layer - tehnologija koja omogućuje uspostavljanje sigurne veze izmeću servera i klijenta

Page 8: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

5

2.1.1. Aplikacijski okvir

Android arhitektura koristi koncepte ponovne uporabe, što nam omogućuje podjelu aktivnosti,

usluga i podataka s drugim aplikacijama. Sljedeće aplikacijske usluge su osnova svih Android

aplikacija, a ujedno pružaju okvir za izradu vlastitih aplikacija (Meier, 2010).

1. Activity Manager – upravljanje životnim ciklusom aplikacije kao što je prikazano na

slici 2.3.

2. View – koristi se za konstrukciju korisničkog sučelja aplikacije

3. Notification Manager – upravljanje obavijestima koje se prikazuju korisniku (npr.

dospijeće poruke).

4. Content Provider – omogućuje korištenje podataka od strane više aplikacija.

5. Resource Manager – omogućuje pohranu podataka aplikacije koje nisu programski kôd,

poput slika koje se koriste u sučelju aplikacije.

6. Package Manager – sadrži informacije o aplikacijama koje su instalirane na sustav.

7. Window manager – upravljanje aplikacijskim prozorima.

2.1.2. Biblioteke

Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović,

2010):

Surface manager – prikaz prozora za pojedine aplikacije.

OpenGL / ES – biblioteka koja služi za grafički 2D i 3D prikaz.

SGL (Scene Graph Library) – biblioteka na vrhu OpenGL biblioteke koja služi za

2D i 3D prikaz.

Media Framework – odgovoran za reproduciranje i rad s multimedijalnim

datotekama.

Free Type – biblioteka koja omogućuje prikaz teksta

SSL (Secure Socket Layer) – omogućuje sigurnosnu komunikaciju preko

Interneta.

SQLite – implementira bazu podataka (engl. Database Engine).

Page 9: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

6

WebKit – jezgra web preglednika koji podržava Javascript i ostale standarde na

mobilnom uređaju.

Libc (System C library) – implementacija standardnih sistemskih biblioteka

programskog jezika C (libc) izvedenih iz operativnog sustava BSD4.

2.1.3. Aplikacijski sloj

Prvi sloj, aplikacije se sastoji od nekoliko osnovnih komponenti, a to su (Wei-Meng, 2012.):

Home - prikazuje aplikacije, dodatke (engl. Widgets) i prečace. Također podržava

promjenu pozadine.

Phone - podržava klasične telefonske funkcije kao i kontrolu poziva, konferencijske

razgovore, sporedne usluge i jednostavnu integraciju s aplikacijom Contacts.

Web Browser - je pretraživač baziran na WebKitu sa svim njegovim

mogućnostima, podržava jezike HTML i XHTML.

Email - osigurava pristup poslužiteljima e-maila koji se obično mogu naći na

Internetu i podržava protokole POP3, IMAP4 i SMTP.

Media Player - omogućava upravljanje, uvoz i reprodukciju sadržaja kodiranih na

razne načine.

Ostale komponente koje se nalaze u ovom sloju su Alarm Clock, Calculator,

Calendar, Camera, Contacts, IM, MMS, Settings, Voice Dialer itd.

Page 10: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

7

3. Andorid okruženje

Android aplikacije su, uglavnom, napisane u Java programskom jeziku te u Eclipse IDE

okruženju. U radu će biti prikazane osnovne komponente jedne Andorid aplikacije, manifest

datoteka, Android resursi, namjera (eng. Intent) i SQLite programska podrška.

Postoje četiri osnovna tipa aplikacijskih komponenata, gdje svaka komponenta čini samostalnu

cjelinu i igra specifičnu ulogu u radu aplikacije. Svaka komponenta ima svoj ciklus trajanja,

proces pokretanja i prekidanja aplikacije. Te četiri komponente su (Marjanica, 2011):

Aktivnosti (eng. Activity)

Servisi (eng. Serivces)

Dobavljači sadržaja (eng. Content Provider)

Primatelji prijenosa (eng. Broadcast Receiver)

3.1. Aktivnost

Aktivnost je komponenta koja ima grafičko sučelje i omogućuje korisniku interakciju s

aplikacijom. Svaka aktivnost je proširenje Activity klase. Klasa Activity je osnovna klasa za

vizualne i interaktivne komponente svake aplikacije. Aplikacija se najčešće sastoji od nekoliko

takvih aktivnosti, gdje je jedna uvijek početna aktivnost (eng. Main Activity) koja se prezentira

pri pokretanju aplikacije. Ostale aktivnosti se pozivanju nakon početne, po principu stoga

(posljednja otvorena aktivnost se prva zatvara), u situacijama kada je to potrebno. Activity klasa

je poput Form klase u C# i Windows okruženju. Sljedeći kôd prikazuje osnovni kostur Activity

klase, te metode koja svaka aktivnost sadrži.

public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentVirew je metoda za postavljanje glavnog //layouta korisničkog sučelja setContentView(R.layout.activity_main); //Klasa ima zadatak popuniti korisničko sučeje //i omogućiti korisniku rad.

} @Override

Page 11: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

8

protected void onStart() { super.onStart(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } }

onCreate() – ovo je osnovna metoda svake aktivnosti, poput Main() u drugim programskim

jezicima. Životni ciklus aktivnosti upravo započinje pozivanjem ove metode, bez nje aktivnost

neće ispravno raditi. Metoda se poziva odmah prilikom pozivanja same aktivnosti te se zbog

toga unutar nje definira korisničko sučelje (setContentView()).

onStart() – metoda se automatski poziva nakon onCreate() no njena stvarna svrha je da se

poziva nakon što se aktivnost vratila iz stanja mirovanja (pozvana je nova aktivnost). Iz tog

razloga se unutar nje nalaze podaci koje je potrebno ažurirati nakon mirovanja aktivnosti (npr.

ponovno otvaranje baze podataka). Metoda nije obavezna za rad aktivnosti, ali je preporučljiva

jer omogućuje kontrolu resursa uređaja.

onStop() – metoda se poziva kada korisnik ili sama aplikacija pokrene novu aktivnost, što znači

da aktivnost prelazi u stanje mirovanja i čeka da se korisnik vrati na početnu aktivnost. Metoda

omogućuje da oslobodimo memoriju za vrijeme mirovanja (npr. privremeno zatvaranje baze

podataka). U slučaju zatvaranja baze podataka, kako bi aplikacija ispravno radila nakon stanja

mirovanja, potrebno je u onStart() metodi ponovno otvoriti bazu podataka.

onDestroy() – metoda se samo poziva kada je aktivnost završila s radom ili je uništena od strane

operacijskog sustava. Unutar metode definiramo varijable koje je potrebno zatvoriti/obrisati iz

sigurnosnih razloga, a ne smiju se tijekom samog rada aktivnost jer pružaju osnovne podatke

Page 12: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

9

za rad aktivnosti. Kao na primjer Cursor baze podatka kojeg je uvijek potrebno zatvoriti nakon

korištenja, jer u suprotnom može doći do problema s daljnjim radom baze.

Slika 3.1 prikazuje životni ciklus aktivnosti i međusobni odnos metoda Activity klase.

Slika 3.1. Životni ciklus aktivnosti aplikacije (Prema: Meier, 2011)

Postoje tri stanja u kojima aktivnost može biti, gdje se prijelaz iz jednog stanja u drugi događa

pomoću već opisanih metoda. Maločas spomenuta stanja su: (Kuna,2009):

Aktivno stanje ili stanje izvođenja - kada je aktivnost prikazan na zaslonu (moguće je

koristiti funkcionalnosti aktivnosti)

Pauzirano stanje - još uvijek je vidljiv korisniku, no trenutno ga ne koristi. To je slučaj

kada je nova aktivnost „iznad“ prethodne aktivnosti, koja je transparentna ili ne pokriva

cijeli ekran. U slučaju da operacijski sustav ima premalo slobodne memorije, može

ugasiti takvu aktivnost.

Page 13: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

10

Zaustavljeno stanje - druga aktivnost je potpuno prekrila prethodnu. Informacije o

stanju su još uvijek sačuvane. Također, aktivnost u ovom stanju se može zaustaviti ako

je sustavu potrebna memorija.

3.2. Servisi

Servis je komponenta koja obavlja zadatke u pozadini aplikacije tijekom duljeg vremenskog

perioda. Servisi nemaju korisničko sučelje poput aktivnosti. Na primjer, servis može

reproducirati glazbu ili skidati sadržaj s Interneta u pozadini dok korisnik koristi drugu

aplikaciju. Servis uglavnom obavlja radnju u istom procesu kao i aplikacija od koje potječe.

Servisi se pokreću, zaustavljaju i kontroliraju unutar drugih komponenata aplikacije, kao što su

drugi servisi, aktivnosti i dobavljači sadržaja (eng. Broadcast Receiver). Ako aplikacija mora

obaviti neku radnju, a korisnikova interakcija nije potrebna, servisi su najbolje rješenje.

Servisi imaju uvijek viši prioritet u odnosu na aktivnosti koji nisu trenutno vidljive korisniku,

što znači da je manja vjerojatnost da ću se zaustaviti ako je sustavu potrebno više resursa. Jedini

razlog da sustav zaustavi rad servisa je u slučaju ako je trenutno vidljivoj aktivnosti potrebno

još više resursa. Ako se to dogodilo, servis se automatski ponovo pokreće kada se oslobode

potrebni resursi. Postoje situacije kada je potrebno da prioritet servisa bude jednak vidljivoj

aktivnosti, kao na primjer MP3-player koji reproducira glazbu u pozadini.

Svaki servis je proširenje Service klase. Osnovne metode klase, koje je potrebno definirati, su

(Meier,2010):

onCreate() – identična metodi iz Activity klase. Poziva se samo jednom i to pri

pokretanju servisa. Osnovna metoda u kojoj se definiraju radnje koje će servis obavljati

pri pokretanju.

onBind() – metoda vraća komunikacijski kanal koji je potreban za spajanje sa servisom

ili vraća null vrijednost ako spajanje na servis nije moguće izvršiti.

onStartComand() – metoda se poziva kada je servis pokrenut pozivom metode

startService(), što omogućuje da se ova metoda nekoliko puta pokrene u životnom

ciklusu servisa.

Page 14: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

11

Servisi se moraju pozvati na glavnoj dretvi uređaja. To znači da svaki proces koji je pokrenut u

onStardComand() metodi obavlja radnju na glavnoj dretvi. Zbog toga je potrebno kreirati novu

dretvu unutar onStartComand() metode, koja će odvijati proces u pozadini aplikacije i nakon

toga zaustaviti servis, ne opterećujući glavnu dretvu uređaja.

Kada će se metoda onStartComand() ponovno pozvati ovisi o vrijednosti koju metoda vraća

kao rezultat. Spomenuta vrijednost može biti jedna od sljedećih konstanti (Meier, 2010):

START_STICKY – vraćanjem ove konstante, ako je servis prekinut od strane sustava,

onStartComand() će se pozvati svaki puta kada se servis ponovno pokrene. Koristi se

kod servisa koji se pokreću i zaustavljaju pomoću startService() i stopService(). Primjer

jednog servisa je MP3-player koji obavlja procese u pozadini.

START_NOT_STICKY – koristi se kod servisa koji obavljaju jednu specifičnu akciju

ili naredbu. Kada su završili s radnjom pozivaju stopSelf() kako bi servis prekinuli.

Servis koji je prekinut od strane sustava pokrenuti će se ponovo samo ako postoje pozivi

na čekanju. Ako ipak ne postoje startService() pozivi, servis se prekida bez poziva

onStartComand() metode. Ovo stanje je idealno za servise koji obavljaju radnje u

određenim vremenskim intervalima, poput servisa za ažuriranja sadržaja.

START_REDELIVER_INTENT – ovo stanje se koristi kada je potrebna sigurnost da

je servis završio s radom. Ovo stanje je kombinacija prve dvije. Servis se ponovno

pokreće samo ako postoje pozivi na čekanju ili ako je prekinut prije poziva stopSelf()

metode.

Potrebno je naglasiti da se svaki servis mora zaustaviti pomoći stopSerivce() ili stopSelf() nakon

obavljene radnje.

Page 15: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

12

3.3. Dobavljači sadržaja i primatelji prijenosa

Dobavljači sadržaja (eng. Content Providers) pružaju sučelje za dobavljanje i spremanje

sadržaja te omogućuju razmjenu podataka između aplikacija. Svi dobavljači sadržaja

pohranjuju podatke u SQLite bazu podataka. Svaka aplikacija, koja ima ovlast korištenja

dobavljača sadržaja, može pristupiti svi podacima te aplikacije. Sadržaju se pristupa upitom

pomoću Content Resolvera. Upit sadrži adresu (URI) sadržaja, imena polja iz tablice i tip

podataka (tekstualni tip (String), cjelobrojni tip (Integer)). Svaki dobavljač sadržaja je

proširenje osnovne klase ContentProvider. Android posjeduje nekoliko ugrađenih dobavljača

sadržaja koje sve aplikacije mogu koristiti. Jedna od njih je dobavljač sadržaja za kontakte.

Svaka aplikacija može pristupiti podacima kontakta poput broj telefona, imena, itd.

Primatelji prijenosa (eng. Broadcast Receiver) imaju zadaću reagiranja na emitiranje obavijesti

koje dolaze od strane sistema uređaja (npr. baterija je prazna, zaslon je uključen) ili od aplikacija

(komunikacija s drugim aplikacijama). Ova komponenta nema korisničko sučelje, ali može

pokrenuti aplikaciju kao rezultat primljene informacije. Također može koristiti klasu

NotificationManager za upozorenje korisnika pomoću zvukova, vibracija ili svjetla (Marjanica,

2011).

3.4. Android resursi

Kao što je navedeno, drugi bitni pojam jesu Android resursi. Bez resursa, aplikacija ne može

raditi. Resursi također omogućavaju optimizaciju aplikacije za veliki broj različitih uređaja

(uređaji različite hardverske jačine). Resursi su komponente dizajna korisničkog sučelja

aplikacije. Sastoje se od:

Rasporeda (eng. Layout),

Izbornika (eng. Menu),

Vrijednosti (eng. Values),

Grafike (eng. Drawables)

Raspored definira vizualnu strukturu (kostur) korisničkog sučelja, kao na primjer sučelje jedne

aktivnosti (eng. Activity). Možemo ga definirati unaprijed u xml2 datotekama ili ju možemo

2 XML- Extensible Markup Language

Page 16: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

13

instancirati prilikom pokretanja aplikacije. Datoteka sadrži različite poglede (eng. View) i

kontrole (npr. TextView), pomoću kojih oblikujemo izgled aktivnosti. Slika 3.2 prikazuje xml

datoteku koja se sastoji od jednog pogleda (LinearLayout) i pet kontrola (dva EditView, dva

TextView i jedan Button ) te grafički izgled datoteke.

Slika 3.2. Kôd i grafički prikaz xml datoteke

Izbornik – postoje dva tipa izbornika. Prvi je izbornik koji se poziva pritiskom na tipku

Postavke uređaja. Drugi je context izbornik koji se poziva kada korisnik drži jedan element

aktivnosti pritisnut. Izbornik definiramo pomoću xml datoteka koje spremamo u mapi menu

resursa. Aplikacija može imati neograničen broj izbornika. Svaka aktivnost može imati svoj

izbornik, samo je potrebno kreirati posebnu xml datoteku i u klasi aktivnosti navesti koji

izbornik koristiti.

Vrijednosti – sastoji se od string.xml datoteke koja sadrži tekstualne vrijednosti tipa String

koje se nalaze u korisničkom sučelju aplikacije. Te vrijednosti dohvaćamo putem atributa name.

Datoteke omogućuju jednostavnu promjenu jezika korisničkog sučelja. Za svaki novi jezik

potrebna je posebna datoteka. Sve datoteke imaju iste nazive atributa, ali različitih vrijednosti.

Potrebno je samo navesti koju datoteku trenutno koristiti i vrijednost se mijenja (u ovom slučaju

jezik). U nastavku je prikazan kôd dvije string.xml datoteke dok slika 3.3 prikazuje slike gumba

(eng. Button) koji ih upotrebljava:

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="string_name">Name:</string>

</resources>

<?xml version="1.0" encoding="utf-8"?>

Page 17: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

14

<resources> <string name="string_name">Ime:</string>

</resources>

<Button android:id="@+id/ButtonLog" android:text="@string/string_name" />

Slika 3.3. Gumb kontrole različitih vrijednosti

Grafike – jednostavno rečeno, to su slike (jpg, png, i sličnih formata) koje želimo koristit kao

dio korisničkog sučelja. Za korištenje je samo potrebno kopirati grafiku u jedan od drawable

mapa te ih pozvati (kada je potrebno) preko ID-a, koji je istovremeno i samo ime grafike. U

nastavku slijedi primjer kôda pozivanja grafike unutar xml datoteke (icon_dash_exercise_gray

je ID grafike), dok slika 3.4 prikazuje kontrolu za prikaz grafike:

<ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_dash_exercise_gray" />

Slika 3.4. Kontrola za prikaz grafike

Zadnji bitan pojam je AndroidManifest.xml datoteka. Svaka aplikacija mora sadržavati tu

datoteku i mora biti točno tog imena. U datoteci se nalaze bitne informacije o aplikaciji kao što

su naziv aplikacije, nazivi pojedinih aktivnosti, minimalna verzija Androida itd. Osim

informacija nalaze se i razna dopuštenja i restrikcija aplikacije, kao što je na primjer dopuštenje

korištenja memorijske kartice, upotreba korištenje kamere itd. Također je obavezno unutar

datoteke opisati svaku kreiranu aktivnost ili će se pri pokretanju pojaviti pogreška. U nastavku

prikazan je kôd manifest datoteke.

Page 18: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

15

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testapp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="TestApp" android:theme="@style/AppTheme" > <activity android:name="com.example.testapp.ReminderListActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TesttActivityTwo" android:label ="TestApp"> </activity> </application> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>

3.5. Namjera

Namjera (eng. Intents) čini osnovni sustav razmjene poruka u Android operacijskom sustavu.

Namjera je instanca klase Intent i sastoji od akcije i podataka. Akcija je jednostavno radnja

koja se mora dogoditi u trenutku primanja namjere, a podaci su informacije koje su potrebne

za rad (npr. pozivni broj osobe). Namjere se koriste za pokretanje novih aktivnosti, servisa ili

za komunikaciju između različitih dijelova sustava. Aplikacija može slati ili primati namjeru.

Slanje namjere govori Android operacijskom sustavu da mora nešto poduzeti. To može biti

pokretanje nove aktivnosti unutar aplikacije, ili pokretanje sasvim nove aplikacije. Slanjem

namjere nije osigurano da će se nešto dogoditi. Namjeru koja je poslana za komunikaciju

između sustava je potrebno registrirati pomoću prijemnika namjere (eng. Broadcast Receiver)

koji, nakon primitka, govori sustavu što treba učiniti. U slučaju da istovremeno više aplikacija

može primiti namjeru, sustav omogućuje korisniku da sam izabere aplikaciju pomoću koje želi

izvršiti radnju. Ako ipak sustav ne može pronaći niti jednu aplikaciju koja može primiti

namjeru, aplikacija koja je poslala namjeru javlja pogrešku (eng. run-time error).

Page 19: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

16

Kao što je navedeno, namjere se najčešće koriste za pokretanje novih aktivnosti unutar

aplikacije. Za pokretanje nove aktivnosti, potrebno je pozvati startActivity() metodu, kojoj

prosljeđujemo namjeru kao što je prikazano u sljedećem kôdu.

startActivity(Intent mojaNamjera);

U namjeri se može navesti koju aktivnost treba pokrenuti, ili samo akciju koju treba obaviti.

Metodom putExtra(), klase Intent, možemo proslijediti podatke drugoj aktivnosti. Potrebna je

samo konstanta pomoću koje prepoznajemo podatak:

namjera.putExtra(KONSTANTA, vrijednost);

Kada se koristi startActivity(), aplikacija neće dobivati obavijest ako je nedavno pokrenuta

aktivnost završila s radom. U slučaju da je potrebno dobivati takve obavijesti, koristi se metoda

startActivityForResult().

Za povezivanje različitih aktivnosti unutar iste aplikacije koristi se eksplicitna namjera (eng.

Explicit Intent). Eksplicitnoj namjeri je potrebno proslijediti kontekst (eng. Context) trenutne

aktivnosti i klasu aktivnosti koju je potrebno pokrenuti; kao što je prikazano u sljedećem kôdu:

Intent i = new Intent(getApplicationContext(), newActivity.class); startActivity(i);

Nakon poziva startActivity() otvara se nova aktivnost, koja je vidljiva sve dok nije pozvana

finish() metoda ili dok korisnik nije pritisnuo hardversku tipku Nazad.

Kao što je navedeno, startActivityForResut() se koristi ako je potrebna obavijest nakon

završetka novo pokrenute aktivnosti. Metoda je vrlo slična startActivity() metodi, s jednom

bitnom razlikom. Metodi startActivityForResut() također prosljeđujemo kontekst i klasu

aktivnosti koju treba pokrenuti, ali uz to, prosljeđujemo i request code. To je broj pomoću kojeg

raspoznajemo koja je aktivnost vratila obavijest. Primjer vidimo u sljedećem kôdu.

private static final int REQUEST_CODE = 1023; Intent intent = new Intent(this, Aktivnost.class); startActivityForResult(intent, REQUEST_CODE);

Na ovaj način, novo pokrenuta aktivnost vraća obavijest o završetku i može vratiti neki rezultat

prethodnoj aktivnosti. Unutar nove aktivnosti, prije pozivanje finish() metode, ako želimo

vratiti neki rezultat, potrebno je pozvati setResult() metodu. Metoda zahtjeva dva parametra:

Page 20: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

17

rezultat aktivnosti i result code, koji može biti RESULT_OK ili RESULT_CANCELED. Ako

korisnik samostalno zatvori aktivnost, ili je aktivnost završila prije poziva setResult(), result

code je automatski postavljen na RESULT_CANCELED. Nakon završetka nove aktivnost,

unutar početne aktivnosti, poziva se metoda onActivityResult(). Metoda sadrži tri parametra:

request code, result code, i podatke. Pomoću tih parametara, na jednostavan je način moguće

raspoznati koja aktivnost je poslala rezultat i što nakon tog poduzeti. Potrebno je samo

usporediti request code i provjeriti da li je result code jednak RESULT_OK. Programski kôd

onActivityResult() metode se nalazi u nastavku.

private static final int REQUEST_CODE_AKTIVNOST_JEDAN = 1023; private static final int REQUEST_CODE_AKTIVNOST_DVA = 2023; @Override public void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case (REQUEST_CODE_AKTIVNOST_JEDAN) : { if (resultCode == Activity.RESULT_OK) { } break; } case (REQUEST_CODE_AKTIVNOST_DVA) : { if (resultCode == Activity.RESULT_OK) { } break; }

3.6. SQLite

SQLite je programska podrška koja omogućuje kreiranje i upravljanje relacijskih baza

podataka. Implementiran je kao C biblioteka i sastavni je dio Android arhitekture. Programski

kôd, kao i njegovi dijelovi, su otvorene domene (eng. open source) što znači da je besplatan za

korištenje, te se slobodno može modificirati i objavljivati. Zbog toga je SQLite najraširenije

programsko rješenje za SQL baze podataka (Kreibich, 2013).

Implementacija u obliku biblioteke znači da je svaka SQLite baza integrirani dio aplikacije u

kojoj je kreirana i ne mora se pokretati kao zaseban proces. Upravo to uvelike smanjuje vanjske

smetnje, smanjuje čekanje i pojednostavljuje transakcijske procese. Nasuprot drugih

programskih rješenja, SQLite nema konfiguracijsku datoteku, nije ga potrebno instalirati ili

poduzimati bilo kakva podešavanja.

Page 21: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

18

Glavni tipovi podataka u SQLite-u su (Penezić, 2012):

NULL - vrijednost koja označava da podatak ne postoji

INTEGER - standardna vrijednost cijelih brojeva s duljinom zapisa od 1, 2, 3, 4, 6, ili 8

bajta, ovisno o danoj vrijednosti.

REAL - vrijednost realnog broja s 8 bajta u standardnom IEEE zapisu.

TEXT - tekstualna vrijednost zapisana u jednom od podržanih načina zapisa (UTF-8,

UTF-16BE ili UTF-16LE).

BLOB - vrijednost pohranjena točno kako je dana.

Glavni nedostaci SQLite sustava su (Bucić, 2012):

ALTER TABLE nije u potpunosti podržan; samo RENAME TABLE i ADD COLUMN

naredbe su podržane. Naredba za brisanje stupca DROP COLUMN i naredba za

promjenu naziva stupca ALTER COLUMN nisu implementirane

Ugniježđene transakcije; SQLite dozvoljava samo pojedinačne transakcije.

Ugniježđene transakcije dozvoljavaju kontrolu nad većim i kompleksnijim operacijama.

RIGHT i FULL OUTER JOIN; LEFT OUTER JOIN je implementiran, ali RIGHT

OUTER JOIN i FULL OUTER JOIN nisu.

3.6.1. Cursor i Content Values

Svaki upit u Android okruženju se vraća u obliku kursora (eng. Cursor) koji pokazuje na

rezultat upita, tj. redove tablica. Kursor uvijek pokazuje na prvi red rezultata, te je potrebno

ručno prolaziti kroz cijeli skup redova. Svaki kursor je instanca Cursor klase koja sadrži

metode za navigaciju kroz rezultat. Te metode su (Meier, 2010):

moveToFirst() – Postavlja kursor na prvi red rezultata upita.

moveToNext() – Pomiče kursor na sljedeći red.

moveToPrevious() – Pomiče kursor na prethodni red.

getCount() – Vraća ukupni broj redova u rezultatu.

getColumnIndexOrThrow() –Vraća redni broj stupca zadanog imena (baca iznimku ako

stupac ne postoji)

getColumnName()- Vraća ime stupca zadan rednim brojem.

getColumnNames() – Vraća niz svih naziva stupaca u trenutnom kursoru

Page 22: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

19

moveToPosition() – Postavlja kursor na zadani broj reda

getPosition() – Vraća trenutnu poziciju kursor

Content Values se koristi za dodavanje novih redova u tablicu. Svaka vrijednost predstavlja

jedan novi red tablice u obliku ključa (naziv stupca) i vrijednosti. Sljedeći kôd prikazuje primjer

dodavanja novoga reda u tablici:

ContentValues noviRed = new ContentValues(); noviRed.put(IME_STUPCA, novaVrjednost); [ ... Ponavljamo za svaki stupac u tablici ... ]

// Dodamo novi red u tablicu mojaBaza.insert(IME_TABLICE, null, noviRed);

Postoje još mnogo drugih komponenti u Android programskom jeziku, ali kako one nisu bitne

za kontekst ovoga rada, iste neće biti opisane u ovom završnom radu. U nastavku slijedi

praktični dio rada: aplikacija za praćenje napredovanja u teretani.

Page 23: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

20

4. Praktični dio

Aplikacija za praćenja napredovanja u teretani je sustav koji omogućuje korisniku slaganje

vlastitog treninga iz više od 150 različitih vježbi, vođenje dnevnika, te pregled napredovanja

pomoću grafova ili samog dnevnika. Korisnik ima na raspolaganju sučelje koje omogućuje

jednostavan i učinkovit rad. Aplikaciju je samo potrebo instalirati i korisnik može započeti s

treningom, nikakva dodatna preuzimanja s Interneta nisu potrebna. Aplikacija je napravljena

po uzoru poznatih komercijalnih aplikacija poput: JEFIT, You Are Your Own Gym, The 300

Gym Workout itd. Slike i opis vježbi za aplikaciju su preuzete od JEFIT - Workout & Fitness

Android Aplication (Jefit Inc, 2013).

Na slici 4.1. prikazano je početno sučelje aplikacije koje se sastoji od pet glavnih komponenti,

to su:

1. Vježbe: pregled svih raspoloživi vježbi,

2. Trening: omogućuje pregled svih raspoloživi treninga, kreiranje novih te pokretanje

aktivnosti za zapisivanje dnevnika novog treninga

3. Dnevnik: pregled dnevnika po datumu,

4. Napredak: omogućuje prikaz napredovanja po vježbi,

5. Profil/Postavke: prikaz trenutnog korisnika te mogućnost promjene istog.

Slika 4.1. Početno sučelje aplikacije

1

2

3

4

5

Page 24: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

21

4.1. Izvedba početnog sučelja

Klasa MainActivity.java je početna aktivnost aplikacije (slika 4.1). Klasa prilikom pokretanja

provjerava prisutnost baze podataka na uređaju. Baza je unaprijed kreirana pomoću

SQLiteBrowser aplikacije, te ako baza ne postoji na uređaju, klasa kopira bazu iz Assets mape

aplikacije na sami uređaj. U nastavku je prikazan kôd za provjeru i kopiranje baze podataka.

private void testDataBase() { try {

final String destPath = "/data/data/" + PACKAGE_NAME +"/databases/"; File f = new File(destPath+dbName); Log.v("Test Db", "Test Db"); if (!f.exists()) { File s = new File(destPath); s.mkdirs(); Log.v("Copy New Db", "Copy New Db"); CopyDB(this.getAssets().open("gymtrackdb.db"), new FileOutputStream(destPath+dbName)); Log.v("Copy New Db Complete", "Copy New Db Complete"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

Klasa DbAdapter.java obavlja CRUD operacije nad bazom i neophodna je za rad aplikacije.

Kôd prikazuje metodu za dohvaćanje svih redova zadane tablice te metodu za dodavanje

novoga reda u zadanoj tablici.

public Cursor getAllDataFromDb(String tableName, String[] columns, String selection, String[] selectionArgs, String orderBy) { return db.query(tableName, columns, selection, selectionArgs, null, null, orderBy);

} public long insertRow(String tableName, ContentValues values){ return db.insert(tableName, null, values);

}

Početno sučelje omogućuje pokretanje ostalih komponenti koje će biti opisane u nastavku rada.

Page 25: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

22

4.2. Izvedba komponente Vježbe

Kao što je navedeno, komponenta Vježbe prikazuje listu svih dostupni vježbi i njihov opis. Za

izvedbu potrebne su klase: MuscleMapActivity, CursorAdapterExercises, DbAdapter i

ExerciseListView. Klasa MuscleMapActivity je aktivnost koja vizualno prikazuje skupine

mišića ljudskog tijela, te tako omogućuje izbor vježbi po mišićnim skupinama. Slika 4.2

prikazuje sučelje aktivnosti.

Slika 4.2. Izbor vježbi po mišićnim skupinama

Pritiskom na jednu mišićnu skupinu poziva se OnClick() metoda koja pokreće klasu

ExerciseListView i CursorAdapterExercises za prikaz vježbi. Sljedeći kôd prikazuje OnClick()

metodu.

public void onClick(View v) { Intent i = new Intent(MuscleMapActivity.this, ExerciseListView.class); i.putExtra(MUSCLE_TYPE, this.muscleType); i.putExtra(CALL_FOR_EXERCISE_ADD, addExerciseItent); if(routineTitle!=null && day != null && addExerciseItent==true ){ i.putExtra(ROUTINE_TITLE, routineTitle); i.putExtra(ROUTINE_DAY, day); Log.v("START FOR RESULT","START FOR RESULT");

startActivityForResult(i, RoutineExpandableListView.REQUEST_CODE_ADD);

} else startActivity(i); }

Page 26: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

23

Klasa ExerciseListView sastoji se od kontrole za prikaz popisa vježbi (eng, ListView), koja se

ispunjava pomoću klase CursorAdapterExercises i podataka iz baze. Sljedeća slika prikazuje

primjer popisa vježbi za mišićnu skupinu prsa. Ova klasa ima još jednu funkcionalnost koja je

potrebna kod komponente Trening, o čemu će biti više riječ u potpoglavlju 4.3. Slika 4.3

prikazuje sučelje aktivnosti.

Slika 4.3. Popis postojećih vježbi

Klasa CursorAdapterExecise je proširenje klase CursorAdapter, a svrha joj je ispunjavanje

popisa (eng. ListView) pomoću baze. Osnovne metode CursorAdaper klase su newView() i

bindView(). Metoda newView() kreira (eng. inflate) novi prazni red u listi. Nakon toga, pomoću

bindView() taj novi red ispunjavamo s podacima iz baze (ime vježbe i slika). Klasu

CursorAdapterExecise moramo instancirati unutar ExerciseListView klase, postaviti ju kao

osnovni adapter za ispunjavanje liste i proslijediti kursor (eng. Cursor) koji pokazuje na tablicu

vježbe u bazi. Nakon tog, adapter prolazi kroz svaki red kursora i pomoću metode bindView()

iscrtava listu.

@Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.exercises_list_one_row, null); return v; }

Page 27: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

24

Pritiskom na jedan red liste, pozivamo klasu ExerciseDescriptionActivity koja sadrži opis

odabrane vježbe. Klasi prosljeđujemo polje vrijednosti (eng. ArrayList) koja sadrži sve vježbe

iz popisa prošle aktivnosti. Pomoću tog polja aplikacija prikazuje detaljan opis odabrane vježbe,

kako se izvodi i koje sve mišićne skupine rade. Također omogućuje jednostavnu navigaciju

kroz popis vježbi. Slika 4.4. prikazuje sučelje aktivnosti.

Slika 4.4. Opis pojedine vježbe

4.3. Izvedba komponente Trening

Komponenta Trening prikazuje popis svih postojećih treninga i kreiranje novih, pregled i

uređivanje pojedinog treninga te pokretanje odabranog treninga tj. zapisivanje rezultata

treninga u dnevnik. Jedan trening se sastoji od nekoliko različitih vježbi koje su raspoređene

po danima te tako omogućuje korisniku unaprijed planiranje što pojedinog dana želi vježbati i

organizaciju njegovog vremena. Korisnik može sam sastaviti pojedini trening ili koristiti već

gotove unutar aplikacije. Za izvedbu komponente Trening koriste se klase:

AddRoutineActivity, CursorAdapterRoutines, EditExercisesRoutineActivity,

RoutineExpandableListView, RoutineExpandableListAdapter, RoutineListView,

WorkoutActivity.

Klase RoutineListView i CursorAdapterRoutines prikazuju popis svih treninga. Rade na istom

principu kao i prikaz popisa svih vježbi. Pritiskom na tipku u gornjem desnom kutu, poziva se

Page 28: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

25

aktivnost za dodavanje novog treninga (klasa AddRoutineActivity). Sučelje je prikazano na slici

4.5. Korisnik unosi ime i kratak opis treninga, te odabire dane kojima želi trenirati. Pritiskom

na tipku za pohranu, novi trening se dodaje u bazu i aplikacija se vraća na aktivnost s popisom

svih treninga.

Slika 4.5. Kreiranje novog treninga

Pritiskom na jedan trening iz popisa pokreće se nova aktivnost koja prikazuje opis treninga i

popis vježbi od kojih se trening sastoji. Aktivnost je instanca klase RoutineExpandableListView

koja sadrži ExpandableListView kontrolu za grupiranje sadržaja, što je u ovom slučaju,

grupiranje vježbi po pojedinim danima u tjednu. Sljedeći kôd prikazuje algoritam koji u

onCreate() metodi kreira rječnik, varijabla tipa HashMap. To je varijabla koja se sastoji od

ključa i vrijednosti, gdje je, ovom slučaju, ključ dan treninga u tjednu, a vrijednost popis vježbi

za taj dan.

for (int j = 0; j < days.size(); j++) {

List<ModelRoutineExercises> routineExercisesListtest = new ArrayList<ModelRoutineExercises>();

for (int z = 0; z < routineExercisesList.size(); z++) { if (routineExercisesList.get(z).getDay().contains(days.get(j))) { routineExercisesListtest.add(routineExercisesList.get(z)); } } routineExercisesMap.put(days.get(j), routineExercisesListtest); }

Rječnik se prosljeđuje klasi RoutineExpandableListAdapter koja ima ulogu glavnog adaptera

za ispunjavanje ExpandableListView kontrole. Ova klasa vodi brigu o grupama i elementima

Page 29: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

26

grupe ExpandableListView kontrole i što će se dogoditi pritiskom na njih. Osnovne metode za

to su:

getGroupView() - uz pomoć podataka iz getGroup() metode, ova metoda kreira i

ispunjava novi red u popisu grupa. U metodi je moguće definirati što će se dogoditi

pritiskom na pojedinu element grupe (npr. tipka za dodavanje novih vježbi).

getChildView() – uz pomoć podataka iz getChild() metode, ova metoda kreira i

ispunjava novi element grupe. U metodi je moguće definirati što će se dogoditi

pritiskom na pojedino dijete.

getChild() – koristi se unutar getChildView(). Vraća objekt koji sadrži podatke o

elementu grupe kao što su ime vježbe, slika vježbe, itd.

getGroup() - koristi se unutar getGroupView(). Vraća objekt koji sadrži podatke o grupi

kao što je primjerice njen naziv.

getGroupId() – vraća ID broj grupe u popisu. Potrebno za dohvat podataka.

getChildId() - vraća ID broj elementa u popisu. Potrebno za dohvat podataka.

Osim što prikazuje opis treninga i popis vježbi, ova aktivnost ima još dodatnih funkcionalnosti

koje su prikazane na slici 4.6, to su: 1. Dodavanje novih vježbi u grupu, 2. Zapisivanje rezultata

treninga u dnevnik i 3. Uređivanje podataka pojedine vježbe.

Slika 4.6. Opis treninga i popis vježbi

Slika 4.6 prikazuje tipku broj 1 koja pokreće aktivnost za dodavanje novih vježbi u grupu.

Aktivnost je identična aktivnosti za pregled svih vježbi uz dodatak da svaki red u popisu

1

2

3

Page 30: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

27

posjeduje okvir za potvrdu (eng. checkbox). Tipka Spremi dodaje sve označene vježbe u

odabranu grupu. Slika 4.7. prikazuje sučelje aktivnosti.

Slika 4.7.Odabir vježbi treninga

Slika 4.8 prikazuje sučelje aktivnosti za uređivanje podataka o pojedinoj vježbi (npr. broj

setova3). Aktivnost se pokreće pomoću tipke broj 3 (slika 4.6.). Omogućuje i brisanje pojedine

vježbe iz grupe pritiskom na tipku Obriši vježbu. Pritiskom na tipku Spremi, aktivnost

pohranjuje promjene u bazu i vraća se na prethodnu aktivnost.

Slika 4.8. Uređivanje podataka pojedine vježbe

Najbitniji dio ove komponente, a i cijele aplikacije je zapisivanje rezultata treninga u dnevnik.

Aktivnost koja to omogućuje se pokreće pomoću tipke 2 (slika 4.6.) u izabranoj grupi tj.

3 Set – broj ponavljanja jedne vježbe

Page 31: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

28

izabranog dana. Slika 4.9. prikazuje sučelje aktivnosti. Sučelje se sastoji od kontrola (eng.

EditText) za zapisivanje rezultata treninga (težina utega, broj ponavljanja vježbe, vrijeme

trajanja vježbe i vrijeme odmaranja između setova) i tablice koja prikazuje rezultate treninga

koje korisnik unosi. Osim rezultata novog treninga, u tablici se mogu provjeriti i rezultate

prijašnjih treninga.

Slika 4.9. Aktivnost za unos rezultata treninga u dnevnik

Aktivnost dohvaća popis vježbi za odabrani dan, te prikazuje jednu po jednu vježbu sve do

kraja treninga. Kada korisnik ispuni zadani broj setova jedne vježbe, aplikacija automatski

prelazi na sljedeću vježbu. Moguće je i ručno promijeniti trenutnu vježbu, što znači da korisnik

ne mora pratiti zadani redoslijed ako ne želi. Korisnik može prekinuti trening u bilo koje

vrijeme, a kada se želi vratiti, aplikacija će započeti od one vježbe koju je korisnik zadnje

vježbao. Kada korisnik završi s treningom, aktivnost se zatvara i vraća na prethodnu aktivnost

s opisom treninga.

4.4. Izvedba komponente Dnevnik

Ova komponenta omogućuje pregled dnevnika po datumu. Korisnik odabire datum te ako

postoji dnevnik za taj dan, aplikacija ispisuje rezultate treninga u obliku tablice. Za izvedbu ove

komponente koriste se: DbAdapter, LogActivity i LogTableActivity klase.

Aktivnost LogActivity se sastoji od kontrole za izbor datuma (eng. CalendarVew). To je zapravo

i jedini zadatak ove aktivnosti, odabrati datum, te ako postoji dnevnik treninga, pokrenuti

aktivnost za prikaz dnevnika. Slika 4.10. prikazuje sučelje aktivnosti.

Page 32: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

29

Slika 4.10. Odabir datuma dnevnika

Pritiskom na tipku Učitaj dnevnik poziva se sljedeći kôd koji provjerava postoji li dnevnik u

bazi za odabrani datum.

@Override public void onClick(View v) { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date = sdf.format(cal.getDate()); Cursor mCursor = dbadatper.getAllDataFromDb(ModelLogs.TABLE_LOGS, null, LOG_QUERY, new String[]{date,profId},null ); if (mCursor.getCount() > 0) { Intent i = new Intent(getApplicationContext(), LogTableActivity.class); i.putExtra(LogTableActivity.LOG_DATE, date); startActivity(i); } else{ Toast.makeText(getApplicationContext(), R.string.no_workout_log, Toast.LENGTH_SHORT).show(); } }

Ako zapis postoji u bazi, aktivnost pokreće LogTableActivity aktivnost i prosljeđuje joj datum

pomoću putExtra() metode. U onCreate() metodi aktivnost dohvaća podatke iz baze i ispisuje

ih u obliku tablice, što je vidljivo na slici 4.11.

Page 33: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

30

Slika 4.11. Dnevnik odrađenih vježbi

4.5. Izvedba komponente Napredak

Komponenta napredak omogućuje prikaz rezultata treninga u obliku xy-grafa. Graf prikazuje

sve podatke izabrane vježbe. Komponenta se sastoji od klasa DbAdapter, GraphActivity, te

pomoćne biblioteke achartengine-1.1.0.jar. AChartEngine je besplatna biblioteka za Android

aplikacije koja omogućuje crtanje grafova. Slika 4.12 prikazuje sučelje aktivnosti.

Slika 4.12. Graf napredovanja

Page 34: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

31

Korisnik prvo mora odabrati jedan trening, zatim jednu vježbu iz odabranog treninga. Na taj

način aplikacija dohvaća podatke iz baze, pretraživajući rezultate odabrane vježbe. Korisnik

može odabrati koje rezultate želi prikazat. Moguće je prikazati maksimalnu težinu s kojom je

korisnik radio ili maksimalan broj ponavljanja u jednom setu. Os x prikazuje broj tjedna, dok

os y prikazuje maksimalnu težinu ili broj ponavljanja. U nastavku je prikazan kôd algoritma

koji pretražuje bazu i prikazuje rezultate na grafu.

Cursor mCursor = dbadapter.getAllDataFromDb(ModelLogs.TABLE_LOGS, null, LOG_DATA_QUERY, new String[]{profileId,spinerExercise.getSelectedItem(). toString(),spinerRoutine.getSelectedItem().toString()}, ModelLogs.COLLUMN_DATE); mCursor.moveToFirst(); while(!mCursor.isAfterLast()){

String _id = Cursor.getString(mCursor.getColumnIndexOrThrow(ModelLogs.COLLUMN_ID)); Cursor sCursor = badapter.getAllDataFromDb(ModelLogHelper.TABLE_LOG_HELPERS, null, "log_fk=?", new String[]{_id}, ModelLogHelper.COLLUMN_REPS);

if(sCursor.moveToLast()){ int reps = sCursor.getInt(sCursor.getColumnIndexOrThrow(ModelLogHelper.COLLUMN_REPS));

mCurrentSeries.add(i, reps); mChartView.repaint(); i+=1; } mCursor.moveToNext();

}

Osnovne metode, koje prikazuju vrijednosti na grafu, su metode biblioteke achartengine

XYSeries.add() i GraphicalView.repaint(). Metoda XYSeries.add() dodaje nove vrijednosti u

graf, ali one nisu vidljive sve dok se graf ne ažurira. Upravo metoda GraphicalView.repaint()

ima zadatak ažuriranja grafa, koju je potrebno pozvati svaki put nakon dodavanja novih

vrijednosti. U kôdu je još prikazano kako se pomoću kursora i while petlje prolazi kroz svaki

red rezultata upita i dohvaća podatke (maksimalna težina ili broj ponavljanje) za graf.

Page 35: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

32

4.6. Izvedba komponente Profil/Postavke

Komponenta Profil/postavke omogućuje korisniku uređivanje korisničkih podataka poput

imena, kreiranje novog profila, i promjenu trenutno aktivnog profila. Za izvedbu aktivnosti

koriste se klase PreferencesActivity, ProfileActiviy te pomoćna biblioteka afilechooser.jar.

Klasa ProfileActivity je aktivnost za kreiranje novog profila i uređivanje podataka postojećih

profila. Aktivnost se sastoji od kontrola za unos podataka i tipke koja pokreće FileExplorer

aktivnost za odabir profilne slike. Slika 4.13. prikazuje sučelje aktivnosti i FileExploler - a.

Slika 4.13. Kreiranje/uređivanje profila

Ako želimo uređivati podatke postojećeg korisnika, aktivnosti moramo proslijediti jedinstveni

identifikacijski broj korisnika. Aktivnost provjerava broj u onCreate() metodi, te ako postoji

korisnik, preuzima podatke iz baze i prikazuje ih na zaslon. Ako korisnik unese nove podatke i

pritisne na tipku Spremi, novi podaci, pod istim identifikacijskim brojem, se pohranjuju u bazu.

Aktivnost FileExplorer je izvedena pomoću besplatne biblioteke aFIleChooser (Burke, 2013)

i nekoliko modifikacija, a omogućuje izbor profilne slike. Slika može biti tipa jpeg ili png i bilo

koje veličine kako aplikacija samostalno kreira thumbnail slike zbog uštede na memoriji.

Klasa PreferencesActivity je proširenje PreferenceActivity klase koja omogućuje hijerarhijski

prikaz postavki aplikacije. U ovom slučaju te postavke se sastoje od izbora aktivnog profila i

kreiranja novog profila. Aktivnost automatski svaku promjenu pohranjuje u _preferences.xml

datoteku. Spremljene postavke možemo u bilo kojoj aktivnosti provjeravati pomoću

getDefaultSharedPreferences() metoda, kao što je prikazano u sljedećem kôdu. Pomoću

Page 36: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

33

getDefaultSharedPreferences() otvara se datoteka _preferences.xml, te nakon toga pomoću

getString() dohvaćamo traženu vrijednost postavke. Potrebno je samo proslijediti naziv

postavke od koje želimo vrijednost. Slika 4.14. prikazuje sučelje aktivnosti.

private SharedPreferences settings ; settings = PreferenceManager.getDefaultSharedPreferences(this); String profId = settings.getString("pref_identifier", null);

Slika 4.14. Odabir aktivnog korisnika

4.7. Pregled i usporedba sličnih aplikacija

U nastavku slijedi prikaz postojećih aplikacija za praćenje napredovanja u teretani, te usporedba

njihovih funkcionalnosti sa aplikacijom koja je razvijena za potrebe ovog završnog rada.

Jedna od najpopularnijih aplikacija, po broju preuzimanja s Google Play-a, je JEFIT – Workout

and Fitnes Tracker. Aplikaciju ističe bogato korisničko sučelje, veliki broj različitih vježbi te

opis i demonstracija izvođenja istih, nekoliko dodatnih malih aplikacija poput štoperice i

mogućnost preuzimanja novog sadržaja putem Interneta. Osnovna funkcionalnost se svodi,

poput aplikacije koja je razvijena za potrebe ovoga rada, na kreiranje treninga i zapisivanje

rezultata treninga u dnevnik. Aplikacija prikazuje napredovanje samo u obliku grafikona, ali

zato nudi i mogućnost praćenja težine i postotka masnoće te prikaz promjena u obliku grafa.

Na slici 4.15 se nalazi prikaz sučelja pojedinih aktivnosti aplikacije.

Page 37: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

34

Slika 4.15. JEFIT – Workout and Fitnes Tracker (Jefit, 2013)

Sljedeća aplikacija naziva se You Are Your Own Gym. Aplikacija je jednostavnog sučelja,

pruža veliki broj vježbi, ali sadrži vrlo malo dodatnih funkcionalnosti. Ono što aplikaciju ističe

od drugih jest video prikaz izvođenja pojedinih vježbi (zahtjeva naknadno skidanje video

sadržaja s Interneta). Aplikacija nema mogućnost kreiranja treninga poput JEFIT-a i aplikacije

koja je razvijena za potrebe rada. Zapisivanje rezultata svodi se na pronalazak pojedine vježbe

te unos rezultata iste. Prikaz napredovanja je moguć samo pregledom dnevnika rezultata, nema

mogućnost prikaza rezultata u obliku grafa. Aplikacija nema više nikakvih dodatnih

mogućnosti. Na slici 4.16 se nalazi prikaz sučelja pojedinih aktivnosti aplikacije.

Slika 4.16. You Are Your Own Gym (Leafcutter Studios, 2013)

Posljednja aplikacija koja će biti opisana je Extreme Fitness Tracker Pro. Aplikacija sadrži sve

funkcionalnosti kao i navedene aplikacije. Omogućuje kreiranje vlastitog treninga te

zapisivanje rezultata unutar dnevnika. Rezultati napredovanja su prikazani u obliku grafa ili

Page 38: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

35

jednostavnim popisom rezultata sortirane po datumu izvođenja. Međutim, za razliku od

opisanih aplikacija ova sadrži mogućnost izračuna dnevnog unosa kalorija te pohranu

sigurnosne kopije svih podataka. Na slici 4.17 se nalazi prikaz sučelja pojedinih aktivnosti.

Slika 4.17. Extreme Fitness Tracker Pro (UnifyLog LLC, 2013)

Page 39: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

36

5. Zaključak

U teorijskom dijelu rada opisana je povijest i arhitektura Android operacijskog sustava,

osnovne komponente Android aplikacije, te prikazani primjeri korištenja istih. Razvoj

aplikacija u Android razvojnom okruženju karakterizira otvorenost, brzina, fleksibilnost i

jednostavnost. Android je danas bez sumnje jedan od najrasprostranjenijih operacijskih sustava

u mobilnom svijetu , a jedan od razloga je Google Play koji sadrži preko milijun aplikacija i

preko tri milijarde preuzimanja.

U praktičnom dijelu rada razvijena je aplikacija koja omogućuje praćenje napredovanja u

teretani. Aplikacija pruža korisniku jednostavno sučelje, mogućnost kreiranje vlastitih treninga

od nekoliko različitih vježbi, te praćenje rezultata treninga pomoću dnevnika. Osim toga,

razvijena aplikacija omogućuje vremensko planiranje treninga, određivanje broja vježbi, odabir

ispravne težine utega prema rezultatima prethodnih treninga pojedinih vježbi itd.

Napredovanje, za pojedine vježbe, je prikazano u obliku grafa koji prikazuje promjene po

tjednim intervalima.

Razvijena aplikacija, u usporedbi sa sličnim aplikacijama, sadrži samo osnovne funkcionalnosti

za praćenja napredovanja, te kako bi ista mogla konkurirati popularnim aplikacijama potrebna

su dodatna proširenja. Dodavanje funkcionalnosti dnevnika i kalkulatora dnevnog unosa

kalorija povećala bi korisnost aplikacije korisnicima kojima nije u cilju dobivanje mišićne

mase, poput korisnika koji žele povećati ili smanjiti tjelesnu težinu, a upravo je za to potrebna

ispravna prehrana. Također je uvijek moguće poboljšati korisničko sučelje, te prilagoditi

sučelje različitim rezolucijama ekrana.

S obzirom na to da aplikacija trenutno posjeduje samo osnovne funkcionalnosti za praćenje

napredovanja, ona je ipak dovoljna za planiranje kvalitetnog treninga, te uz malo volje i truda

rezultati treninga ću biti vidljivi.

Page 40: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

37

Literatura

1. Bucić T.: Baza podataka za elektroničke knjižnice, Diplomski rad, Osijek, 2012.

2. Burke P.: aFileChooser - Android File Chooser, 2013,

https://github.com/iPaulPro/aFileChooser (Učitano: 07.09.2013)

3. Dujmović A.: Upravljanje video nadzorom cestovnog prometa mobilnim uređajem na

android platformi, Diplomski rad, Dubrovnik, 2010.

4. Henriques T.: Powerful Reasons to Use a Workout Log, 2012., http://www.t-

nation.com/readArticle.do?id=5108766 (Učitano: 13.09.2013)

5. IDC: Worldwide Mobile Phone Market Forecast to Grow 7.3% in 2013 Driven by 1 Billion

Smartphone Shipments , 2013,

http://www.idc.com/getdoc.jsp?containerId=prUS24302813 (Učitano: 07.09.2013)

6. Jefit Inc: JEFIT Pro - Workout & Fitness, 2013,

https://play.google.com/store/apps/details?id=je.fit (Učitano: 10.09.2013)

7. Leafcutter Studios: You Are Your Own Gym, 2013,

https://play.google.com/store/apps/details?id=com.leafcutterstudios.yayog (Učitano:

10.09.2013)

8. Kreibich J.: , http://www.slideshare.net/jkreibich/introduction-to-sqlite-the-most-popular-

database-in-the-world (Učitano: 12.09.2013)

9. Meier R: Professional Android 2 Application Development, Wiley Publishing, Inc.,

Indianapolis, Indiana, 2010.

10. Marjanica A.: GPS kolektor – prototip android aplikacije za prikupljanje prostornih

podataka, Zagreb, 2011.

11. Paul R.: , http://arstechnica.com/gadgets/2010/09/sony-ericcson-goes-android-leaves-

nokia-as-only-big-symbian-fan/ (Učitano: 13.09.2013)

12. Penezić D.: SQLite - najraširenija transakcijska baza podataka, 2012.,

http://sistemac.srce.unizg.hr/index.php?id=35&tx_ttnews%5Btt_news%5D=778&cHash=

2e903c58643a650d171ee6e8314e3381 (Učitano: 05.9.2013.)

13. Rubin A.: Where's my Gphone?, 2007., http://googleblog.blogspot.com/2007/11/wheres-

my-gphone.html (Učitano 28.08.2013.)

14. Rowinski D.: Google Play Hits One Million Android Apps, 2013.,

http://readwrite.com/2013/07/24/google-play-hits-one-million-android-

apps#awesm=~ohsgumhgtZ8uvV (Učitano: 13.09.2013)

Page 41: RAZVOJ MOBILNE APLIKACIJE ZA PRAĆENJE NAPREDOVANJA … · 2.1.2. Biblioteke Sljedeći sloj predstavlja sloj biblioteka u Android operacijskom sustavu. To su: (Dujmović, 2010): Surface

38

15. UnifyLog LLC: Extreme Fitness Tracker, 2013,

https://play.google.com/store/apps/details?id=com.unifylog.droid90 (Učitano:

10.09.2013)

16. Wei-Meng L.: Beginning Android Application development, Wiley Publishing, Inc.,

Indianapolis, Indiana, 2011.

17. Wolfe B.: The Number Of Google Play App Downloads Now Exceed Those In Apple's

App Store, 2013, http://appadvice.com/appnn/2013/07/the-number-of-google-play-app-

downloads-now-exceed-those-of-apples-app-store (Učitano: 13.09.2013)