Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
Fakulteta za elektrotehniko, računalništvo in informatiko
Smetanova ulica 17
2000 Maribor, Slovenija
David Mesarič
OSEBNI TRENER NA MOBILNI PLATFORMI ANDROID
Magistrsko delo
Maribor, oktober 2014
Osebni trener na mobilni platform Android
i
NASLOV MAGISTRSKEGA DELA
OSEBNI TRENER NA MOBILNI PLATFORMI ANDROID
Študent: David Mesarič
Študijski program: študijski program 2. stopnje
Smer: Računalništvo in informacijske tehnologije
Mentor: red. prof. dr Peter Kokol
Lektorica: Petra Zupanc
Osebni trener na mobilni platform Android
ii
Osebni trener na mobilni platform Android
iii
ZAHVALA
Zahvaljujem se mentorju red. prof. dr Petru
Kokolu za pomoč in vodenje pri opravljanju
magistrskega dela.
Posebna zahvala velja staršem, ki so mi
omogočili študij.
Osebni trener na mobilni platform Android
iv
OSEBNI TRENER NA MOBILNI PLATFORMI ANDROID
Ključne besede: Osebni trener, mobilna platforma, fitnes, Android, SDK, Java, MySQL
UDK: 316.772.5(043.2)
Povzetek
Cilj magistrske naloge je bil razviti mobilno aplikacijo, ki nam bo pomagala do bolj
učinkovite fitnes vadbe ter do hitrejših in vidnejših rezultatov, predvsem pa pravilnejšega
izvajanja vaj. V aplikacijo smo vključili uporabniški vmesnik in generator, ki bo učinkovito
izdeloval fitnes programe za uporabnike glede na njihove želje.
Opisali smo tudi vsa razvojna okolja, ki so bila potrebna za razvoj te aplikacije.
Osebni trener na mobilni platform Android
v
PERSONAL TRAINER ON MOBILE PLATFORM ANDROID
Key words: personal trainer, mobile platform, fitness, Android, SDK, Java, MySQL
UDK: 316.772.5(043.2)
Abstract
The goal of this thesis was to develop a mobile application that would provide more
efficient strength training, help users achieve quicker and more visible results as well as
show instructions on how to do the exercises the correct way.
The application includes a user interface and a generator which will efficiently construct
fitness programs according to user’s needs.
We also described all the development tools used in the making of this application.
Osebni trener na mobilni platform Android
vi
VSEBINA
1 Uvod ..................................................................................1
1.1 Namen osebnega trenerja .............................................................................................. 1
1.2 Značilnosti zaposlovanja ................................................................................................ 2
1.3 Splošen fitnes trening ..................................................................................................... 2
1.4 Izguba teže in mišična definicija .................................................................................... 3
1.5 Predpostavke in omejitve ............................................................................................... 3
1.6 Struktura magistrskega dela .......................................................................................... 3
2 Razvojno okolje ................................................................4
2.1 Razvojno okolje Eclipse .................................................................................................. 4
2.2 Operacijski sistem Android ............................................................................................. 4
2.3 Programski jezik Java ..................................................................................................... 4
2.4 Android programski razvojni paket ............................................................................... 6
2.5 Android orodja za razvijalce ........................................................................................... 6
2.6 MySql podatkovna baza ................................................................................................. 7
3 Implementacija aplikacije ................................................9
3.1 Programsko okolje ........................................................................................................... 9
3.2 Podatkovna baza ............................................................................................................. 9
3.3 Izdelava grafičnega vmesnika ..................................................................................... 11
3.3.1 Manifest ................................................................................................................... 12
3.3.2 Prijava in registracija ............................................................................................. 14
3.3.3 Glavni del aplikacije ............................................................................................... 17
3.3.4 Viri nizov .................................................................................................................. 26
3.3.5 Podprtost večjezičnosti ......................................................................................... 29
3.4 Izdelava generatorja fitnes programov ....................................................................... 31
4 Rezultati ..........................................................................34
4.1 Registracija novega uporabnika .................................................................................. 34
4.2 Prijava v aplikacijo ......................................................................................................... 35
4.3 Zavihek Domov .............................................................................................................. 36
Osebni trener na mobilni platform Android
vii
4.4 Zavihek Trening ............................................................................................................. 37
4.5 Zavihek Izzivi .................................................................................................................. 38
4.6 Meni gumb Podatki o aplikaciji .................................................................................... 39
4.7 Meni gumb Vodič ........................................................................................................... 40
4.8 Meni gumb Zgodovina treningov ................................................................................. 41
4.9 Meni gumb Vrsta mišic ................................................................................................. 42
4.10 Meni gumb Nastavitve .................................................................................................. 43
4.11 Meni gumb Vaje ............................................................................................................. 44
4.12 Meni gumb Sestavljeni programi ................................................................................. 45
4.13 Generiranje novega programa ..................................................................................... 46
4.14 Izbor že sestavljenega programa ................................................................................ 47
4.15 Prikaz podrobnosti izbrane vaje .................................................................................. 48
5 Težave .............................................................................49
6 Sklep ................................................................................50
7 Literatura, viri .................................................................51
Osebni trener na mobilni platform Android
viii
KAZALO SLIK
Slika 1: ER diagram podatkovne baze ..............................10
Slika 2: Struktura datoteke Manifest .................................13
Slika 3: Element <resources> za niz .................................26
Slika 4: Aplikacijska koda za pridobivanje niza ...............27
Slika 5: XML layout, ki se sklicuje na niz ..........................27
Slika 6: XML datoteka, ki se sklicuje na polje nizov ........27
Slika 7: Aplikacijska koda za pridobivanje polje nizov ....28
Slika 8: XML layout, ki se sklicuje na angleščino ............29
Slika 9: XML layout, ki se sklicuje na poljščino ...............29
Slika 10: Aplikacijska koda za pridobivanje množičnih
nizov .....................................................................................29
Slika 11: Podmape za različne jezike ................................30
Slika 12: Odločitveno drevo ...............................................33
Slika 13: Registracija novega uporabnika ........................34
Slika 14: Vpis uporabnika v aplikacijo ..............................35
Slika 15: Zavihek Domov ....................................................36
Slika 16: Zavihek Trening ...................................................37
Slika 17: Zavihek Izzivi ........................................................38
Slika 18: Podatki o aplikaciji ..............................................39
Slika 19: Vodič .....................................................................40
Slika 20: Pregled zgodovine treningov .............................41
Slika 21: Pregled mišičnih sklopov ...................................42
Slika 22 in 23: Nastavitve ...................................................43
Slika 24: Pregled vseh vaj ..................................................44
Osebni trener na mobilni platform Android
ix
Slika 25: Pregled vseh programov ....................................45
Slika 26: Generiranje novega fitnes programa .................46
Slika 27 in 28: Izbor že sestavljenega programa ..............47
Slika 29: Prikaz fitnes vaj ...................................................48
Osebni trener na mobilni platform Android
x
KAZALO KODE
Primer kode 1: Povezava s podatkovno bazo ..................11
Primer kode 2: Extends in implements .............................14
Primer kode 3: ViewPager ..................................................14
Primer kode 4: LoginTabsAdapter.....................................15
Primer kode 5: Dodajanje zavihkov ...................................15
Primer kode 6: Tab Change Listener .................................16
Primer kode 7: View Change Listener ...............................17
Primer kode 8: Pridobivanje zgodovine s pomočjo
skupnih preferenc ...............................................................18
Primer kode 9: shranjevanje zgodovine s skupnimi
preferencami ........................................................................19
Primer kode 10: List_group layout ....................................20
Primer kode 11: List_item layout .......................................20
Primer kode 12: MyExpandableListViewAdapter .............20
Primer kode 12: Nastavitve prefs.xml ...............................21
Primer kode 13: Polnjenje seznama vaj ............................22
Primer kode 14: Prikaz videa .............................................23
Primer kode 15: Polje možnih izborov za gradnik Spinner
24
Primer kode 16: Populacija gradnikov Spinner ................25
Primer kode 17: Metoda setLocale ....................................31
Primer kode 18: Manifest ....................................................31
Osebni trener na mobilni platform Android
1
1 UVOD
Osebni trener je strokovnjak za fitnes, ki stranki sestavi načrt telesne vadbe in prikaže
izvedbo vaj. Skrbi tudi za njeno motivacijo pri doseganju zastavljenih ciljev in ji daje
povratne informacije. S pomočjo različnih testov fizične zmogljivosti osebni trener oceni
njeno kondicijo. Takšni testi se lahko izvedejo tudi pred začetkom in po zaključku
posameznega programa, da se izmeri strankin napredek. Poleg vadbe osebni trener svoji
stranki svetuje tudi glede splošnega dobrega počutja, zdravja in prehranskih smernic.
Če trener sumi, da ima katera izmed njegovih strank zdravstveno stanje, ki bi lahko
preprečila varno vadbo v vadbenem programu, jo mora napotiti na ustrezni zdravstveni
pregled [1].
1.1 Namen osebnega trenerja
Naloga osebnega trenerja je izboljšati fizično zmogljivost zdravih ljudi.
Rezultat pravilnega vadbenega načrta je lahko izboljšana telesna sestava, fizična
zmogljivost in boljše zdravstveno stanje. Ljudje se odločijo za osebnega trenerja, da bi z
njegovo strokovno pomočjo in motivacijo dosegli takšne rezultate. Trener posveča veliko
pozornosti vadbeni formi, vadbenim rutinam ter prehranskim načrtom svoje stranke.
Raziskave so pokazale, da je trening pri ženskah vplival na vedenjske vzorce, izboljšal
razmerje med koristnostjo in škodljivostjo vadbe (odločitveno ravnotežje) in povečal
zanimanje za izbiro vadbe pred drugimi obveznostmi (načrtovanje samo-učinkovitosti) [3].
Posledica osebnega treninga pri ženskah je večja moč, večja intenzivnost vadbe in večji
napor med vadbo. Čeprav si ženske, ki imajo osebne trenerje, same izbirajo višje
obremenitve, kot tiste ki jih nimajo, so te obremenitve še vedno pod priporočenimi
obremenitvami [1].
Osebni trener na mobilni platform Android
2
1.2 Značilnosti zaposlovanja
Poklic na splošno ni krajevno omejen, saj lahko osebni trenerji delajo tako v fitnesih,
svojih domovih, domovih strank kot tudi preko videa v živo (imenovani tudi »virtualni
osebni trenerji«) ali pa na prostem. Skoraj vsi osebni trenerji delajo v zdravstvenih in fitnes
centrih, ki se nahajajo v zabavni ter rekreacijski industriji ali v civilnih in socialnih
organizacijah [1].
Osebni trenerji se lahko specializirajo za določeno vrsto treninga, filozofijo treninga, tip
izvedbe ali populacijo strank. Večina osebnih trenerjev razvije vadbene načrte za
aerobne, vzdržljivostne in prožnostne vaje. Za aerobne vaje osebni trener določi vrsto,
trajanje in pogostost vadbe. Za vzdržljivostne vaje določi vrsto vadbe, skupni obseg
vadbe, čas počitka, pogostost in intenzivnost vadbe. Osebni trener je lahko vključen tudi
v rutine raztezanja ali druge pristope. Medtem ko nekateri razpravljajo o prehrani,
proteinskih dodatkih in duhovnih praksah s strankami, potekajo razprave ali to sploh
spada v njihovo področje prakse in usposabljanja [1].
1.3 Splošen fitnes trening
Splošen fitnes trening stremi k širšim ciljem splošnega zdravja in dobrega počutja in ne k
ozkim ciljem športnega tekmovanja, velikosti mišic ali pomislekov glede videza. Redni
zmerni vadbeni režim in zdrava prehrana lahko izboljšata splošne pokazatelje dobrega
zdravja, kot so mišični tonus, zdrava koža, lasje in nohti, medtem ko upočasnjujeta
staranje in zmanjšujeta tveganje za različne bolezni ki jih povzroči slaba prehrana in
neaktivnost. Pravilna dieta pomaga izboljšati metabolizem, kar poveča izgorevanje kalorij
[2].
Osebni trener na mobilni platform Android
3
1.4 Izguba teže in mišična definicija
Splošen fitnes trening se lahko uporabi za hitrejšo izgubo teže. Osebni trenerji sestavijo
program, ki je osredotočen na spremembo načina življenja, hkrati pa pomagajo zagotoviti
potrebno motivacijo za uspeh.
Splošen fitnes trening se lahko uporablja tudi za krepitev mišic [2].
1.5 Predpostavke in omejitve
Kot glavno omejitev pri svoji magistrski nalogi vidim, da bo končni rezultat za popolno
delovanje potreboval internetno povezavo za vračanje podatkov na podatkovno bazo.
Prav tako bo končni izdelek omejen na operacijski sistem Android in ga bo mogoče
uporabljati samo na mobilnih napravah.
Aplikacija bo prilagodljiva tudi za prihodnje nadgradnje.
1.6 Struktura magistrskega dela
V drugem poglavju smo opisali tehnologije, ki smo jih potrebovali za izdelavo
magistrskega dela. To so programski jezik Java, Android SDK ter MySQL podatkovna
baza.
Tretje poglavje smo namenili razvoju naše aplikacije. Opisali smo funkcionalnosti, ki smo
jih vključili, ter njihov namen.
V četrtem poglavju smo prikazali rezultate naše aplikacije. Dodali smo tudi slike končnega
izdelka.
Osebni trener na mobilni platform Android
4
2 RAZVOJNO OKOLJE
2.1 Razvojno okolje Eclipse
V računalniškem programiranju je Eclipse integrirano razvojno okolje. Vsebuje osnovni
delovni prostor in razširljiv vtični sistem za prilagajanje okolja. Eclipse se uporablja
predvsem za razvoj Java aplikacij, vendar pa se lahko z uporabo vtičnikov razvojno okolje
Eclipse uporabi tudi za razvoj aplikacij v drugih programskih jezikih kot so ABAP, C, C++,
COBOL, FORTRAN, HASKEL, JavaScript [24].
2.2 Operacijski sistem Android
Android je mobilni operacijski sistem (v nadaljevanju OS), ki je zgrajen na Linuxovem
jedru in ga trenutno razvija Google. Z uporabniškim vmesnikom, ki temelji na direktni
manipulaciji, je Android namenjen predvsem za mobilne naprave s tehnologijo zaslona na
dotik, kot so pametni telefoni in tablični računalniki [3].
Zaslon na dotik je računalniška vhodno-izhodna enota, ki s površino, namenjeno
prikazovanju podatkov, zaznava tudi dotik uporabnikovega prsta ali ustrezno ostrega
predmeta (npr. pisala). To uporabniku omogoča neposredno interakcijo z grafičnimi
elementi na zaslonu za razliko od drugih vhodnih enot (npr. miške), kjer je interakcija
posredna, prek kurzorja [4].
Izvirna koda Androida je na voljo v okviru odprtokodne licence [3].
2.3 Programski jezik Java
Programski jezik Java je bil predstavljen leta 1995 s strani Sun Microsystems in v trenutku
je ustvaril nove možnosti interakcije s spletom [5].
Osebni trener na mobilni platform Android
5
Java je programski jezik, izrecno namenjen za uporabo v porazdeljenem okolju interneta.
Zasnovan je bil, da izgleda kot programski jezik C++, vendar je enostavnejši za uporabo
in uveljavlja objektno orientiran programski model. Java se lahko uporablja za ustvarjanje
dokončanih aplikacij, ki lahko delujejo na posameznem računalniku ali pa so porazdeljene
med strežniki in odjemalci v omrežju. Prav tako je lahko uporabljena za izgradnjo malih
aplikacijskih modulov ali programčkov za uporabo kot del spletnih strani [5].
Glavne značilnosti Jave so:
- Programi, ki jih ustvarimo, so prenosni v omrežju. Izvirni program je preveden v
»bytecode«, ki se lahko izvaja kjerkoli v omrežju na strežniku ali odjemalcu, ki ima
Javansko navidezno napravo. Javanska navidezna naprava interpretira
»bytecode« v kodo, ki bo delovala na pravi računalniški strojni opremi. To pomeni,
da se lahko posamezne razlike v računalniški platformi, kot je na primer dolžina
ukazov, prepoznajo in upoštevajo lokalno kar med izvajanjem programa.
Določanje verzij platforme vašega programa tako ni več potrebno [5].
- Koda je robustna, to pomeni, da za razliko od programov, napisanih v
programskem jeziku C++ in morda nekaj drugih jezikih, Javanski objekti ne morejo
vsebovati sklicev na zunanje podatke. To zagotavlja, da ukazi ne morejo vsebovati
točno določene poti shranjenih podatkov v drugih aplikacijah ali operacijskem
sistemu, saj bi to privedlo do odpovedi programa ali operacijskega sistema.
Javanska navidezna naprava naredi številne preglede vsakega objekta, da
zagotovi celovitost [5].
- Java je objektno orientiran jezik, kar pomeni, da med drugimi značilnostmi lahko
objekt izkoristi, da je del razreda objektov in podeduje kodo, ki je značilna za
razred [5].
- Razen tega, da se izvaja na odjemalcu namesto na strežniku, ima Javanski aplet
druge lastnosti, zasnovane tako, da deluje hitreje [5].
- V primerjavi s programskim jezikom C++ se je programskega jezika Java lažje
naučiti [5].
Osebni trener na mobilni platform Android
6
2.4 Android programski razvojni paket
Android razvoj programske opreme je proces za razvijanje aplikacij, ki bodo delovale na
operacijskem sistemu Android. Aplikacije so po navadi razvite v programskem jeziku Java
s pomočjo paketa razvojnih orodij, imenovanim Android Software Development Kit
(SDK)[6].
Android SDK vključuje celovit nabor razvojnih orodij, kot so razhroščevalnik, knjižnice,
dokumentacija, vzorci kode in vodiči. Trenutne podprte razvojne platforme vsebujejo
računalnike, ki uporabljajo operacijske sisteme Linux, Mac OS X 10.5.8 ali novejše ter
Windows XP ali novejše. Uradno podprto integrirano razvojno okolje (v nadaljevanju IDE),
je Eclipse, ki kot vtičnik uporablja razvojna orodja Android (v nadaljevanju ADT). Poleg
tega lahko razvijalci za urejanje Java in XML datotek uporabijo katerikoli urejevalnik
besedil in nato uporabijo ukazno vrstico, da ustvarijo, zgradijo ter odpravijo napake v
aplikaciji za Android [6].
Izboljšava paketa Android SDK poteka vzporedno s splošnim razvojem Android platforme.
SDK prav tako podpira starejše verzije platform Android, tako da lahko razvijalec usmeri
razvoj svoje aplikacije na starejše naprave. Razvojna orodja so komponente, prenosljive s
spleta. S prenosom najnovejše verzije razvojnega orodja in platforme je omogočen tudi
prenos starejših platform in orodij za testiranje kompatibilnosti s starejšimi verzijami
Android OS [6].
2.5 Android orodja za razvijalce
Android orodja za razvijalce (ADT) je vtičnik za Eclipse, ki omogoča dostop do orodij, ki so
vključena v Eclipse IDE. ADT nam omogoči dostop do številnih funkcij, ki nam pomagajo
pri razvoju Android aplikacij. ADT ponuja grafično-uporabniški vmesnik do številnih
ukazno-vrstičnih SDK orodij kot tudi orodij za oblikovanje uporabniških vmesnikov za hitro
izdelavo prototipov, oblikovanje in gradnjo aplikacijskega uporabniškega vmesnika [7].
ADT ponuja številne funkcije, ki nam omogočajo oblikovanje in gradnjo aplikacijskih
uporabniških vmesnikov. Večina teh funkcij se nahaja v grafičnem urejevalniku postavitve
elementov, ki je dostopen preko ene izmed aplikacijskih XML postavitvenih datotek v
Eclipsu [7].
Osebni trener na mobilni platform Android
7
Urejevalnik grafične postavitve je glavno okno, ki se uporablja za vizualno oblikovanje in
izgradnjo uporabniškega vmesnika. Razdeljeno je v naslednje dele:
- Platno: V sredini urejevalnika je platno, kjer se sproti prikazuje razporeditev
gradnikov. Platno podpira »povleci in spusti« gradnike neposredno iz palete.
Izberemo lahko različne verzije platforme in s tem razporedimo gradnike po platnu.
Vsaka različica platforme ima svoj videz, ki je lahko podoben ali popolnoma
drugačen v primerjavi z drugimi različicami platforme. Platno prav tako omogoča
kontekstno-občutljive ukrepe v orodni vrstici za postavitev, kot je prilagoditev robov
in določitev orientacije [7].
- Pregled: Na desni strani urejevalnika je pregledni pogled, ki prikazuje hierarhični
pogled postavitve gradnikov. Tu lahko spreminjamo pogled. Pregledni pogled
izpostavlja podobne funkcionalnosti kot platno, vendar prikaže postavitev
gradnikov v urejenem seznamu [7].
- Paleta: Na levi strani urejevalnika je paleta, ki zagotavlja nabor gradnikov, ki jih
lahko povlečemo na platno [7].
- Izbirnik konfiguracij: Na vrhu urejevalnika je možnost izbora konfiguracij, ki nam
zagotavlja možnosti za spremembo načina prikazovanja pogleda gradnikov [7].
2.6 MySql podatkovna baza
MySQL podatkovna baza je postala najbolj popularna odprtokodna baza na svetu zaradi
njene zmogljivosti, zanesljivosti in enostavnosti za uporabo. Podatkovna baza MySQL je
bila prvič izdana januarja leta 1998. Prav tako se ta podatkovna baza pogosto uporablja
zanovo generacijo aplikacij, ki temeljijo na skupku odprtokodne programske opreme
LAMP (Linux, Apache, MySQL, PHP / Pearl / Python) [8][9]. Veliko največjih in najhitreje
razvijajočih se svetovnih organizacij, kot so Facebook, Google, Adobe, Lucent in Zappos,
se zanaša na podatkovno bazo MySQL, da prihranijo čas in denar pri delovanju njihovih
obsežnih spletnih strani. MySQL deluje na skoraj vseh platformah, vključno z
operacijskimi sistemi Linux, UNIX in Windows, ter zagotavlja tudi delovanje na večini
programskih jezikov, kot so C, C#, Java, Eiffel, Perl, PHP, Python in Tel [8][10].
MySQL podatkovna baza se kot vse ostale podatkovne baze uporablja za sledenje
spletnih ali programskih podatkov. Tehnični izraz za MySQL je Relation Database
Management System (RDBMS). MySQL je programska oprema, ki neprekinjeno deluje in
Osebni trener na mobilni platform Android
8
omogoča drugim programom, da dostopajo do njenih podatkov. Podatkovna baza je
zgrajena iz tabel, ki so strukturirane tako, da lahko vsebujejo posebne tipe informacij.
Nekatera polja lahko vsebujejo samo števila, medtem ko druga polja samo datume
oziroma druge podatkovne tipe [8][10].
Osebni trener na mobilni platform Android
9
3 IMPLEMENTACIJA APLIKACIJE
Cilj razvoja aplikacije Osebni trener na mobilni platformi Android je bil razviti aplikacijo, ki
uporabnikom glede na vnos podatkov vrne čim učinkovitejši program za vadbo v fitnesu
za dosego njihovih ciljev. Implementirali smo uporabniku prijazen način komuniciranja z
mobilno napravo za oblikovanje učinkovitega fitnes treninga.
Omogočili smo preprosto registracijo uporabnikov za lažje sledenje njihovim napredkom.
Izdelali smo grafični vmesnik, kjer lahko uporabnik izbira med že izdelanimi fitnes
programi ter številnimi bolj ali manj zahtevnimi vajami. Izdelali smo tudi generator vaj, ki
učinkovito izdeluje fitnes programe za uporabnike glede na njihove želje.
V tem poglavju smo podrobneje opisali ter slikovno prikazali implementacijo zgoraj
naštetih funkcionalnosti.
3.1 Programsko okolje
Za razvoj aplikacije smo uporabili programski jezik Java ter paket razvojnih orodij Android
SDK. Za shranjevanje podatkov smo uporabili podatkovno bazo MySQL.
3.2 Podatkovna baza
Za skoraj vsako večjo aplikacijo stoji tudi podatkovna baza. Da bi lažje sledili številu, vrsti
in napredku uporabnikov ter s pridobljenimi podatki omogočili hitre izboljšave aplikacije,
smo podatkovno bazo uporabili tudi sami. Izbrali smo podatkovno bazo MySQL.
Za našo aplikacijo smo najprej določili tabele oziroma entitete. Entitete ali predmeti
podatkov so objekti opazovanja. Objekt opazovanja pa je vse, kar lahko enolično
identificiramo, izoliramo od okolice in opišemo. Entitete identificiramo tako, da jim
določimo ime, lastnosti entitete in vrednost lastnosti. Ker smo želeli, da aplikacija deluje
čim bolj samostojno in za delovanje ne potrebuje neprestanega povezovanja na internet,
saj bi s tem v veliki meri zmanjšala uporabnost, smo se odločili, da v podatkovno bazo
Osebni trener na mobilni platform Android
10
shranjujemo le pomembne podatke [11]. Zato smo določili pet entitet: Uporabnik, Spol,
Email, Država ter Napredek.
Tem entitetam smo nato določi atribute. Atribut (podatkovni element ali element podatkov)
je tisti podatek, ki z vidika vsebine, torej z vidika uporabnika, ni več členljiv oziroma ga ni
možno ali smiselno razstaviti na manjše dele [11].
Da lahko dostopamo do podatkov iz različnih entitet, smo vse entitete med seboj povezali
z relacijskimi povezavami, ki nam pokažejo odnos med dvema entitetama, ter določili
primarne, sekundarne in zunanje ključe. Relacije med entitetami morajo biti ena proti
mnogo oziroma mnogo proti ena.
Da lahko iz naše aplikacije dostopamo do podatkovne baze se je potrebno z bazo najprej
povezati. To povezavo dosežemo s pomočjo tako imenovanih povezovalnih nizov
(connection strings). Povezavo z bazo moramo vzpostaviti pred vsakim dostopanjem do
podatkov ter jo po končanem delu tudi prekiniti. Ko želimo pridobiti podatke iz podatkovne
baze, moramo vnaprej določiti tabelo, oziroma tabele, v katerih se ti podatki nahajajo. To
storimo z uporabo poizvedbenih stavkov [8].
Slika 1: ER diagram podatkovne baze
Osebni trener na mobilni platform Android
11
Primer kode 1: Povezava s podatkovno bazo
3.3 Izdelava grafičnega vmesnika
Ker se določeni uporabniški podatki shranjujejo v podatkovno bazo, je bil prvi korak
izdelave aplikacije uporabniku omogočiti možnost registracije novega računa ter samo
prijavo v aplikacijo, ki mu bo služila kot pomočnik pri treningu. Ker smo želeli, da aplikacija
deluje čim bolj neodvisno, ter da za delovanje ne potrebuje nenehnega dostopa do
interneta, je prijava oziroma dostop do baze podatkov potreben le, ko uporabnik prvič
uporablja aplikacijo, torej ko se registrira in v primeru kreiranja novega tedenskega fitnes
programa.
Za razliko od drugih programskih paradigem, v katerih se aplikacije poganjajo z glavno
metodo main(), Android sistem kodo zaganja na tako imenovanih aktivnostih oziroma
Activity s sklicevanjem na posebne metode povratnih klicev, ki ustrezajo posebnim
stopnjam njihovega življenjskega cikla [12].
Za Android aplikacije je značilno, da sprememba konfiguracije, na primer zasuk telefona
vodoravno in podobno, povzroči zaustavitev, ponovni zagon in ponastavitev videza
aktivnosti z novimi konfiguracijskimi parametri. To povzroči izgubo vseh informacij o stanju
aktivnosti, ki je bila prvotno aktivna, zato smo uporabili tako imenovane fragmente [13].
Fragment predstavlja vedenje ali del uporabniškega vmesnika v aktivnosti. V posamezni
aktivnosti lahko združimo več fragmentov in s tem ustvarimo več-okenski uporabniški
Osebni trener na mobilni platform Android
12
vmesnik ter iste fragmente uporabimo v več aktivnostih. Fragment si torej lahko
predstavljamo kot modularni del aktivnosti, ki ima svoj življenjski krog in ga lahko dodamo
neki aktivnosti med njenim delovanjem [14].
Fragment mora vedno biti vključen v aktivnost in njegov življenjski cikel je zmeraj odvisen
od življenjskega cikla aktivnosti, v katero je vključen. Na primer, če se aktivnost zaustavi,
se zaustavijo tudi vsi fragmenti, ki so v njej. Prav tako se uničijo vsi fragmenti, ko se uniči
aktivnost. Med potekom aktivnosti pa lahko s fragmenti manipuliramo po želji. Ko
menjamo fragmente v aktivnosti, lahko tudi shranimo njihovo zaporedje, tako se lahko s
pritiskom na gumb nazaj kadarkoli vrnemo na prejšnji fragment [14].
3.3.1 Manifest
Vsaka Android aplikacija mora imeti v svoji korenski mapi datoteko AndroidManifest.xml (s
točno takšnim imenom), v kateri so shranjene bistvene informacije o aplikaciji, ki jih sistem
potrebuje, preden lahko požene kakršno koli kodo aplikacije. Med drugim manifest naredi
sledeče [25]:
- Poimenuje Java paket za aplikacijo. Ime paketa služi kot edinstven identifikator za
aplikacijo [25].
- Opisuje aplikacijske komponente, kot so aktivnosti in storitve. Poimenuje razrede,
ki izvajajo vsakega od sestavnih delov, in objavi njihove zmogljivosti. Te izjave
Android sistem obvestijo, katere so komponente in pod kakšnimi pogoji se lahko
zaženejo [25].
- Določa, kateri proces bo gostil aplikacijske komponente [25].
- Razglasi, katera dovoljenja mora aplikacija imeti, da lahko dostopa do zaščitenih
delov in komunicira z drugimi aplikacijami [25].
- Prav tako razglasi, katera dovoljenja so potrebna za komunikacijo z aplikacijskimi
komponentami [25].
- Vsebuje seznam knjižnic, s katerimi mora biti aplikacija povezana [25].
Slika 12 spodaj prikazuje splošno strukturo datoteke manifest in vsakega elementa, ki ga
lahko vsebuje [25].
Osebni trener na mobilni platform Android
13
Slika 2: Struktura datoteke Manifest
Osebni trener na mobilni platform Android
14
3.3.2 Prijava in registracija
Če se torej vrnemo na prijavo ter registracijo uporabnikov. Ustvarili smo aktivnost, ki smo
jo poimenovali Login. Ker pa uporabljamo fragmente, smo to aktivnost razširili v aktivnost
s fragmenti ter ji vključili izvajanje ActionBar.TabListener, saj aktivnost uporablja zavihke.
Primer kode 2: Extends in implements
Vsaki aktivnosti oziroma fragmentu lahko spreminjamo njegov videz oziroma postavitev
elementov (layout) v njihovih XML datotekah, ki se nahajajo pod RES => LAYOUT. Naši
aktivnosti smo dodali element ViewPager, ki skrbi za animacijo premika ekrana iz enega
fragmenta na drugega.
Primer kode 3: ViewPager
Da pa so fragmenti vidni v zavihkih, smo ustvarili tudi razred FragmentPagerAdapter, ki
skrbi za samo povezavo med fragmenti ter zavihki.
Osebni trener na mobilni platform Android
15
Primer kode 4: LoginTabsAdapter
Za prikaz zavihkov ni bilo potrebe po uporabi drugih uporabniško-vmesnih elementov, kot
je TabHost. Action bar ima vgrajeno sposobnost dodajanja zavihkov, ki smo jo omogočili z
uporabo metode setNavigationMode(ActionBar.NAVIGATION_MODE_TABS) v naši
aktivnosti.
Primer kode 5: Dodajanje zavihkov
Osebni trener na mobilni platform Android
16
Potrebno je bilo ustvariti še fragmenta za prijavo ter registracijo novih uporabnikov, ki smo
jima dodali aktivnosti Login ter spremenili videz njunega layouta. V layout fragmenta za
prijavo smo tako dodali dva textView gradnika, in sicer Username in Password, dva
editText gradnika, kjer uporabnik vpiše svoje geslo in uporabniško ime, ter gradnik button,
ki služi za prijavo uporabnika. V layout za registracijo pa smo poleg vseh teh elementov
dodali še gradnike TextView ter editText za ime, priimek, elektronski naslov in preverjanje
gesla uporabnika.
Da se pogled spremeni ob pritisku na zavihek ali premiku zaslona s prstom, torej da se
fragmenta zamenjata, je bilo potrebno dodati še funkcije, ki skrbijo za spremembe. Te
funkcije smo dodali v glavni aktivnosti Login.
Primer kode 6: Tab Change Listener
Osebni trener na mobilni platform Android
17
Primer kode 7: View Change Listener
3.3.3 Glavni del aplikacije
Ko se uporabnik uspešno prijavi v aplikacijo, se prikaže glavni del aplikacije. Razdeljen je
na tri zavihke: Domov, Trening in Izzivi. V prvem zavihku, torej zavihku Domov, ki se
prikaže tudi ob zagonu te nove aktivnosti, imamo meni, kjer lahko uporabnik izbira med
različnimi možnosti, kot so podrobnosti o aplikaciji, vodič, zgodovina treningov, nastavitve,
pregled vaj in pregled že ustvarjenih fitnes programov. V zavihku Trening lahko izberemo
že sestavljen program ali ustvarimo svojega. Prav tako je tu prikazan trenutno izbrani
program. V zadnjem zavihku, izzivi, imamo prikazanih nekaj težjih vaj, s katerimi lahko
tudi primerjamo naš napredek.
Ustvarili smo novo aktivnost ter jo poimenovali HomeScreen. Kot že prej aktivnosti Login,
smo tudi tej aktivnosti v layout dodali ViewPager, ki skrbi za premikanje med zavihki. Prav
tako smo ustvarili nov razred FragmentPagerAdapter, ki skrbi za povezavo med fragmenti
ter zavihki in uporabili metodo setNavigationMode() za dodajanje zavihkov.
Ustvarili smo tri nove fragmente: HomeFragment, TrainingFragment in
ChallengesFragment, za vsak zavihek po enega, ter uredili njihove layoute.
HomeFragment, kot smo že omenili, vsebuje meni ter je ob zagonu aktivnosti viden
fragment. Želeli smo izdelati meni, ki bo čim bolj enostaven za uporabo. V layout smo
Osebni trener na mobilni platform Android
18
dodali prostor za sliko ter uporabnikove podatke. Pod temi podatki smo ustvarili tabelo
gumbov, ki služi kot meni, ter slikovno prikazali njihov namen. Pritisk na posamezen gumb
odpre nov fragment, ki prikazuje željen izbor iz menija. Podrobne funkcionalnosti menija:
- Podatki o aplikaciji: Pritisk na ta gumb v meniju odpre nov fragment
AboutFragment. Layout tega fragmenta vsebuje gradnik EditText, kjer lahko
najdemo avtorja in trenutno verzijo aplikacije.
- Vodič: Ker je aplikacija obsežna in uporabniku nudi različne koristne nastavitve,
smo za lažje učenje dela z aplikacijo dodali možnost vodiča. Ob pritisku meni
gumba Vodič, se odpre nov fragment z imenom TutorialFragment, ki vsebuje
kratek video z razlago, kako se uporabljajo posamezne funkcionalnosti in kje jih
lahko najdemo.
- Zgodovina treningov: Pritisk na gumb za zgodovino treningov odpre nov fragment
z imenom PreferenceHistoryFragment. Ta funkcionalnost uporabniku omogoča, da
sledi svojemu napredku.
Android zagotavlja mnogo možnosti shranjevanja aplikacijskih podatkov. Rešitev,
ki jo izberemo, je odvisna od naših potreb, na primer ali bi morali biti podatki
zasebni za našo aplikacijo ali dostopni drugim aplikacijam in koliko prostora
podatki potrebujejo. Podatke je mogoče shranjevati z uporabo skupne preference,
notranjega pomnilnika (pomnilnika naprave), zunanjega pomnilnika, SQlite
podatkovne baze ali omrežne povezave. Mi smo izbrali shranjevanje s pomočjo
skupne preference [15].
Razred SharedPreferences ponuja splošen okvir, ki omogoča shranjevanje in
pridobivanje podatkov, kjer sta podana ključ, s katerim podatke prepoznamo, in
same vrednosti podatkov [15].
Primer kode 8: Pridobivanje zgodovine s pomočjo skupnih preferenc
Osebni trener na mobilni platform Android
19
Primer kode 9: shranjevanje zgodovine s skupnimi preferencami
- Vrsta mišic: S pritiskom na ta gumb se odpre nov fragment z imenom
ShowAllWorkoutsFragment. Tu lahko uporabnik vidi, kakšne vrste mišic obstajajo,
kako se imenujejo ter kje na telesu se nahajajo.
V layout fragmenta smo dodali gradnik ExpandableListView, kjer lahko brskamo
ter izbiramo med različnimi vrstami mišic, in gradnik ImageView, ki prikazuje
izbrano mišico.
ExpandableListView oziroma razširljiv seznam je pogled, ki prikazuje elemente v
navpičnem premikajočem dvoslojnem seznamu. Razlika med razširjenim in
navadnim seznamom je, da prvi dovoljuje razširitev v dvoslojno raven, to pomeni,
da lahko ima vsaka skupina svojo podskupino [16].
Naredili smo dva nova layouta: prvi je list_group.xml, ki služi kot element za prikaz
v glavnem seznamu, drugi pa list_item.xml, ki služi kot element za prikaz v
podseznamu. Ustvariti je bilo potrebno tudi nov adapter, ki smo ga poimenovali
MyExpandableListViewAdapter ter ga razširili tako, da lahko upravlja z razširjenim
seznamom.
Osebni trener na mobilni platform Android
20
Primer kode 10: List_group layout
Primer kode 11: List_item layout
Primer kode 12: MyExpandableListViewAdapter
Osebni trener na mobilni platform Android
21
V fragmentu je bilo potrebno seznam napolniti s podatki, ki se bodo prikazovali, ter
dodati setOnChildClickListener, ki skrbi, da se ob kliku na element v podseznamu
prikaže pravilna slika, ki predstavlja izbrani element.
- Nastavitve: S pritiskom na gumb za nastavitve se odpre nov fragment, ki smo ga
poimenovali PreferencesOptionsFragment. Tudi za shranjevanje nastavitev smo
uporabili skupne preference.
Ustvarili smo novo XML datoteko prefs.xml, ki služi kot prikaz nastavitev. V
nastavitvah lahko uporabnik spremeni svoje ime, starost, težavnostno stopnjo,
teme ozadja in jezik.
Primer kode 12: Nastavitve prefs.xml
Osebni trener na mobilni platform Android
22
- Vaje: S pritiskom na gumb za prikaz vaj se odpre nov fragment, imenovan
ShowAllWorkoutsFragment. Layout tega fragmenta vsebuje gradnik ListView, v
katerem so shranjene vse vaje, iz katerih je mogoče generirati fitnes program.
Prav tako se ob kliku na posamezni element v seznamu sproži akcija, ki odpre nov
fragment z imenom ShowExampleFragment, ki prikaže video, težavnost, ime,
nasvet, vrsto mišic ter opis pravilne izvedbe izbrane vaje.
Gradnik seznam je pogled, ki prikazuje elemente v navpičnem premikajočem
seznamu. Elementi seznama se samodejno naložijo v seznam s pomočjo
adapterja, ki potegne vsebino iz vira, kot so polje elementov ali podatkovne baze,
in jo prenese v pogled, ki se nahaja v seznamu [17].
Naš seznam s pomočjo adapterja napolnimo z imeni vaj iz več dimenzionalnega
polja, kjer se nahajajo vsi podatki o fitnes vajah.
Primer kode 13: Polnjenje seznama vaj
Prav tako dodamo dogodek onItemClick, ki zazna klik na posamezni element v
seznamu. Če pride do klika, si aplikacija zapomni ime vaje, ki je bila izbrana, in v
fragmentu ShowExampleFragment odpre video pravilne izvedbe vaje ter njen opis.
Za prikaz videa smo uporabili MediaController. Pogled vsebuje kontrole
MediaPlayer. Običajno vsebuje gumbe kot so predvajaj, pavza, previjanje nazaj,
hitro naprej in drsnik o napredku. Skrbi za sinhronizacijo kontrole s stanjem video
predvajalnika [18].
Način za uporabo tega razreda je, da ga sprožamo programsko. MediaController
bo ustvaril privzet nabor kontrol in jih dal v okno na vrh naše aplikacije. Okno bo
izginilo, če bo neaktivno več kot tri sekunde in se spet pojavilo ob dotiku. Zato smo
v naši aplikaciji dodali, da se video ponovno zavrti, ko pride do konca [18].
Osebni trener na mobilni platform Android
23
Primer kode 14: Prikaz videa
- Programi: S pritiskom na gumb Programi, se odpre nov fragment, ki smo ga
poimenovali AllWorkoutProgramsFragment. Ta fragment služi za prikaz vseh že
sestavljenih fitnes programov, ki smo jih pripravili za uporabnike naše aplikacije. V
layout tega fragmenta smo dodali gradnik ListView, v katerega smo s pomočjo
adapterja pridobili podatke o fitnes programih. Ob kliku na posamezen program v
seznamu se nam odpre nov fragment PrikazFitnesProgramaFragment, kjer lahko
uporabnik vidi vse vaje, ki jih izbrani program vsebuje, ter njihovo tedensko
razporeditev.
Drugi zavihek, torej zavihek Workout, služi za izbor že obstoječih vadbenih programov
oziroma ponuja možnost za sestavo svojega fitnes programa ter grafično predstavitev le-
tega.
V layout fragmenta WorkoutFragment, ki služi za prikaz zavihka Workout smo dodali
gradnik ListView, ki je namenjen za prikaz fitnes vaj za izbrani dan v tednu ter dva
gradnika Button. Prvi v primeru, da nismo zadovoljni z izbranim programom, le-tega
izbriše, drugi pa odpre novo aktivnost s fragmentom kjer lahko izberemo oziroma
generiramo nov fitnes program.
Osebni trener na mobilni platform Android
24
Če želi uporabnik izbrati nov program s pritiskom na gradnik Button, ki služi za pridobitev
novega fitnes programa, se odpre nova aktivnost, ki vsebuje dva fragmenta
GenerateNewProgramFragment in ChooseNewProgramFragment.
Fragment GenerateNewProgramFragment se prikaže ob zagonu nove aktivnosti in služi
kot vmesnik za sestavo novega fitnes programa po uporabnikovih željah. Layout tega
fragmenta vsebuje osem gradnikov Spinner, ki služijo za izbor sklopov mišic, ki jih
uporabnik želi vključiti v svoj fitnes program, ter gradnik Button, s katerim zaženemo
proces generiranja novega programa s pomočjo dreves, ki je podrobneje opisan v
podpoglavju 3.3.3.
Gradnik Spinner zagotavlja hiter način izbora ene vrednosti iz niza. V privzetem stanju
Spinner prikazuje svojo trenutno izbrano vrednost. Z dotikom Spinnerja se nam prikaže
spustni meni z vsemi drugimi razpoložljivimi vrednostmi, iz katerih lahko uporabnik izbere
novo privzeto vrednost [19].
Izbira, ki jo opredelimo Spinnerju, lahko pride iz katerega koli vira, vendar pa mora biti
pridobljena preko SpinnerAdapter, kot je na primer ArrayAdapter, če so podatki pridobljeni
iz polja, oziroma CursorAdapter, če so podatki pridobljeni iz podatkovne baze [19].
V primeru naših gradnikov Spinner so možne izbire že v-naprej določene, zato smo njihov
izbor zagotovili s pomočjo polja nizov v datoteki strings.xml. Da smo Spinnerje napolnili s
temi podatki, smo v fragmentu ustvarili nov adapter.
Primer kode 15: Polje možnih izborov za gradnik Spinner
Osebni trener na mobilni platform Android
25
Primer kode 16: Populacija gradnikov Spinner
Če se odločimo za že sestavljen program, izberemo drugi zavihek, ki trenutni fragment
zamenja s fragmentom ChooseNewProgramFragment. Layout tega fragmenta vsebuje
gradnik RadioGroup, ki vsebuje gradnike RadioButtons ter dva gradnika Button.
Gradniki RadioButtons uporabniku omogočajo izbiro ene možnosti v sklopu. Ker pa se
med seboj izključujejo, jih je potrebno dodati v gradnik RadioGroup. S tem dosežemo, da
sistem zagotavlja izbor le enega gradnika RadioButton naenkrat [20].
V našem fragmentu gradniki RadioButtons služijo za izbor posameznega fitnes programa.
Če si želimo podrobneje ogledati, katere vaje posamezen program vsebuje, obkljukamo
gradnik RadioButton, ki predstavlja ta program, ter pritisnemo gradnik Button za prikaz
izbranega programa. Odpre se nov fragment z imenom ShowNewProgramFragment, ki
vsebuje gradnik ListView, ki je napolnjen s podatki izbranega programa za določen dan v
tednu.
Osebni trener na mobilni platform Android
26
Tretji zavihek, zavihek Izzivi, služi za prikaz nekaj težjih fitnes vaj, s katerimi lahko
uporabnik meri svoj napredek.
V layout fragmenta za izzive smo dodali gradnik ListView, ki služi kot seznam že v naprej
izbranih vaj, ki so po težavnosti zahtevnejše izvedbo.
Če želimo pogledati določeno vajo, se ob kliku na izbrano vajo odpre fragment
ShowExampleFragment, ki smo ga že omenili, in prikaže video ter podroben opis pravilne
izvedbe izbrane fitnes vaje.
3.3.4 Viri nizov
Viri nizov za našo aplikacijo ponujajo besedne nize z dodatnim opcijskim oblikovanjem
teksta. Obstajajo trije tipi virov, ki lahko aplikaciji ponudijo nize. To so niz, polje nizov in
množični nizi. Lokacija virov se nahaja v RES/VALUES/IME_DATOTEKE.xml. Ime
datoteke je poljubno [22].
Nizi so preprosti viri, ki so navedeni z uporabo vrednosti, ki je v imenu atributa in ne v
imenu XML datoteke. Torej lahko vire nizov združujemo z drugimi preprostimi viri v eni
XML datoteki pod enim elementom <resources> [22].
Prvi tip, torej niz, je XML vir, ki ponuja enoten niz, na katerega se lahko sklicujemo iz
aplikacije ali drugih datotečnih virov, kot so XML layouti [22].
Elementa, ki se nahajata v tem viru, sta <resources> in <string>. Element <resources>
mora biti korensko (root) vozlišče in ne vsebuje atributov. Element <string> je niz, ki lahko
vključuje oblikovne oznake. Ima en atribut name, ki ga uporabimo kot identifikacijo vira
[22].
Slika 3: Element <resources> za niz
Osebni trener na mobilni platform Android
27
Slika 4: Aplikacijska koda za pridobivanje niza
Slika 5: XML layout, ki se sklicuje na niz
Drugi tip, torej polje nizov, je XML vir, ki ponuja nabor nizov, na katere se lahko sklicujemo
iz aplikacije.
Elementi, ki se nahajajo v tem viru, so <resources>, <string-array> in <item>. Element
<resources> mora biti korensko (root) vozlišče in ne vsebuje atributov. Element <string-
array> definira polje nizov, tako da vsebuje enega ali več elementov <item>. Ima en
atribut name, ki ga uporabimo kot identifikacijo vira. Element <item> je niz, ki lahko
vključuje oblikovne oznake. Vrednost je lahko sklic na drug niz vira. Prav tako mora biti
otrok elementa <string-array> in ne vsebuje atributov [22].
Slika 6: XML datoteka, ki se sklicuje na polje nizov
Osebni trener na mobilni platform Android
28
Slika 7: Aplikacijska koda za pridobivanje polje nizov
Tretji tip, torej množični niz, je XML vir, ki nosi različne nize za pluralizacijo. Različni jeziki
imajo različna slovnična pravila o množini. V angleščini, na primer, je količina ena
poseben primer. Razlika med ednino in množino je zelo pogosta. Drugi jeziki pa imajo bolj
podrobne razlike. Celoten sklop, podprt s strani Androida, je nič, ena, dva, nekaj, veliko in
ostalo [22].
Pravila za odločitev, kateri primer uporabiti za določen jezik in slovnično število, je lahko
zelo zapletena, zato Android ponuja metode, kot so getQuantityString(), ki izberejo
ustrezen vir [22].
Odločitev, kateri niz uporabiti je, odvisna izključno od slovnične nujnosti. V angleškem
jeziku bo niz za nič spregledan, čeprav bo slovnično število nič, saj nič v angleškem jeziku
ni slovnično različno od dva ali katerega koli drugega števila, razen ena (zero books, one
book, two books, …). Nasprotno, v korejščini, bo uporabljen le niz ostalo [22].
Elementi, ki se nahajajo v tem viru, so <resources>, <plurals> in <item>. Element
<resources> mora biti korensko (root) vozlišče in ne vsebuje atributov. Element <plurals>
je zbirka nizov, od katerih je en niz določen glede na količino nečesa. Vsebuje enega ali
več elementov <item>. Ima en atribut name, ki ga uporabimo kot identifikacijo vira.
Element <item> je množičen ali posamezen niz. Vrednost je lahko sklic na drug niz vira.
Prav tako mora biti otrok elementa <plurals> in vsebuje atribut quantity, ki lahko ima
vrednost zero, one, two, few, many in other. [22].
Osebni trener na mobilni platform Android
29
Slika 8: XML layout, ki se sklicuje na angleščino
Slika 9: XML layout, ki se sklicuje na poljščino
Slika 10: Aplikacijska koda za pridobivanje množičnih nizov
3.3.5 Podprtost večjezičnosti
Vedno je dobra odločitev, da ločimo besedne nize iz uporabniškega vmesnika aplikacije in
jih damo v zunanjo datoteko. Android nam to dovoljuje z uporabo map v vsakem Android
projektu [23].
Osebni trener na mobilni platform Android
30
Če ustvarite nov projekt z uporabo Android SDK orodij, ta orodja ustvarijo mapo /res. V
mapi /res so podmape za različne vrste virov. Tu najdemo tudi nekaj privzetih map, kot je
na primer /res/values/strings.xml, ki vsebujejo vrednosti besednih nizov [24].
Odločili smo se, da aplikaciji poleg slovenskega dodamo še angleški jezik in tako
omogočimo uporabo aplikacije tudi uporabnikom, ki ne govorijo slovensko. Ker smo opis
vseh funkcionalnosti ter za tekst vseh oznak v uporabniškem vmesniku uporabljali le poti
do samih besednih nizov, ki smo jih shranili v datoteki /value, nismo imeli velikih težav pri
vključitvi še enega jezika.
Potrebno je bilo ustvariti dodatno podmapo v mapi /res, ki smo jo poimenovali value-en. V
to mapo smo skopirali vse datoteke, ki jih je vsebovala mapa value, in prevedli vse
besedne nize teh datotek v angleški jezik.
Slika 11: Podmape za različne jezike
Nato je bilo potrebno samo še dodati kodo, ki ob izbiri jezika v nastavitvah osveži našo
aplikacijo ter uporabi pravilno mapo value. Ustvarili smo metodo setLocale(String lang), ki
kot vhodni parameter sprejme končnico mape value torej »en« ali »sl«. Za vsako aktivnost
smo morali v manifest dodati tudi kodo, ki se sproži ob spremembi.
Osebni trener na mobilni platform Android
31
Primer kode 17: Metoda setLocale
Primer kode 18: Manifest
3.4 Izdelava generatorja fitnes programov
Če želimo ustvariti nov fitnes program, kot smo opisali že v podpoglavju 3.3.2, najprej
izberemo vse sklope mišic, ki jih želimo vključiti v naš program. Ko zaključimo z izborom,
se zažene generator, ki s pomočjo odločitvenih dreves pridobi nabor vaj, ki se ujemajo z
našim izborom, ter nekaj teh vaj razporedi skozi tedenski plan vadbe.
Odločitveno drevo je orodje odločanja, ki uporablja drevesu podoben graf ali odločitveni
model in njihove možne posledice. Je eden od načinov za prikaz algoritma [21].
Odločitvena drevesa so pogosto uporabljena pri operacijskih raziskavah, predvsem pri
analizi odločitev, da pomagajo opredeliti strategijo, ki se bo najbolj približala cilju [21].
Odločitveno drevo ima strukturo diagrama poteka, v katerem vsako notranje vozlišče
predstavlja preizkus atributa (na primer ali je zunaj sončen ali oblačen dan), vsaka veja
Osebni trener na mobilni platform Android
32
predstavlja rezultat preizkusa in vsak list vozlišča predstavlja možne rezultate. Pot od
korena do lista predstavlja klasifikacijska pravila [21].
Da pa generator sestavi program, ki je najbolj primeren za uporabnika in se najbolj približa
njegovim željam, smo za atribute v odločitvenem drevesu poleg sklopov mišic, ki jih je
izbral, dodali še starost in napredek uporabnika.
Vhodni parameter v korenu drevesa so vse obstoječe vaje. Prvi preizkus atributa je
odločitev ali izbrana vaja spada v sklop mišic, ki jih je uporabnik izbral. Če spada, se kot
drugi preizkus atributa preveri starost uporabnika. Starostne skupine smo razdelili v tri
skupine. Prva starostna skupina je do petnajst let. To skupino smo dodali, ker v teh letih ni
priporočljivo dvigovati težkih uteži, saj to preprečuje oziroma lahko popolnoma ustavi rast
kosti. Zato so rezultat tega preizkusa samo vaje, kjer se uporablja samo lastna teža
uporabnika. Druga starostna skupina je od petnajst do šestdeset let in lahko izvaja vaje.
Tretja starostna skupina je nad šestdeset let. Tu kot rezultat preizkusa atributov
nadaljujejo vaje, katerih poudarek je na raztezanju in kardio treningu.
Kot tretji preizkus na atribut imamo napredek uporabnika. Kot smo že omenili, ima vsaka
vaja določeno težavnost, prav tako pa merimo napredek uporabnika. Napredek smo
razdelili na tri dele, začetnik (lažje vaje), izkušen uporabnik (srednje težke vaje) in
profesionalec (težje vaje).
Ko vse vaje zaključijo zgoraj opisan proces, kot rezultat dobimo nabor vaj, ki ustrezajo
fitnes programu. Ker je teh vaj po vsej verjetnosti več, kot jih potrebujemo za tedenski
program, jih moramo nekaj še izločiti. To storimo v delu kode, ki je zadolžen za sestavo
programa.
Osebni trener na mobilni platform Android
33
Slika 12: Odločitveno drevo
Pri sestavi fitnes programa stremimo k temu, da vsak dan treniramo en sklop mišic ter
trebušne in hrbtne mišice. Če uporabnik ne izbere dovolj sklopov mišic, za enakomerno
razporeditev preko tedna, se cikel ponovi.
Osebni trener na mobilni platform Android
34
4 REZULTATI
V tem poglavju kot rezultate opišemo in prikažemo videz naše aplikacije.
4.1 Registracija novega uporabnika
Ob zagonu naše aplikacije se najprej odpre okno, ki služi za prijavo ter registracijo novih
uporabnikov. V primeru, da aplikacijo uporabljamo prvič, moramo pridobiti uporabniško
ime in nastaviti svoje geslo, zato se je potrebno najprej registrirati. Vnesti moramo ime,
priimek, uporabniško ime, elektronski naslov in geslo. Ob vsaki registraciji novega
uporabnika je potrebna internetna povezava, saj mora aplikacija dostopati do podatkovne
baze, ki se nahaja na strežniku.
Slika 13: Registracija novega uporabnika
Osebni trener na mobilni platform Android
35
4.2 Prijava v aplikacijo
Če smo že registrirani in želimo le dostopati do naše aplikacije, se s klikom na gumb
Prijava v akcijski vrstici ali preprosto z drsnim premikom prsta po ekranu premaknemo na
okno, ki služi kot prijava uporabnika v aplikacijo. Za prijavo v aplikacijo ne potrebujemo
dostopa do interneta, saj se pri uspešni registraciji uporabniško ime in geslo shrani v
aplikacijo, vendar pa nas aplikacija opozori v primeru, da nimamo dostopa do interneta in
uporabljamo funkcionalnosti, ki zahtevajo dostop do podatkovne baze. Za prijavo v
aplikacijo moramo vnesti le uporabniško ime in geslo. Če smo geslo ali uporabniško ime
pozabili, lahko s klikom na gumb »pozabil geslo« le-tega ponovno pridobimo na
elektronski naslov.
Slika 14: Vpis uporabnika v aplikacijo
Osebni trener na mobilni platform Android
36
4.3 Zavihek Domov
Ob uspešni prijavi v aplikacijo se nam odpre okno z menijem ter podatki uporabnika. To
okno uporabniku služi kot glavni vmesnik aplikacije. Od tu lahko dostopa do nastavitev,
podatkov o fitnes vajah, ki so mu na voljo, vodiča, ki mu pomaga pri razumevanju
aplikacije, fitnes programov, ki so že sestavljeni, zgodovine svojih treningov, ki se vsak
teden shranjujejo, in vseh sklopov mišic, ki jih lahko s fitnes vajami trenira.
Slika 15: Zavihek Domov
Osebni trener na mobilni platform Android
37
4.4 Zavihek Trening
S pritiskom na gumb Trening v akcijski vrstici ali z drsnim premikov prsta po ekranu se
premaknemo na drugi zavihek, ki služi kot glavni uporabniški vmesnik za tedensko
telovadbo. V tem oknu imamo prikazan tedenski fitnes program. V primeru, da se je
uporabnik šele registriral v aplikacijo ali pa je tedenski program potekel, lahko iz tega okna
dostopa do generatorja novih fitnes programov ali pa si preprosto izbere nov že sestavljen
program.
Slika 16: Zavihek Trening
Osebni trener na mobilni platform Android
38
4.5 Zavihek Izzivi
S pritiskom na gumb Izzivi v akcijski vrstici ali z drsnim premikom prsta po ekranu v levo
se premaknemo na zadnji, tretji zavihek, ki vsebuje nekaj težjih vaj. Te vaje so namenjene
za izziv in testiranje uporabnikovega napredka.
Slika 17: Zavihek Izzivi
Osebni trener na mobilni platform Android
39
4.6 Meni gumb Podatki o aplikaciji
S pritiskom na gumb za prikaz podatkov o aplikaciji v meniju se odpre novo okno, kjer je
podrobneje opisana aplikacija, naveden njen avtor in verzija aplikacije.
Slika 18: Podatki o aplikaciji
Osebni trener na mobilni platform Android
40
4.7 Meni gumb Vodič
V aplikacijo smo dodali tudi vodiča, ki uporabniku pomaga pri prvih korakih uporabe
aplikacije. Ob kliku na meni gumb Vodič se odpre okno, ki vsebuje kratek filmček in
podroben opis, kako uporabljati aplikacijo.
Slika 19: Vodič
Osebni trener na mobilni platform Android
41
4.8 Meni gumb Zgodovina treningov
Kot smo že omenili, si lahko uporabnik vsak teden sestavi oziroma sprejme drug fitnes
program ali pa kakšen teden vadbe tudi izpusti. Odločili smo se, da sledimo odločitvam
uporabnika ter si beležimo njegove programe. Ko uporabnik sestavi nov program oziroma
sprejme že sestavljen program, se mu le-ta doda v zgodovino. Če uporabnik ni zadovoljen
z izbranim fitnes programom, ima možnost, da ga izbriše oziroma zamenja. V tem primeru
se mu bo izbrisal tudi iz zgodovine treningov. Torej ob pritisku na gumb v meniju za
pregled zgodovine treningov se nam odpre novo okno, ki vsebuje nabor fitnes programov,
ki jih je uporabnik sprejel za tedensko vadbo. Prav tako je zabeležen tudi datum ter leto
uporabe tega fitnes programa.
Slika 20: Pregled zgodovine treningov
Osebni trener na mobilni platform Android
42
4.9 Meni gumb Vrsta mišic
Vsaka možna vaja, ki se lahko pojavi v tedenskem fitnes programu, ima v opisu navedeno
tudi, katere mišice delujejo pri izvedbi te vaje. V primeru, da uporabnik ne ve oziroma ni
prepričan, kje točno se ta mišica nahaja ali pa si preprosto želi ogledati, katere vrste mišic
lahko trenira, ima možnost pregleda vseh obstoječih mišic. S pritiskom na meni gumb
Vrsta mišic se odpre okno, kjer lahko uporabnik iz seznama izbere najprej sklop mišic, ki
ga zanima (recimo trebušne mišice) in nato v podseznamu dejansko mišico tega sklopa.
Ob kliku na sklop ali posamezno mišico lahko uporabnik preveri, kje na telesu se le-ta
nahaja.
Slika 21: Pregled mišičnih sklopov
Osebni trener na mobilni platform Android
43
4.10 Meni gumb Nastavitve
Kot vsaka aplikacija ima tudi naša možnost spreminjanja nastavitev. V naših nastavitvah
lahko spremenimo uporabnikovo ime in starost, ki sta prikazana v prvem zavihku Domov.
Izbiramo lahko med dvema jezikoma, slovenskim in angleškim. Prav tako lahko izbiramo
med različnimi temami ozadja uporabniškega vmesnika in spreminjamo težavnost vaj, če
mislimo, da so vaje, ki jih določi generator, prelahke. Ob kliku na meni gumb za nastavitve
se odpre okno kjer imamo možnost spreminjanja vseh zgoraj naštetih funkcionalnosti.
Slika 22 in 23: Nastavitve
Osebni trener na mobilni platform Android
44
4.11 Meni gumb Vaje
Vsi fitnes programi, tako že v-naprej sestavljeni kot tudi tisti, ki jih uporabnik sam generira,
vsebujejo vaje, ki so shranjene v aplikaciji. Te vaje lahko uporabnik tudi sam pregleda, če
v meniju pritisne gumb Pregled vseh vaj, ki odpre imenski seznam vseh možnih vaj. Tako
uporabniku ni potrebno sestavljati novih programov. S pritiskom na posamezno vajo se
odpre novo okno s podrobnim opisom in nasveti za izbrano vajo.
Slika 24: Pregled vseh vaj
Osebni trener na mobilni platform Android
45
4.12 Meni gumb Sestavljeni programi
V meni smo dodali tudi možnost ogleda vseh že sestavljenih fitnes programov. Tako si
lahko uporabnik hitro in enostavno ogleda fitnes program in se odloči ali ga res želi izbrati
za tedensko vadbo. S klikom na gumb Sestavljeni programi se odpre okno s seznamom
vseh že sestavljenih fitnes programov. S pritiskom na posamezen program se odpre
podroben opis izbranega programa ter prikažejo vadbe, ki jih program obsega.
Slika 25: Pregled vseh programov
Osebni trener na mobilni platform Android
46
4.13 Generiranje novega programa
V zavihku Trening ima uporabnik možnost generirati nov fitnes program. Ob kliku na
gumb Generiraj program se odpre okno, kjer mora uporabnik določiti, katere vrste mišic
želi vključiti v tedenski fitnes program. Na razpolago ima osem gradnikov Spinner saj
lahko izbere največ osem sklopov mišic. Sestavi se nov program, ki se prikaže v zavihku
Trening. Če uporabnik ni zadovoljen s programom ga lahko izbriše in ponovi postopek.
Slika 26: Generiranje novega fitnes programa
Osebni trener na mobilni platform Android
47
4.14 Izbor že sestavljenega programa
Če uporabnik želi izbirati med že sestavljenimi programi, s pritiskom na gumb Obstoječi
program v oknu za generiranje programa odpre novo okno, ki vsebuje seznam vseh že
sestavljenih programov. Vsak program v tem seznamu si lahko podrobno ogleda, preveri
vaje in njihov tedenski razpored. Za izbor fitnes programa moramo obkljukati gradnik
Radiobuton, ki vsebuje izbran program, in potrditi našo izbiro. Program se prikaže v
zavihku telovadba.
Slika 27 in 28: Izbor že sestavljenega programa
Osebni trener na mobilni platform Android
48
4.15 Prikaz podrobnosti izbrane vaje
Če želi uporabnik videti podrobnosti o vaji, ki jo želi izvajati, se odpre okno, ki vsebuje
video izbrane vaje, njeno ime, težavnost, navodila in nasvete za pravilno izvedbo. Vaja
vsebuje kratek video, ki se ponavlja, tako da lahko uporabnik jasno vidi pravilno izvajanje
vaje.
Slika 29: Prikaz fitnes vaj
Osebni trener na mobilni platform Android
49
5 TEŽAVE
Pri izdelavi aplikacije Osebni trener na mobilni platformi Android, smo se prvič srečali z
malo bolj naprednim programiranjem Android aplikacij. Naleteli smo na nekaj težav, ki
smo jih uspešno rešili. Največja težava na katero smo naleteli je bila povezava aplikacije s
podatkovno bazo.
V startu smo za strežnik želeli uporabiti WAMPServer (Windows, Apache, MySql, PHP)
vendar pa smo pri razhroščevanju in testiranju aplikacije imeli velike težave s porti
(omrežnimi vrati), in samo povezavo do podatkovne baze. Prav zaradi tega smo se
odločili uporabiti brezplačni spletni strežnik Byehost. Ta rešitev je odpravila našo težavo in
povezava s podatkovno bazo je delovala nemoteno.
Osebni trener na mobilni platform Android
50
6 SKLEP
V magistrskem delu smo se ukvarjali z izdelavo aplikacije za vodenje fitnes treningov.
Razvili smo aplikacijo, ki uporabnikom glede na vnos podatkov vrne čim učinkovitejši
program za vadbo v fitnesu, za dosego njihovih ciljev ter prikazuje pravilno izvedbo vaj.
Raziskali smo programski jezik Java ter operacijski sistem Android.
V tretjem poglavju smo opisali funkcionalnosti naše aplikacije, le-to pa smo prikazali v
četrtem poglavju.
V prihodnje načrtujemo nadgradnjo aplikacije z dodatkom prehrambnega načrta, kjer
bomo uporabnikom, poleg sestavljanja fitnes programov, tudi svetovali, kako se
prehranjevati za maksimalen učinek treningov.
Osebni trener na mobilni platform Android
51
7 LITERATURA, VIRI
[1] Personal Trainer, dostopno na
http://en.wikipedia.org/wiki/Personal_trainer
[zadnji obisk:29.1.2015]
[2] General fitness training, dostopno na
http://en.wikipedia.org/wiki/General_fitness_training
[zadnji obisk:29.1.2015]
[3] Android, dostopno na
http://en.wikipedia.org/wiki/Android_%28operating_system%29
[zadnji obisk 29.1.2015]
[4] Zaslon na dotik, dostopno na
http://sl.wikipedia.org/wiki/Zaslon_na_dotik
[zadnji obisk 29.1.2015]
[5] Java definition, dostopno na
http://searchsoa.techtarget.com/definition/Java
[zadnji obisk 2.2.2015]
[6] Android software development, dostopno na
http://en.wikipedia.org/wiki/Android_software_development
[zadnji obisk 9.2.2015]
[7] Android Developer Tools, dostopno na
http://developer.android.com/tools/help/adt.html
[zadnji obisk 9.2.2015]
[8] Mesarič D., Informacijski system za vodenje tekem v judo, Diplomsko delo,
Maribor, avgust 2011
Osebni trener na mobilni platform Android
52
[9] Why MySQL, dostopno na
http://www.mysql.com/why-mysql/
[zadnji obisk 10.2.2015]
[10] MySQL, dostopno na
http://en.wikipedia.org/wiki/MySQL
[zadnji obisk 10.2.2015]
[11] Podatkovni modeli, dostopno na
http://drenovec.tsckr.si/model/uvod.htm
[zadnji obisk 11.2.2015]
[12] Starting an Activity, dostopno na
http://developer.android.com/training/basics/activity-lifecycle/starting.html
[zadnji obisk 12.2.2015]
[13] Activities vs. Fragments in Android, dostopno na
https://www.altamiracorp.com/blog/employee-posts/fragments-vs-activities-
in-and
[zadnji obisk 12.2.2015]
[14] Fragments, dostopno na
http://developer.android.com/guide/components/fragments.html
[zadnji obisk 12.2.2015]
[15] Using Shared Preferences, dostopno na
http://developer.android.com/guide/topics/data/data-storage.html#pref
[zadnji obisk 19.2.2015]
[16] ExpandableListView, dostopno na
http://developer.android.com/reference/android/widget/ExpandableListView.
html
[zadnji obisk 19.2.2015]
Osebni trener na mobilni platform Android
53
[17] List View, dostopno na
http://developer.android.com/guide/topics/ui/layout/listview.html
[zadnji obisk 19.2.2015]
[18] MediaController, dostopno na
http://developer.android.com/reference/android/widget/MediaController.html
[zadnji obisk 19.2.2015]
[19] Spinners, dostopno na
http://developer.android.com/guide/topics/ui/controls/spinner.html
[zadnji obisk 23.2.2015]
[20] Radio Buttons, dostopno na
http://developer.android.com/guide/topics/ui/controls/radiobutton.html
[zadnji obisk 23.2.2015]
[21] Decision tree, dostopno na
http://en.wikipedia.org/wiki/Decision_tree
[zadnji obisk 3.3.2015]
[22] String Resources, dostopno na
http://developer.android.com/guide/topics/resources/string-resource.html
[zadnji obisk 4.3.2015]
[23] Supporting Different Languages, dostopno na
http://developer.android.com/training/basics/supporting-
devices/languages.html
[zadnji obisk 6.3.2015]
[24] Eclipse (software), dostopno na
http://en.wikipedia.org/wiki/Eclipse_(software)
[zadnji obisk 9.3.2015]
Osebni trener na mobilni platform Android
54
[25] App Manifest, dostopno na
http://developer.android.com/guide/topics/manifest/manifest-intro.html
[zadnji obisk 9.3.2015]
Osebni trener na mobilni platform Android
55
Osebni trener na mobilni platform Android
56