54
Fakulteta za elektrotehniko, računalništvo in informatiko Smetanova ulica 17 2000 Maribor, Slovenija Ţiga Kajzer RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO WINDOWS PHONE 8 Diplomsko delo Maribor, avgust 2014

RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Fakulteta za elektrotehniko, računalništvo in informatiko

Smetanova ulica 17 2000 Maribor, Slovenija

Ţiga Kajzer

RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO WINDOWS PHONE 8

Diplomsko delo

Maribor, avgust 2014

Page 2: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA

PLATFORMO WINDOWS PHONE 8

Diplomsko delo

Študent: Ţiga Kajzer

Študijski program: Visokošolski študijski program

Računalništvo in informacijske tehnologije

Mentor: red. prof. dr. Milan Zorman

Lektorica: Špela Habulin

Page 3: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

ii

Page 4: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

iii

ZAHVALA

Zahvaljujem se staršem in družini, ki so mi

omogočili študij ter me pri njem podpirali.

Zahvala tudi Ani, ki mi je v času študija

stala ob strani.

Posebno bi se rad zahvalil mentorju red.

prof. dr. Milanu Zormanu za strokovno

pomoč in koordinacijo pri pisanju

diplomskega dela.

Page 5: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

iv

RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO WINDOWS PHONE 8 Ključne besede: Windows Phone 8, mobilna aplikacija, .NET Framework

UDK: 004.728.8:621.395.721.5(043.2)

Povzetek

Posamezniki sodobne družbe svojo energijo in pozornost vedno bolj usmerjajo k dobremu

počutju ter zdravemu in kakovostnemu načinu življenja. Takšna dinamika zahteva veliko

samodiscipline in predanosti, zato smo hoteli uporabniku olajšati izkušnjo z modernim

pripomočkom.

V diplomskem delu je predstavljena implementacija mobilne aplikacije, ki teče na platformi

Windows Phone 8. Prikazali smo kreiranje uporabniških vmesnikov z jezikom XAML,

uporabo knjižnice Json.NET za deserializacijo objektov ter delo z GPS sistemom na

mobilni platformi. Raziskali in implementirali smo asinhrono programiranje v ogrodju .NET

ter opravila, ki tečejo v ozadju, ko je aplikacija izklopljena.

Page 6: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

v

THE DEVELOPMENT OF A MOBILE APPLICATION »LIFESAL« FOR THE PLATFORM WINDOWS PHONE 8

Key words: Windows Phone 8, mobile application, .NET Framework

UDK: 004.728.8:621.395.721.5(043.2)

Abstract

Individuals of the modern society are increasingly focusing their energy and attention to

their own well-being as well as living a healthy and quality life. Such dynamics require a

lot of self-discipline and dedication, so we wanted to facilitate the users experience with a

modern accessory.

The thesis presents the implementation of a mobile application running on the platform

Windows Phone 8. We demonstrated the creation of user interfaces with XAML language,

the usage of Json.NET library for the deserialization of objects, and how to work with the

GPS system on the mobile platform. We studied and implemented asynchronous

programming in .NET, and tasks that run in the background when the application is turned

off.

Page 7: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

vi

KAZALO

1 UVOD ........................................................................................................................ 1

2 OPIS PROBLEMA IN PREDLOG REŠITVE .............................................................. 2

2.1 Funkcionalnosti aplikacije ................................................................................... 2

2.2 Principi oblikovanja uporabniškega vmesnika ..................................................... 3

2.3 Zemljevid strani aplikacije ................................................................................... 4

3 PLATFORMA WINDOWS PHONE ............................................................................ 5

3.1 Zgodovina in verzije ............................................................................................ 5

3.2 Jedro operacijskega sistema Windows Phone 8 ................................................. 5

3.3 Arhitektura programskega sklada ....................................................................... 7

3.4 Ţivljenjski cikel aplikacije .................................................................................... 8

3.5 Ogrodje .NET Framework ..................................................................................10

3.6 Razvojno okolje Visual Studio 2012 in paket Windows Phone SDK 8.0 .............10

4 IMPLEMENTACIJA ...................................................................................................12

4.1 Kreiranje uporabniškega vmesnika z jezikom XAML ..........................................12

4.2 Windows Phone Toolkit .....................................................................................13

4.3 Navigiranje med stranmi ....................................................................................15

4.4 Deserializacija JSON objektov ...........................................................................15

4.5 Deserializacija XML dokumentov .......................................................................18

4.6 Časovno razporejanje opomnikov ......................................................................20

4.7 Asinhrono programiranje v C# ...........................................................................23

4.8 Delo z mapo in geografskimi lokacijami .............................................................24

4.9 Spletne storitve ..................................................................................................31

4.10 Računanje indeksa telesne mase ......................................................................33

4.11 Izračun dnevnega vnosa kalorij..........................................................................33

5 FUNKCIONALNOSTI APLIKACIJE ...........................................................................35

5.1 Primeri uporabe .................................................................................................35

6 SKLEP ......................................................................................................................42

Page 8: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

vii

LITERATURA IN VIRI ......................................................................................................43

KAZALO SLIK

Slika 2.1 - Zemljevid strani ................................................................................................ 4

Slika 3.1 – Shared Windows Core ..................................................................................... 6

Slika 3.2 – Programski sklad operacijskega sistema Windows Phone 8............................ 7

Slika 3.3 – Ţivljenjski cikel aplikacije ................................................................................. 8

Slika 4.1 – Programiranje uporabniškega vmesnika v okolju Visual Studio 2012 .............13

Slika 4.2 – Ţivljenjski cikel asinhrone metode ..................................................................25

Slika 5.1 – Primeri uporabe aplikacije ..............................................................................35

Slika 5.2 – Pregled akcijskih ponudb ................................................................................36

Slika 5.3 - Aktivni opomniki za zdravila ............................................................................37

Slika 5.4 – Prikazovanje bliţnjih lekarn na zemljevidu ......................................................38

Slika 5.5 – Menstrualni koledar ........................................................................................38

Slika 5.6 – Pregled dnevnega vnosa kalorij ......................................................................39

Slika 5.7 – Izračun ITM ....................................................................................................40

Slika 5.8 – Prikaz vpliva vremena ....................................................................................40

Slika 5.9 – Nastavitve na aplikacijskem nivoju .................................................................41

KAZALO PROGRAMSKIH KOD

Programska koda 4.1 - Postavljanje elementov z XAML ..................................................12

Programska koda 4.2 - Uporaba NavigationService-a za navigiranje ...............................15

Programska koda 4.3 - Vrnjen objekt v JSON formatu .....................................................16

Programska koda 4.4 - Serializacija JSON objektov z uporabo Json.NET .......................17

Programska koda 4.5 - Primer dokumenta XML ...............................................................19

Programska koda 4.6 - Primer tolmačenja XML dokumenta z razredom XmlReader .......20

Programska koda 4.7 - Kreiranje opomnikov ...................................................................22

Programska koda 4.8 - Implementacija izrisovanja poti na mapi ......................................27

Programska koda 4.9 - Primer dodajanja zatiča na mapo ................................................28

Programska koda 4.10 - Iskanje 10 najbliţjih lekarn ........................................................30

Programska koda 4.11 - Prenos podatkov iz spletne storitve ...........................................32

Programska koda 4.12 - Metoda za izračun indeksa telesne mase ..................................33

Page 9: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

viii

Programska koda 4.13 - Izračun predvidevanega vnosa kalorij .......................................34

UPORABLJENE KRATICE

GPS – Global Positioning System

XAML – Extensible Application Markup Language

CLR – Common Language Runtime

XML – Extensible Markup Language

JSON – JavaScript Object Notation

Page 10: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

1

1 UVOD

Področje razvoja mobilnih aplikacij sega v konec 20. stoletja, ko so na mobilnih telefonih

začele domovati aplikacije v obliki majhnih arkadnih iger, urejevalcev melodije zvonenja,

kalkulatorjev ipd. V začetku novega stoletja smo bili priča pospešenemu razvoju mobilnih

vsebin in aplikacij, prav tako pa so se začele oblikovati nove oblike operacijskih sistemov

– mobilni operacijski sistemi. Platforme, kot so Windows Mobile, Symbian, RIM, Android,

iOS, Windows Phone, podpirajo programsko opremo tretjih oseb, kar omogoča

uporabniku več izbire, priloţnosti in funkcionalnosti [1].

V diplomskem delu je opisan postopek razvoja aplikacije Windows Phone 8, odločitev za

to platformo pa lahko pripišemo dvoletnim izkušnjam z ogrodjem .NET Framework.

V prvem poglavju smo spoznali platformo Windows Phone 8, njeno zgodovino, arhitekturo

in programski sklad. Na kratko smo opisali faze ţivljenjskega cikla aplikacije ter orodja,

ogrodja in pripomočke za razvoj aplikacije.

V drugem poglavju smo se osredotočili na implementacijo aplikacije ter postopke,

smernice, dobre prakse in probleme, ki smo jih srečali na poti razvijanja. Prav tako smo

dodali zaslonske slike, na katerih lahko vidimo končni prikaz podatkov.

Sledi tretje poglavje, kjer smo na kratko prikazali primere uporabe in interakcijo

uporabnika z našo aplikacijo.

Page 11: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

2

2 OPIS PROBLEMA IN PREDLOG REŠITVE

Ljudje v zadnjem času dajejo zelo velik pomen zdravemu načinu ţivljenja , zato je bil naš

namen izdelati zdravstveno-farmacevtski priročnik, ki omogoča beleţenje uporabnikovega

načina ţivljenja. Aplikacija uporabniku podaja strokovne nasvete in dejstva, ki jih

uporabnik lahko uporabi za usmeritev k boljšemu načinu ţivljenja. Lastniki lekarn trenutno

nimajo pravih moţnosti, kako oglaševati svojo ponudbo, zato smo jim ponudili moderno

ogrodje v obliki mobilne aplikacije, kjer lahko dnevno dodajajo ponudbe v našo aplikacijo.

Ţivimo v obdobju, ko so visokotehnološke storitve, kot sta internet in GPS (Global

Positioning System), na dosegu rok, zato smo v okviru diplomskega dela ţeleli izoblikovati

programsko rešitev, ki bi jih na inovativen način izkoristila in zapakirala v logično celoto.

Z mobilno aplikacijo ţelimo lastnikom lekarn ponuditi prednost pred ostalimi, jim povečati

profit, trţni deleţ, obseg prodaje ter vzpodbujati konkurenčnost na dokaj zaprtem

ekonomskem trgu.

2.1 Funkcionalnosti aplikacije Naštejmo in opišimo funkcionalnosti aplikacije, katerih implementacijo si bomo ogledali v

naslednjih poglavjih diplomskega dela:

Prihrani: Uporabniku daje moţnost vpogleda v akcijske ponudbe farmacevtov.

Vsaka lekarna ima moţnost dodajanja ponudb preko spletne strani, te ponudbe pa

se potem prikazujejo na telefonu. Funkcionalnost ima tudi implementirano iskanje

glede na simptome bolezni ali pa na kategorijo zdravil.

Opomnik: Nastavljanje kontracepcijskih opomnikov za zdravila. Opomniku se

nastavi interval, kontracepcijska tableta/zdravilo in čas prvega opominjanja.

Lekarne: Na zemljevidu se prikaţe 10 najbliţjih klekarn. Ob kliku na ţebljiček bo

imel uporabnik moţnost izbire med prikazom poti do lekarne in moţnostjo ogleda

podrobnosti. Podrobnosti bodo vsebovale osnovne informacije o lekarni, delovni

čas ter nazadnje dodane ponudbe reklame.

Menstrualni koledar: Ţenske uporabnice si lahko beleţijo dnevnik intenzivnosti

krvavenja med menstrualnim ciklom. Glede na začetek menstruacije se nato

izračunajo dnevi plodnosti in napoved naslednjega krvavenja.

Page 12: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

3

Kalorije: Uporabnik nastavi svoj profil, v katerem izbere ţeleni cilj diete.

Funkcionalnost omogoča grafični prikaz dnevno zauţitih kalorij ter najvišjo

dovoljeno količino kalorij glede na cilj diete.

ITM: Funkcionalnost izračuna indeks telesne mase ter glede na izračunano

vrednost priloţi komentar.

Vreme in počutje: Prikaţe vpliv vremena na bolečine, krvni obtok in nizek krvni

pritisk.

2.2 Principi oblikovanja uporabniškega vmesnika Pri načrtovanju uporabniškega vmesnika, grajenega v jeziku XAML (Extensible

Appplication Markup Language), smo se drţali principov Microsoftovega Modern Designa,

katerega filozofija je kreiranje čistih, urejenih in privlačnih vmesnikov s čim manj tipkanja,

kjer uporabnik komunicira z vsebino, ne pa s kontrolami. V nadaljevanju bomo podrobneje

opisali, o čem govorijo principi Modern Designa.

Pride in craftmanship – biti ponosen na lastno delo. Princip govori o posvečanju

pozornosti, časa, energije in ljubezni najmanjšim detajlom. Načrtovati in oblikovati je treba

uporabniško izkušnjo, ki je dovršena na vseh nivojih. Za postavitev elementov je

priporočeno uporabljati mreţo zaradi njenih estetskih in praktičnih koristi. Vizualna

hiearhija aplikacije naj bo nedvoumna, kar lahko doseţemo z uporabo različnih velikosti in

barv pisav ter s pozicioniranjem nivojev, zato da lahko ločimo enega od drugega.

Do more with less – narediti več z manj. Aplikacijo je potrebno omejiti samo na njene

osnovne funkcije brez dodatnega blišča. Vsak element na zaslonu mora imeti vrednost in

jasen pomen. Uporabnik naj direktno komunicira z vsebino, ukaze in funkcije pa mora

preprosto razumeti. Design je uspešen takrat, ko navigacijski elementi naučijo uporabnika

interakcije z aplikacijo.

Fast and fluid – hitro in tekoče. Uporabniška izkušnja naj bo odzivna in osredotočena na

preproste scenarije uporabe. Za poţivitev namizja ter prikazovanje osnovnih informacij je

zaţeljeno uporabljati Live Tiles.

Authentically digital – avtentično digitalno. Načelo vzpodbuja prelivanje digitalnih

elementov s stvarmi iz realnega sveta, kot so usnje, šivi, sence in odsevi.

Page 13: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

4

Win as one – zmagati kot eno. Načelo govori o poenotenju našega dela, tako da ga

uskladimo z ekosistemom, kjer je mogoče, in inoviramo, kadar je to potrebno. Naše delo

naj bo zasnovano tako, da uporabniški scenariji na različnih platformah delujejo kot ena,

ţe znana izkušnja [2].

2.3 Zemljevid strani aplikacije

Slika 2.1 - Zemljevid strani

Na sliki 2.1 vidimo zemljevid strani v aplikaciji. Main Page je prva stran, ki se naloţi ob

zagonu ali reaktiviranju aplikacije. Strani na nivoju 2 so dostopne iz glavnega menija,

strani na nivoju 3 pa so dostopne le iz nivoja 2. Iz nivoja 3 lahko pridemo nazaj na nivo 1 s

klikom na logotip aplikacije, ne pa tudi obratno.

Page 14: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

5

3 PLATFORMA WINDOWS PHONE

Windows Phone je mobilni operacijski sistem, ki ga je razvilo podjetje Microsoft. Izvorna

koda operacijskega sistema temelji na modelu lastniške programske opreme [3].

Operacijski sistem Windows Phone zaseda 3 % trţnega deleţa, zadnje analize kaţejo, da

se je v prvem četrtletju 2014 njegov deleţ povečal s 16 % zaporedno rastjo [4].

Število aplikacij v trgovini Windows Phone Store je februarja 2014 prešlo 240000 aplikacij,

s povprečno dnevno objavo 500 aplikacij [5].

3.1 Zgodovina in verzije Delo na razvijanju operacijskega sistema se je pričelo leta 2008, ko so v podjetju ugotovili,

da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav –

Windows Mobile. Windows Phone 7, prva generacija sistemov, je bil predstavljen 15.

februarja 2010, izdan pa 8. novembra 2010 [6].

Windows Phone 8 je sistem tretje generacije v druţini Windows Phone. Prvič je bil

predstavljen javnosti 20. junija 2012, nato pa je bil izdan 29. oktobra 2012 [7]. Windows

Phone 8 je prvi v njegovi druţini, ki temelji na hibridnem jedru Windows NT, medtem ko so

njegovi predhodniki temeljili na monolitnem jedru Windows CE [8].

2. aprila 2014 je Microsoft oznanil prihod najnovejše verzije v seriji mobilnih operacijskih

sistemov Windows Phone; verzijo 8.1. Razvijalcem je postal na voljo 14. aprila 2014, za

posodobitev telefonov pa je potreben razvijalski račun [9].

3.2 Jedro operacijskega sistema Windows Phone 8 Nekaj mesecev pred izidom Windows Phone 8 je postalo znano, da bo nova verzija

operacijskega sistema zgrajena okoli enakega jedra, kot ga ima Windows 8 – jedro

WindowsNT [10]. Prehod na novo jedro pa je omogočil izgradnjo skupne sredice med

tema operacijskima sistemoma, t. i. Shared Windows Core, ki je omogočil laţje

preprogramiranje aplikacij iz Windows 8 na Windows Phone 8 ali obratno, prav tako pa je

povečal ekosistem programske in strojne opreme.

Page 15: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

6

Slika 3.1 – Shared Windows Core

Iz slike 3.1 lahko vidimo, da je skupno jedro (angl. Shared Core) razdeljeno na dva dela;

Windows jedro (Windows Core System) in mobilno jedro (Mobile Core). Pri Windows jedru

gre za osnovo jedra, ki ima enako kodo na obeh jedrih Windows Phone 8 in Windows 8.

Mobilno jedro ima enake funkcionalnosti kot jedro Windows 8, vendar ne gre za identično

kopijo, temveč za okrnjeno verzijo Windows 8 jedra, prilagojeno potrebam mobilnih

naprav. Nad skupnim jedrom sedi Windows Phone sistem, z vnaprej zgrajenimi

aplikacijami za predvajanje glasbe in videa, lupino, s storitvami za upravljanje

povezljivosti, z navigacijo, viri in s paketi [11].

Page 16: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

7

3.3 Arhitektura programskega sklada

Slika 3.2 – Programski sklad operacijskega sistema Windows Phone 8

Opišimo komponente, iz katerih je sestavljen programski sklad Windows Phone 8:

Na sliki 3.2 lahko vidimo aplikacijska modela TaskHost in CoreApplication. Aplikacijski

model (angl. application model) skrbi za kreiranje elementov uporabniškega vmesnika ter

za shranjevanje in določanje vizualnih lastnosti, kot so vidnost, lokacija, napis ...

TaskHost je primarni model ţe od prve verzije Windows Phone sistema in je napisan v

XAML jeziku. CoreApplication je podskupina novega aplikacijskega modela, ki je prisoten

od verzije Windows Phone 8. CoreApplication izrecno podpira samo nativne aplikacije, za

prikazovanje elementov pa uporablja Direct3D programski vmesnik. Naštejmo in opišimo

storitve iz slike 3.2, na katere se aplikacijska modela zanašata za delovanje [12]:

Upravitelj izvajanja opravil – (angl. Execution Manager) upravlja logiko, povezano

z ţivljenjskim ciklom aplikacije. Aplikaciji doda gostiteljski proces, v katerem lahko

teče. Skozi ţivljenjski cikel dviga dogodke za zagon, deaktivacijo in končanje

aplikacije.

Upravitelj paketov – (angl. Package Manager) skrbi za hranjenje metapodatkov

aplikacije, ki se izvaja, za nameščanje in odstranjevanje aplikacij ter hranjenje

informacij o aplikacijskih ploščicah, ki jih ima uporabnik pritrjene na domači zaslon.

Page 17: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

8

Navigacijski streţnik – (angl. Navigation Server) skrbi za navigacijo med programi

v ospredju. Njegova naloga je, da vsakič, ko uporabnik na primer klikne ploščico

na zaslonu, sporoči njegov namen Execution Managerju, ki poskrbi za zagon oz.

reaktivacijo ustrezne aplikacije.

Upravitelj virov (Resource Manager) skrbi za hitrost in odzivnost telefona, tako da

nadzira sistemske vire, kot sta procesor in pomnilnik. Resource Manager opazuje

aktivne procese ter jim dodeljuje omejitve glede porabe virov. Če proces preseţe

uporabo dodeljenih virov, ga Resource Manager prekine.

3.4 Ţivljenjski cikel aplikacije

Slika 3.3 – Ţivljenjski cikel aplikacije

Slika 3.3 ponazarja ţivljenjski cikel Windows Phone aplikacije, kjer krogi predstavljajo

stanja, zeleni kvadrati dogodke aplikacijskega nivoja, sivi kvadratki pa dogodke nivoja

strani. Podrobneje si poglejmo in opišimo vse dogodke in stanja [13]:

Page 18: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

9

Dogodek Application Launching: Event je dvignjen, ko uporabnik zaţene aplikacijo

iz domačega zaslona. Aplikacija naj ob takem dogodku prikaţe uporabniški

vmesnik. Ob zagonu aplikacije naj bo jasno, da gre za novo instanco, da se

uporabnik ne zmede. Za hitri zagon aplikacije je zaţeleno, da se v tem dogodku

ravna s čim manj kode.

V teku (angl. Running): Stanje po zagonu, aplikacija je v teku. Uporabniku naj se

ne ponuja lastno implementiranih mehanizmov za izhod iz aplikacije.

Metoda OnNavigatedFrom: Klicana, ko se uporabnik odloči oditi iz trenutne strani,

bodisi gre za prehod na novo stran bodisi za izhod iz aplikacije. V tem dogodku je

priporočeno, da shranimo stanje strani, saj jo lahko nato obnovimo, ko se

uporabnik odloči priti nazaj.

Dogodek Deactivated: Event je dvignjen, ko gre uporabnik stran od aplikacije s

klikom na start gumb ali z zaklepanjem telefona. Tukaj je priporočeno, da shranimo

aplikacijske podatke.

V mirovanju (angl. Doormant): Mirujoče stanje, ki sledi po Deactivated dogodku.

Operacijski sistem zaključi vse niti, povezane z aplikacijo, prekine vse

procesiranje, ki ga je izvajala aplikacija, vendar pa ostane aplikacija v pomnilniku

nedotaknjena.

Ustavljeno (angl. Tombstoned): Do stanja pride takrat, ko je aplikacija zaključena,

vendar operacijski sistem še vedno hrani podatke o navigacijskem stanju in

slovarje, ki smo jih shranili med dogodkom Deactivated.

Dogodek Activated: Event je dvignjen, ko se uporabnik vrne na tombstonano ali

mirujočo aplikacijo. Na tej stopnji lahko z lastnostjo

IsApplicationInstancePreserved preverimo, iz katerega stanja se vračamo.

Priporočeno je, da v tem eventu izvajamo čim manj opravil, ki porabljajo vire, saj s

tem podaljšamo čas reaktiviranja aplikacije. Takšna opravila je priporočeno opraviti

takrat, ko je aplikacija ţe naloţena, s pomočjo niti v ozadju.

Page 19: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

10

Metoda OnNavigatedTo: Metoda je klicana, ko uporabnik pride na stran, tako da

prvič zaţene aplikacijo, navigira med stranmi v aplikaciji ali pa preide na aplikacijo

iz tombstonanega ali mirujočega stanja.

Dogodek Closing: Dvignjen, če gre uporabnik nazaj preko glavne strani. Aplikacija

se zaključi, nobeno stanje ni shranjeno. Na tem nivoju shranimo podatke, ki jih

ţelimo uporabljati v vseh instancah naše aplikacije. Dogodek ima omejitev 10

sekund, v katerih se mora izvesti vsa koda, zato je velike kose podatkov zaţeljeno

shranjevati v drugih eventih in metodah v ţivljenjskem ciklu aplikacije. Dogodek

Closing ni dvignjen, če operacijski sistem aplikacijo zaključi takrat, ko le-ta ni v

ospredju.

3.5 Ogrodje .NET Framework

.NET Framework je skupek medsebojno odvisnih programov, ki so potrebni za kreiranje in

izvajanje programov, namenjenih za operacijski sistem Microsoft Windows. Prva različica

sistema je postala na voljo leta 2002. Od takrat je bil standardiziran in sprejet z strani

veliko programskih jezikov. Osrednji del ogrodja je izvajalni pogon, znan kot CLR

(Common Runtime Language). Izvajalno okolje ogrodja .NET Framework skrije spodaj

leţeči operacijski sistem od programerja. Bistvene komponente ogrodja so:

prevajalnik

.NET razredne knjiţnice

.NET izvajalno okolje

.NET izvršilni programi lahko tečejo kot aplikacije na računalnikih, kot spletne aplikacije na

spletnih streţnikih in kot mobilne aplikacije na pametnih telefonih [14].

3.6 Razvojno okolje Visual Studio 2012 in paket Windows Phone

SDK 8.0 Za implementacijo mobilne aplikacije smo uporabili Microsoftovo integrirano razvojno

okolje Visual Studio 2012. Orodje smo prenesli iz programa DreamSpark, ki akademskim

institucijam po svetu ponuja zastonj licenčno Microsoft programsko opremo v namene

učenja, poučevanja in raziskovanja, njegova članica pa je tudi Univerza v Mariboru [15].

Page 20: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

11

Paket Windows Phone SDK 8.0 lahko namestimo kot dodatek ţe nameščeni verziji Visual

Studio 2012, lahko pa ga prenesemo tudi kot samostojno verzijo, ki ga poganja Visual

Studio 2012 Express. Paket lahko uporabljamo za pisanje native ali managed aplikacij

[16].

Navedimo nekaj unikatnih vsebin, ki jih pridobimo z namestitvijo paketa:

Projektne predloge, specifične za Windows Phone aplikacije (panoramske, XNA,

HTML5, pretočni videi)

Toolbox z elementi za uporabniški vmesnik Windows Phone aplikacije.

Design view, v katerem je prikazan telefon, ki ponazarja izgled aplikacije glede na

XAML kodo izbranega pogleda [17].

Page 21: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

12

4 IMPLEMENTACIJA

V postopku implementacije bomo kot razvojno okolje uporabljali ţe v prejšnjem poglavju

opisan Microsoft Visual Studio 2012 z nameščenim Windows Phone SDK 8.0. Programu

bomo dodali tretjeosebni knjiţnici Windows Phone Toolkit za obogatene grafične gradnike

ter Json.NET za hitrejšo in enostavnejšo deserializacijo JSON (JavaScript Object

Notation) objektov.

4.1 Kreiranje uporabniškega vmesnika z jezikom XAML

XAML je deklarativen jezik, baziran na jeziku XML (Extensible Markup Language). Razvit

je s strani Microsofta, uporablja pa se za inicializiranje strukturiranih vrednosti in objektov.

Uporablja se v veliko .NET 3.0 in .NET 4.0 tehnologijah, kot so Windows Presentation

Foundation, Silverlight, Windows Worklow Fundation in Windows Runtime XAML

Framework.

Elementi v jeziku XAML so direktno povezani z instancami objektov CLR, medtem ko so

XAML atributi, povezani z lastnostmi in dogodki CLR objektov.

Vse elemente, kreirane z XAML, lahko ustvarimo tudi na klasičen programatičen način v

jezikih, kot sta C# in Visual Basic.NET. Ključni vidik jezika omogoča zmanjševanje

kompleksnosti pri tolmačenju, saj je baziran na XML. Oblikovalcem omogoča laţje delo,

saj se njihovi rezultati lahko vidijo brez prevajanja aplikacij, prav tako pa omogoča

neodvisnost prezentacijskega sloja aplikacije – oblikovalcu je lahko vseeno, kakšna je

logika programa, njegova glavna skrb je le design [18].

V programski kodi 4.1 lahko vidimo specificiranje objektov StackPanel in Button. Značka

StackPanel ima notranjo vsebino in dve znački; začetno in zaključno. Button pa je

brezvsebinska, samozaključna značka z večimi atributi.

<StackPanel> <Button x:Name="buttonNaprej" Content="Naprej" Tap="buttonNaprej_Tap" />

</StackPanel>

Programska koda 4.1 - Postavljanje elementov z XAML

Page 22: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

13

Slika 4.1 – Programiranje uporabniškega vmesnika v okolju Visual Studio 2012

Na sliki 4.1 lahko vidimo pogled iz razvojnega okolja, kjer smo sestavljali grafični vmesnik

za glavni meni na prvi strani aplikacije. Po privzetem se prva stran, ki jo aplikacija zaţene,

imenuje MainPage.xaml, vendar lahko to spremenimo v datoteki WMAppManifest.xml.

Meni ima glavno mreţo, ki vsebuje notranje podmreţe z vsebino. Gumbki za dostop do

funkcionalnosti imajo prirejen template, tako da lahko namesto privzetega izgleda

uporabljamo lastne ikone.

4.2 Windows Phone Toolkit

Uporabniško izkušnjo smo obogatili z odprtokodnim dodatkom Windows Phone Toolkit.

Orodje nam nudi širši nabor grafičnih elementov in funkcionalnosti ter poveča razvijalsko

produktivnost, saj bi za implementacijo takšnih stvari drugače porabili ogromno časa.

Namestitev orodja je dokaj enostavna – orodje prenesemo na disk, nato pa v razvojnem

okolju dodamo referenco na DLL knjiţnico, ki je v preneseni mapi. Naštejmo in

povzemimo komponente, ki jih ponuja WPToolkit [19].

AutoCompleteBox – nadgrajena kontrola, navidez podobna TextBox-u, vendar ob

vnosu teksta predvideva moţne besede ter jih ponudi uporabniku.

Page 23: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

14

ContextMenu – dviţni meni, v katerega lahko vstavimo elemente izbire in dogodke,

ki se dvignejo ob izbiri. Pojavi se ob dotiku in drţanju poljubnega grafičnega

elementa.

CustomMessageBox – klasični MessageBox nam ponuja samo moţnost prikaza

teksta z gumbom »ok«. Ta nadgrajena kontrola pa ponuja moţnost dveh gumbov s

poljubno vsebino in dodajanje kazalcev na metode, ki se zaţenejo ob kliku na

gumb.

DateTimeConverter – pretvarja objekte DateTime v drugačne oblike zapisa, kot je

»8/21« ali relativne oblike, kot je »pred 21 urami«.

DateTimePicker – uporablja se za izbiro datuma ali časa. Navidez izgleda kot

TextBox, vendar se ob kliku na komponento prikaţejo stolpiči s kvadratki, ki se jih

lahko neskončno pomika gor in dol.

SlideInEffect, TurnstileFeatherEffect – imitira efekte gibanja. Grafičnim elementom lahko določimo tip efekta in pa ob proţenju katerega eventa naj se efekt vklopi.

ExpanderView – komponenta ima glavo, pod njo pa vsebino, ki se zloţi in razširi

ob kliku.

HubTile – grafični element, ki po obliki in obnašanju spominja na ploščice iz

domačega zaslona sistema Windows Phone. Poznamo statične in dinamične

HubTile, razlikujejo se po tem, da lahko dinamičnim posodobimo vsebino z

uporabo data binding-a.

ListPicker – prikazuje moţnosti iz seznama, ki se ob kliku razširijo ali pa pokaţejo

v polnem zaslonu. Obnašanje prikazovanja elementov lahko kontroliramo z

lastnostjo ExpansionMode.

LongListMultiSelector – omogoča prikazovanje in izbiro večih elementov s

poljubno definiranim template-om hkrati. Ponavadi se uporablja za prikazovanje

slik ali tekstovnih struktur, ki jih ţelimo izbrisati oz. manipulirati z njimi.

Map extensions – gre za vnaprej pripravljene elemente, ki jih lahko laţje dodajamo

na zemljevid. Znana sta predvsem Pushpin in UserLocationMarker.

PhoneTextBox – nadgrajena kontrola ţe znanega TextBox-a. Ponuja naprednejše

moţnosti, kot so dodajanje namigov, prikazovanje števila znakov v polju in

dodajanje ikon na vnosno polje.

RatingControl – komponenta prikazuje zvezdice na skali od 1 do 5, ki sluţi za

ocenjevanje vsebine. Do ocene se dostopa preko lastnosti Rating.

ToggleSwitch – preklopno stikalo z dvema moţnima stanjema.

Page 24: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

15

TransferControl – prikazuje napredek prenosov v ozadju, tako nalaganja kot tudi

prenosa podatkov.

Navigation transitions – animacije, ki se zgodijo ob prehodu med stranmi.

WrapPanel – omogoča pozicioniranje podrejenih elementov sekvenčno od leve

proti desni ali pa od zgoraj navzdol. Kadar element preide preko meje

WrapPanela, je avtomatsko pozicioniran v naslednjo vrsto ali stolpec.

4.3 Navigiranje med stranmi

Aplikacije, ki za navigacijo med stranmi uporabljajo XAML, so sestavljene iz dveh

komponent; navigacijskega okvirja in ene ali več strani, ki komunicirajo z

NavigationService. Operacijski sistem komunicira z NavigationService, da lahko hrani

dnevnik ali zgodovino strani, ki jih je uporabnik obiskal.

Na programski kodi 4.2 vidimo primer uporabe statične metode Navigate razreda

NavigationService, ki za parametre uporablja URI naslov ciljane strani, ter obliko

podanega URI naslova. Kadar je poklicana metoda Navigate, operacijski sistem potisne

trenutno stran na vrh navigacijskega sklada in zgenerira novo instanco ciljane strani [20].

4.4 Deserializacija JSON objektov

JSON je format odprtega standarda, ki uporablja berljivo sintakso za prenos podatkovnih

objektov v obliki lastnost-vrednost. Uporablja se v namene prenosa podatkov med

streţnikom in spletno aplikacijo ter je alternativa jeziku XML. Prvotno je bil izpeljan iz

jezika JavaSript, vendar je format neodvisen od programskega jezika.

Poglejmo osnovne podatkovne tipe, ki jih podpira format JSON [21]:

Number: Predznačeno decimalno število, ki lahko vsebuje frakcijski del in

uporablja eksponentni zapis. Ne dopušča zapisa neštevil, kot je NaN, prav tako pa

ne loči med celim številom in številom, predstavljenim s plavajočo vejico.

private void button_Tap(object sender, System.Windows.Input.GestureEventArgs e) {

NavigationService.Navigate(new Uri("/Views/OpomnikPage.xaml", UriKind.Relative));

}

Programska koda 4.2 - Uporaba NavigationService-a za navigiranje

Page 25: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

16

String: Niz nič ali več Unicode znakov, znaki izven ravnine BMP (Basic

Multilangual Plane) pa morajo biti prezentirani v t. i. nadomestnih parih (surrogate

pair). Stringi so razmejeni z dvojnimi narekovaji, dovoljeno pa je uporabljati ubeţne

znake, predznačene s poševnico nazaj.

Boolean: Logična vrednost z dvema moţnima stanjema – true ali false.

Array: Urejen seznam ene ali več vrednosti poljubnih tipov. Za predstavitev

seznama se uporablja notacija z oglatimi oklepaji, elementi seznama pa so ločeni

z vejico.

Object: Neurejen slovar. Objekti so razmejeni med zavitimi oklepaji, za povezavo

vrednosti in ključa se uporablja dvopičje, medtem ko so pari v slovarju ločeni z

vejico.

Null: Prazna vrednost.

{ "error" : 0, "limit_na_stran" : 10, "rezultati" : [ { "blagovna_znamka" : " SOMATOLINE COSMETIC", "cena" : "10.00", "id_lekarna" : 54973, "id_ponudba" : "4", "ime_izdelka" : "Somatoline Cosmetic", "pakiranje" : "150 ml", "razdalja" : 52785.359375, "slika" : "http://iskanje.lifesal.com/datoteke/ponudbe/2012/11/1353920b3420eeac62.jpg", "url" : "" }, { "blagovna_znamka" : " SOMATOLINE COSMETIC", "cena" : "10.00", "id_lekarna" : 54974, "id_ponudba" : "4", "ime_izdelka" : "Somatoline Cosmetic", "pakiranje" : "150 ml", "razdalja" : 56961.81640625, "slika" : "http://iskanje.lifesal.com/datoteke/ponudbe/2012/11/135392550b3420eeac62.jpg", "url" : "" } ], "stevilo_rezultatov" : "81", "trenutna_stran" : 1 }

Programska koda 4.3 - Vrnjen objekt v JSON formatu

Page 26: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

17

Na programski kodi 4.3 lahko vidimo primer objekta v JSON formatu, ki ga je vračala

spletna storitev za iskanje po naši interni bazi zdravil.

Za tolmačenje JSON objektov v programskem ogrodju .NET je na voljo več razredov in

dodatkov, ki poskrbijo za to. S prihodom ogrodja Microsoft .NET Framework 3.5 so v

ogrodje dodali imenski prostor System.Web.Script.Serialization z razredom

JavaScriptSerializer. Ob instanciranju objekta razreda JavaScriptSerializer se ustvari

posebna instanca, ki jo asinhroni komunikacijski sloj uporabi za serializiranje in

deserializiranje podatkov, podanih med brskalnikom in spletnim streţnikom, vendar do te

instance ne moremo dostopati. Lahko pa uporabimo API, ki ga razred izpostavi na voljo

za uporabo v upravljani kodi (managed code). Za serializacijo objektov imamo na voljo

preobloţeni metodi Serialize(Object) in Serialize(Object, StringBuilder), za deserializacijo

pa Deserialize<T>(String) in Deserialize(String, Type) [22].

V našem delu smo za deserializacijo objektov uporabili ogrodje Json.NET. Namestitev

ogrodja je v okolju Visual Studio omogočena preko odprtokodnega paketnega upravljalca

NuGet. Po inštalaciji nam upravljalec avtomatsko doda referenco na knjiţnico, za njeno

uporabo pa moramo z uporabo stavka using dodati imenski prostor v datoteko. Ogrodje je

smatrano za bolj prilagodljivo kot zgoraj našteti imenski prostor in zagotavlja robustnejši

serializator z nizkonivojskimi in visokonivojskimi komponentami. Json.NET podpira binarni

format zapisa JSON objektov, JSON pogodbe, pretvorbo iz XML v JSON in pretvorbo iz

LINQ v JSON. Ena večjih prednosti je njegova zmogljivost dinamičnega tolmačenja JSON

vsebine brez preslikave v podatkovni tip [23].

string data = @e.Result; JObject jObject = JObject.Parse(data);

foreach (JObject rezultat in jObject["rezultati"].Children()) { PonudbaOdPosamezneLekarne ponudba = new PonudbaOdPosamezneLekarne(); ponudba.BlagovnaZnamka = (string)rezultat["blagovna_znamka"]; ponudba.Cena = (double)rezultat["cena"]; ponudba.IdLekarna = (int)rezultat["id_lekarna"]; ponudba.IdPonudba = (int)rezultat["id_ponudba"]; ponudba.ImeIzdelka = (string)rezultat["ime_izdelka"]; ponudba.Pakiranje = (string)rezultat["pakiranje"]; ponudba.Slika = (string)rezultat["slika"]; ponudba.Url = (string)rezultat["url"]; }

Programska koda 4.4 - Serializacija JSON objektov z uporabo Json.NET

Page 27: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

18

Na programski kodi 4.4 lahko pogledamo primer serializacije z Json.NET. Glede na

naravo objektov JSON si moramo v aplikaciji pripraviti modele oz. razrede, ki so po navadi

preslikava objekta JSON, nato pa jih serializiramo. V našem primeru programske kode je

bil to model PonudbaOdPosamezneLekarne, ki je predstavljal ponudbo, ki jo lekarna doda

v našo bazo preko interne spletne strani. Pri implementaciji aplikacije smo se drţali

pravila, da naj model ne pozna zunanjega sveta, temveč se naj samo odziva na ukaze

spremembe stanja ter zahteve o vračanju podatkov stanja.

4.5 Deserializacija XML dokumentov

XML je označevalni jezik, ki definira pravila za kodiranje dokumentov, berljivih za človeka

in stroj. Cilji oblikovanja jezika poudarjajo preprostost, splošnost in uporabnost preko

interneta. XML je tekstualni podatkovni format z močno podporo Unicode standarda

kodiranja znakov. Skozi leta se je razvilo več oblik dokumentov XML, med najbolj znanimi

so RSS, Atom, SOAP in XHTML [24].

Pri tolmačenju XML dokumentov smo v našem delu uporabili razred XmlReader, iz

imenskega prostora System.Xml. Instanca objekta se po dokumentu pomika le v smeri

naprej. Lastnosti razreda so preslikava vozlišča XML dokumenta, v katerem se trenutno

nahaja. XmlReader deluje na principu pull model za pridobivanje podatkov. Prednosti pull

model-a so [25]:

Poenostavitev upravljanja stanja z naravnim, od zgoraj navzdol proceduralnim

pristopom.

Podpira več vhodnih tokov in plastenje.

Odjemalcu omogoča podajanje bufferja s tekstom, ki deluje kot nadomestilo za več

nadomestnih spremenljivk podatkovenga tipa string.

Omogoča selektivno obdelavo. Odjemalec lahko preskoči določene elemente in

obdela samo tiste, ki so mu v interesu. Lahko tudi nastavimo lastnosti, ki določajo,

kako je podatkovni tok procesiran.

Page 28: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

19

Na programski kodi 4.5 vidimo primer dokumenta XML, ki ga nam je vrnila naša spletna

storitev. Dokument opisuje vpliv vremena na glavobol, krvni obtok, visok in nizek krvni

pritisk, prebavo, revmo in dihalne poti. Značka <biograf> je postavljena tako, da indicira

začetek vsebine, po njej pa se lahko orientiramo, kje se nahajamo v dokumentu.

Vgnezdeni elementi, kot je <glavobol>, pa s svojo vsebino predstavljajo vrednosti, ki smo

jih kasneje razčlenili v spremenljivke tipa integer. V prvi znački se nahaja metapodatek, ki

vsebuje deklaracijo dokumenta. Deklaracija je procesno navodilo, ki dokument identificira

kot XML dokument, in bi jo naj vsebovali vsi XML dokumenti. Poglejmo si pravila za

pisanje deklaracij [26]:

Če je deklaracija vključena, mora biti pozicionirana v prvi vrstici dokumenta.

Če je deklaracija vključena, mora vsebovati podatek o številki verzije XML.

Če deklaracija vsebuje vse atribute le-te, morajo biti napisani v zaporedju version,

encoding, standalone.

Če dokument vsebuje značke, ki so referencirane ali definirane v zunanjem

dokumentu, mora biti vrednost atributa deklaracije standalone nastavljena na no.

Deklaracija mora biti zapisana z malimi črkami.

Deklaracija nima zaključne značke.

<?xml version="1.0"?>

<biograf>

<glavobol>3</glavobol>

<krvni_obtok>3</krvni_obtok>

<visok_krvni_pritisk>1</visok_krvni_pritisk>

<nizek_krvni_pritisk>3</nizek_krvni_pritisk>

<prebava>1</prebava>

<revma>1</revma>

<dihalne_poti>1</dihalne_poti>

</biograf>

Programska koda 4.6 – Primer dokumenta XML Programska koda 4.5 - Primer dokumenta XML

Page 29: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

20

Na programski kodi 4.6 lahko vidimo, kako se instancira objekt tipa XmlReader z metodo

XmlReader.Create, ki kot parameter sprejme objekt tipa StringReader. Razred

StringReader nam sluţi kot način, kako prebrati vrstice iz podatkovnega tipa string v

takšnem sosledju, kot se pojavijo v dokumentu, ter deluje kot tokovni vmesnik.

4.6 Časovno razporejanje opomnikov

Pri implementaciji aplikacije smo se srečali s problemom, kako izvajati določene dele

kode, medtem ko aplikacija ni v ospredju oz. sploh ni aktivirana. Uporabili smo razred

Reminder, ki je izpeljan iz abstraktnega razreda ScheduledAction.

Background agent-i in Scheduled Task-i aplikaciji omogočajo izvajanje kode v ozadju, tudi

ko ta ne teče. Pri delu s takšnimi agenti se srečamo z dvema tipoma časovnih

razporejevalnikov:

PeriodicTask: Takšni agenti tečejo samo kratek čas in se redno izvajajo na

določene intervale. Namenjeni so za manjša opravila, ki jih lahko hitro izvedemo.

Resource-intensive agents: Takšna opravila lahko tečejo daljše obdobje, ampak se

ne izvajajo po predvidljivem urniku. Opravila se zaţenejo samo takrat, ko dosegajo

določene pogoje, ki se navezujejo na aktivnost procesorja, moč baterije in

internetno povezavo.

Z pomočjo Alarms API lahko ustvarjamo opomnike, specifične glede na uporabniški

scenarij, ki jih nato poveţemo nazaj v aplikacijo [12].

int glavobol; XmlReader reader = XmlReader.Create(new StringReader(e.Result)); while (reader.Read()) {

if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "glavobol"))

{ glavobol = reader.ReadElementContentAsInt()

} }

Programska koda 4.8 – Primer tolmačenja XML dokumenta z razredom XmlReader Programska koda 4.6 - Primer tolmačenja XML dokumenta z razredom XmlReader

Page 30: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

21

Sistemski uporabniški vmesnik objekta Reminder prikaţe ime aplikacije, ki je takšno

opravilo rezervirala, ime opomnika ter dodatne informacije, ki smo jih nastavili v

programski kodi. Prav tako lahko opomniku nastavimo zvok, ki ga izbiramo med

sistemskimi zvoki, ki so na voljo [27].

Aplikacija uporabniku ponuja moţnost izbire intervala opozarjanja za jemanje zdravil, ki so

lahko 2-, 4-, 6-, 8-, 12-, 24- in 48-urni ter intervale opomnikov, ki se sproţijo vsak dan po

zajtrku, kosilu ali večerji. Naleteli smo na teţavo, saj razred Reminder ponuja le dnevne,

tedenske, mesečne in letne intervale. Problem smo rešili tako, da smo za intervale,

manjše od 24 ur, instancirali več objektov Reminder, ki se sproţijo dnevno. 48-urni

interval smo implementirali tako, da smo rezervirali 3 opomnike, ki se sproţijo tedensko.

Page 31: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

22

private void buttonShrani_Click(object sender, EventArgs e) { // Preveri da so vsa polja izpolnjena. if (buttonKontracepcija.Content == null || buttonCas.Content == null) { MessageBox.Show("Obvezna polja niso izpolnjena."); return; } // Kreiramo nov objekt tipa KontracepcijaOpomnik. IsolatedStorageSettings lokalneNastavitve = IsolatedStorageSettings.ApplicationSettings; List<KontracepcijaOpomnik> seznamOpomnikovKontracepcije = (List<KontracepcijaOpomnik>)lokalneNastavitve["seznamOpomnikovKontracepcije"]; KontracepcijaOpomnik opomnik = new KontracepcijaOpomnik((string)buttonKontracepcija.Content, textBoxOpomba.Text, (double)PhoneApplicationService.Current.State["opomnik_kontracepcijaCasMinuta"], (double)PhoneApplicationService.Current.State["opomnik_kontracepcijaCasUra"], false); // Dodamo Reminder, ki bo opozarjal. int reminderId = 0; if (lokalneNastavitve.Contains("najvecjiIdOpomnikKontracepcija")) { int MAX_ID = (int)lokalneNastavitve["najvecjiIdOpomnikKontracepcija"]; reminderId = ++MAX_ID; opomnik.ReminderId = reminderId; lokalneNastavitve["najvecjiIdOpomnikKontracepcija"] = reminderId; } else { lokalneNastavitve.Add("najvecjiIdOpomnikKontracepcija", 0); reminderId = 0; opomnik.ReminderId = 0; } var reminder = ScheduledActionService.Find(reminderId.ToString()); if (reminder != null) { ScheduledActionService.Remove(reminderId.ToString()); } reminder = new Reminder(reminderId.ToString()) { Title = "LifeSal opomnik:", BeginTime = IzracunajPrvoOpozarjanje(opomnik.Minuta, opomnik.Ura), Content = "Pozabili ste vzeti kontracepcijsko tabletko.", NavigationUri = new Uri("/MainPage.xaml", UriKind.Relative), RecurrenceType = RecurrenceInterval.Daily }; ScheduledActionService.Add(reminder); seznamOpomnikovKontracepcije.Add(opomnik); lokalneNastavitve["seznamOpomnikovKontracepcije"] = seznamOpomnikovKontracepcije; lokalneNastavitve.Save(); NavigationService.Navigate(new Uri("/Views/OpomnikPage.xaml", UriKind.Relative)); }

Programska koda 4.7 - Kreiranje opomnikov

Page 32: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

23

Na programski kodi 4.7 lahko vidimo instanciranje novega Reminderja. Iz

IsolatedStorageSettings pridobimo seznam vseh opomnikov, ki trenutno tečejo. Nato

kreiramo nov objekt tipa KontracepcijaOpomnik, ki bo hranil informacije o Reminderju. ID

novega Reminderja se izračuna tako, da pogledamo zadnji ID, ki je bil dodeljen kakšnemu

Reminderju ter ga inkrementiramo. Nato kreiramo objekt tipa Reminder, ki mu nastavimo

lastnosti Title, BeginTime, Content, NavigationUri in RecurrenceType. Reminder nato

rezerviramo preko ScheduledActionService.Add metode.

4.7 Asinhrono programiranje v C#

Jezik C# je z različico 5.0 pridobil zelo uporabno funkcionalnost, ki je razširila in

poenostavila asinhrono programiranje: ključni besedi async in await, ki lahko sinhrone

metode spremenita v asinhrone. Ko uporabljamo ti ključni besedi v programski kodi

metode, prevajalnik ustvari transformacijo kode, da lahko zgenerira ustrezno škrbinsko

metodo oz. stanjski stroj, ki opravlja asinhrone operacije [28].

Osnovna ideja asinhronega programiranja je kreiranje potencialno potratnih metod, ki

tečejo asinhrono. Ideja je v kontrastu s konvencionalnim pristopom pisanja potratnih

funkcij sinhrono, ki jih nato kličemo iz nove niti, da vzpostavimo vzporednost izvajanja.

Razlika med asinhronim pristopom in vzporednostjo izvajanja je ta, da je vzporednost

sproţena znotraj funkcije namesto zunaj le-te [29].

Asinhronost se izkaţe za zelo priročno pri dostopanju do uporabniškega vmesnika, saj se

vse operacije, povezane z uporabniškim vmesnikom po navadi izvajajo v eni niti. Z

asinhronim programiranjem doseţemo to, da se aplikacija ob vsakem času odziva na

dogodke v uporabniškem vmesniku. Poglejmo si karakteristike, ki metodo napravijo

asinhrono [30]:

Definicija metode vključuje ključno besedo async oz Async.

Po dogovoru se imena asinhronih metod končajo s pripono »Async«.

Metoda mora vračati tipe Task<TResult>, Task ali void. Deklaracijo

Task<TResult> lahko razumemo kot obljubo klicatelju, da bomo vrnili objekt

takšnega tipa.

Metoda vsebuje vsaj en await operator, ki označuje točko, kjer metode ne more

nadaljevati, dokler se klicana asinhrona operacija ne konča.

Page 33: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

24

V naslednjem poglavju bomo na praktičnih primerih razčlenili, kako se odvija dogajanje

znotraj asinhronih metod.

4.8 Delo z mapo in geografskimi lokacijami

Za prikazovanje zemljevida smo uporabili kontrolo Microsoft.Phone.Maps.Control.Map.

Dovoljenje za uporabo zemljevida in dostopanje do lokacije uporabnika smo morali v

datoteki WMAppManifest.xml omogočiti tako, da smo odkljukali lastnosti ID_CAP_MAP in

ID_CAP_LOCATION.

Mapo smo ob zagonu strani centrirali na našo lokacijo tako, da smo kontroli nastavili

lastnost GeoCoordinate Center na lokacijo telefona, ki smo jo pridobili z uporabo razreda

Windows.Devices.Geolocation.Geolocator.

Page 34: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

25

4.8.1 Asinhrono pridobivanje lokacije

Slika 4.2 – Ţivljenjski cikel asinhrone metode

Na sliki 4.2 je prikazan ţivljenjski cikel asinhrone metode, ki je poenostavljen model

pridobivanja lokacije iz naše aplikacije. V aplikaciji smo še dodatno preverjali dovoljenja

na aplikacijski in sistemski ravni, tako da smo lovili izjeme tipa

UnauthorizedAccessException in izjeme tipa Exception z lastnostjo Message==

0x80004004. Poglejmo si korake ţivljenjskega cikla iz modela v sliki 6:

1 – Event handler PhoneApplicationPage_Loaded kliče in začne čakati metodo

InicializirajMapoAsync().

2 – InicializirajMapoAsync() pokliče metodo IzracunajNasoLokacijoAsync(), ki bi

naj pridobila geografske podatke o naši lokaciji.

Page 35: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

26

3 – Klic await new Geolocator().GetGeopositionAsync() ustavi nadaljevanje

izvajanja metode IzracunajNasoLokacijoAsync(), dokler mu senzor ne vrne

podatkov. Da se izogne blokiranju virov, IzracunajNasoLokacijoAsync() prenese

nadzor izvajanja njenemu klicatelju, InicializirajMapoAsync().

4 – Ker še nismo začeli čakati na metodo IzracunajNasoLokacijoAsync(), lahko

metoda InicializirajMapoAsync() opravi operacije, povezane z uporabniškim

vmesnikom. V našem primeru metoda obvesti uporabnika, da je aplikacija v

procesu pridobivanja njegove lokacije. Na tem nivoju je priporočeno onemogočiti

interakcijo z drugimi grafičnimi kontrolami, kot so gumbi in mapa, da ne pride do

kakšnih izjem.

5 – Metoda InicializirajMapoAsync() je končala vse delo, ki ga je lahko opravila

brez rezultatov metode IzracunajNasoLokacijoAsync(). Klic await ustavi

nadaljevanje metode InicializirajMapoAsync() in prenese nadzor izvajanja

klicatelju.

6 – Metoda IzracunajNasoLokacijoAsync() konča svoje delo in vrne rezultat v

objekt Task getLokacija. Sedaj imamo podatke o naši lokaciji in metoda

InicializirajMapoAsync() lahko uporabi dobljene podatke za centriranje mape.

7 – Metoda InicializirajMapoAsync() konča svoje delo in to sporoči klicatelju, ki

lahko sedaj normalno nadaljuje svoje delo.

Page 36: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

27

4.8.2 Izrisovanje poti na mapi

Pri izrisovanju poti smo si pomagali z razredoma MapRoute in RouteQuery. Na

programski kodi 4.8 lahko vidimo, kako smo za iskanje najbliţje poti instancirali objekt tipa

RouteQuery, ki smo mu lastnost Waypoints nastavili na seznam List<GeoCoordinate>, ki

je vseboval lokacijo uporabnika in končno točko, ki je bila v našem primeru izbrana

lekarna. Preko instanciranega objekta smo nato klicali metodo QueryAsync, ki ob

končanju izvajanja pokliče callback metodo. V callback metodi smo nato naši mapi dodali

objekt tipa MapRoute preko metode AddRoute(MapRoute).

private void PokaziPotDoLekarne(Lekarna lekarna) { SystemTray.ProgressIndicator.Text = "Izračunavam pot."; RouteQuery routeQuery = new RouteQuery(); routeQuery.QueryCompleted += routeQuery_QueryCompleted; if (!routeQuery.IsBusy) { List<GeoCoordinate> routeCoordinates = new List<GeoCoordinate>(); routeCoordinates.Add(nasaLokacija); routeCoordinates.Add(new GeoCoordinate(lekarna.Latituda, lekarna.Longituda)); routeQuery.Waypoints = routeCoordinates; routeQuery.QueryAsync(); mapa.Center = nasaLokacija; } }

Programska koda 4.8 - Implementacija izrisovanja poti na mapi

Page 37: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

28

4.8.3 Izrisovanje zatičev na mapi

V programski kodi 4.9 vidimo primer dodajanja zatiča za vsako lekarno na mapi. Zatiče

smo na mapo dodajali tako, da smo instancirali objekt tipa MapOverlay, ki smo mu smo za

vsebino določili objekt tipa Image preko lastnosti MapOverlay.Content. Za nalaganje slik iz

projektnega datotečnega prostora smo morali najprej kreirati objekt BitmapImage, ki smo

ga dodali objektu Image preko lastnosti Source. MapOverlay-u smo še nastavili lastnost

Content na sliko in lastnost GeoCoordinate na lokacijo lekarne. Kreirali smo instanco

razreda MapLayer, mu dodali MapOverlay ter vse skupaj dodali na mapo preko metode

Map.Layers.Add. Rezultat lahko vidimo na sliki 7.

private void PokaziLekarnoNaMapi(Lekarna lekarna, string vrstaPina) { GeoCoordinate myGeoCoordinate = new GeoCoordinate(lekarna.Latituda, lekarna.Longituda); // naredimo MapOverlay ki vsebuje pin MapOverlay locationOverlay = new MapOverlay(); BitmapImage image = new BitmapImage(new Uri("/Images/pin_" + vrstaPina + ".png", UriKind.Relative)); Image slika = new Image(); slika.Source = image; slika.Tap += new EventHandler<System.Windows.Input.GestureEventArgs>(KlikNaPin); slika.Tag = lekarna; locationOverlay.Content = slika; locationOverlay.PositionOrigin = new Point(0.5, 0.5); locationOverlay.GeoCoordinate = myGeoCoordinate; // naredimo MapLayer ki vsebuje MapOverlay MapLayer locationLayer = new MapLayer(); locationLayer.Add(locationOverlay); mapa.Layers.Add(locationLayer); }

Programska koda 4.9 – Primer dodajanja zatiča na mapo Programska koda 4.9 - Primer dodajanja zatiča na mapo

Page 38: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

29

4.8.4 Izračun razdalje med dvema geografskima točkama

Za izračun razdalje med dvema točkama nam razred System.Device.GeoCoordinate

ponuja metodo GetDistanceTo(GeoCoordinate), ki nam vrne razdaljo v metrih. Metoda za

izračun uporablja Haversinovo formulo [31]:

Za vsaki dve točki na zemeljski sferi je centralni kot izračunan kot

(

) ( ) ( ) ( ) ( ) (5.1)

kjer je

( ) (

)

( )

(5.2)

d – razdalja med dvema točkama,

r – radius zemeljske sfere,

ϕ1, ϕ2 – zemljepisni širini točke 1 in točke 2,

λ 1, λ2 – zemljepisni dolţini točke 1 in točke 2,

in se d izračuna kot

( (

)) (√ ).

V diplomskem delu smo implementirali enostavno funkcijo merjenja razdalje med dvema

točkama, ki predpostavlja, da so vse geografske lokacije v dvodimenzionalni ravnini, s

preslikavo med prostori:

(5.3)

kjer je:

ϕ1, ϕ2 – zemljepisni širini točke 1 in točke 2,

λ 1, λ2 – zemljepisni dolţini točke 1 in točke 2,

x1, x2 – koordinati x osi obeh točk v dvodimenzionalni ravnini,

y1, y2 – koordinati y osi obeh točk v dvodimenzionalni ravnini.

Razdalja med točkama d se izračuna z enačbo

Page 39: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

30

√( ) ( )

, (5.4)

ki jo lahko preprosto izpeljemo iz znamenitega pitagorovega izreka, ki se v pravokotnih

trikotnikih uporablja za izračun dolţine hipotenuze. Razdalja med točkama je vedno

nenegativno število, zato pri računanju uporabimo absolutno vrednost.

private List<Lekarna> IzracunajNajbljizjeLekarne() { List<Lekarna> seznamNajblizjihLekarn = new List<Lekarna>(); List<double> seznamNajmanjsihDolzin = new List<double>(); foreach (Lekarna lekarna in seznamVsehLekarn) { double x1 = lekarna.Longituda; double y1 = lekarna.Latituda; double x2 = nasaLokacija.Longitude; double y2 = nasaLokacija.Latitude; double d = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2)); if (seznamNajmanjsihDolzin.Count == 10) { double MAX = Int32.MinValue; int MAX_POS = -1; for (int i = 0; i < 10; i++) { double dolzina = seznamNajmanjsihDolzin.ElementAt(i); if (dolzina > MAX) { MAX = dolzina; MAX_POS = i; } } if (d < MAX) { seznamNajmanjsihDolzin.RemoveAt(MAX_POS); seznamNajmanjsihDolzin.Insert(MAX_POS, d); seznamNajblizjihLekarn.RemoveAt(MAX_POS); seznamNajblizjihLekarn.Insert(MAX_POS, lekarna); } } else { seznamNajmanjsihDolzin.Add(d); seznamNajblizjihLekarn.Add(lekarna); } } return seznamNajblizjihLekarn; }

Programska koda 4.1 – Iskanje 10 najbliţjih lekarn Programska koda 4.10 - Iskanje 10 najbliţjih lekarn

Page 40: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

31

Na programski kodi 4.10 vidimo končno implementacijo našega algoritma za izračun

razdalje med dvema geografskima lokacijama. Namen algoritma je poiskati 10 najbliţjih

lekarn uporabniku. Uporabili smo dva seznama, v enem smo hranili objekte tipa Lekarna,

v drugem pa objekte primitivnega tipa double. Sprehodili smo se čez seznam vseh lekarn

ter za vsako izračunali razdaljo od uporabnikove lokacije. Če je razdalja lekarne manjša

od katere izmed razdalj v seznamu najbliţjih lekarn ali pa še seznam ne vsebuje desetih

lekarn, tisto lekarno dodamo v seznam.

4.9 Spletne storitve Za prikaz določenih podatkov smo uporabili ţe vnaprej pripravljene spletne storitve, ki so

podatke vračale v obliki XML ali JSON. Poglejmo si spletne storitve, uporabljene v

diplomskem delu:

biovreme – napoved vpliva vremena, oblika: .xml

iskanje – iskanje ponudb lekarnarjev, oblika: JSON, parametri:

o lat: latituda v radianih

o long: longituda v radianih

o query: ime izdelka, po katerem se išče

o tip_lekarne: 1 – vse lekarne, 2 – fizične lekarne, 3 – spletne lekarne

o id_drzave: identifikator drţave uporabnika

o radius: radius iskanja v metrih

o *id_kategorija: opcijski parameter, identifikator kategorije zdravil

o *id_podkategorija: opcijski parameter, identifikator podkategorije zdravil

o *page: opcijski parameter, izbira številke strani vrnjenega JSON objekta

o *simptomi[]: identifikator simptoma

jeziki – ID jezikov, ki jih podpira aplikacija, oblika: .xml

kategorije – ID in imena kategorij zdravil, oblika: .xml

ponudbe_od_posamezne_lekarne – seznam ponudb glede na podan ID lekarne,

oblika: JSON

posamezna_ponudba – vsi podatki posamezne ponudbe glede na podan ID,

oblika: JSON

simptomi – seznam vseh simptomov glede na ID drţave, oblika: .xml ali JSON

zadnje_dodane_fizicne – zadnje dodane ponudbe fizičnih lekarn

zadnje_dodane_spletne – zadnje dodane ponudbe spletnih lekarn

Page 41: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

32

oglasi – slika oglasa ter URL, ki se naj naloţi ob kliku le-tega

seznam_drzav – ID-ji podprtih drţav

seznam_lekarn – seznam vseh lekarn glede na podan ID drţave

seznam_zdravil – seznam vseh zdravil glede na podan ID drţave

4.9.1 Klicanje spletnih storitev

Platforma nam ponuja osnovno podporo za povezljivost z internetom preko razreda

WebClient, ki je deluje kot ovojnica za razred HttpWebRequest. WebClient je laţji za

uporabo, vendar je manj fleksibilen, sploh pri delu z header-jem in content-om zahtev, ker

se raje obrnemo na razred HttpWebRequest. Razred WebClient je del standardne

Microsoft .NET base class library (BCL), uporabljamo pa ga za prenos in nalaganje

podatkov preko spleta. Verzija razreda, ki je na voljo na platformi Windows Phone 8, je

bolj omejena kot standardna verzija v Common Language Runtime, predvsem zato ker ne

omogoča asinhronih klicev [12].

Iz programske kode 4.11 lahko vidimo dejanski klic spletne storitve, ki nam je vračala

podatke o vplivu vremena. Najprej smo kreirali instanco razreda WebClient, ji pripeli

callback metodo HttpCompleted, nato pa poklicali asinhrono metodo za prenos podatkov

iz določenega URI naslova. Metoda HttpCompleted začne z izvajanjem takrat, ko metoda

DownloadStringAsync dvigne dogodek DownloadStringCompleted. Rezultat prenosa se

nahaja v objektu tipa DownloadStringCompletedEventArgs.

private void PrenesiPodatke() { WebClient wcDanes = new WebClient(); wcDanes.DownloadStringCompleted += HttpCompleted; wcDanes.DownloadStringAsync( new Uri("http://biovreme.lifesal.com/xml/biograf.xml")); } private void HttpCompleted(object sender, DownloadStringCompletedEventArgs e) { string podatki = e.Result; }

Programska koda 4.2 – Prenos podatkov iz spletne storitve Programska koda 4.11 - Prenos podatkov iz spletne storitve

Page 42: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

33

4.10 Računanje indeksa telesne mase

Indeks telesne mase smo računali po enačbi, ki jo je med leti 1830 in 1850 oblikoval

belgijski polihistor Adolphe Quetelet. Enačba je definirana kot teţa osebe, deljena s

kvadratom njene višine [32]:

( )

( ( )) . (3.5)

Na podlagi zgornje enačbe smo nato implementirali metodo za računanje indeksa telesne

mase, kot lahko vidimo v programski kodi 4.12.

4.11 Izračun dnevnega vnosa kalorij

Za predvidevanje uporabnikovega bazalnega metabolizma (BMR – basal metabolic rate)

in optimalnega dnevnega vnosa kalorij smo uporabili Harris-Beneditctovo enačbo.

Predvideni BMR je nato pomnoţen s številom, ki ustreza uporabnikovi stopnji aktivnosti,

rezultat pa je priporočeni dnevni vnos kalorij. Prvotna Harris-Beneditctova enačba je bila

objavljena v letih 1918 in 1919, v diplomskem delu pa smo uporabili popravljeno enačbo iz

leta 1984, ki sta jo oblikovala Allan M. Roza in Harry M. Shizgal [33].

BMR se za moške izračuna kot

( ( )) ( ( )) ( ( ))

(3.6)

za ţenske pa

( ( )) ( ( )) ( ( )).

(3.7)

private double IzracunajItm() { double visina = izbranaVisina / 100.00; double teza = izbranaTeza; return teza / (visina * visina); }

Programska koda 4.12 - Metoda za izračun indeksa telesne mase

Page 43: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

34

Faktor za tip aktivnosti je sledeč:

sedeč – 1,2

rahlo aktiven – 1,375

srednje aktiven – 1,55

zelo aktiven – 1,725

izjemno aktiven – 1,9.

Na programski kodi 4.13 lahko vidimo implementacijo predvidevanega vnosa kalorij.

public double SteviloKalorij { get { double BMR; if(Moski) BMR = 88.362 + (13.397 * Teza) + (4.799 * Visina) - (5.677 * Starost); else BMR = 447.593 + (9.247 * Teza) + (3.098 * Visina) - (4.330 * Starost); if (Cilj == 0) return BMR - 500; else if (Cilj == 2) return BMR + 500; if (IntenzivnostVadbe == 0) return BMR * 1.2; else if (IntenzivnostVadbe == 1) return BMR * 1.375; else if (IntenzivnostVadbe == 2) return BMR * 1.55; else if (IntenzivnostVadbe == 3) return BMR * 1.725; else if (IntenzivnostVadbe == 4) return BMR * 1.9; return -1; } set { _steviloKalorij = value; } }

Programska koda 4.13 - Izračun predvidevanega vnosa kalorij

Page 44: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

35

5 FUNKCIONALNOSTI APLIKACIJE

5.1 Primeri uporabe

Slika 5.1 – Primeri uporabe aplikacije

V tem poglavju bomo našteli in opisali posamezne primere uporabe, ki jih lahko vidimo na

sliki 11.

Page 45: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

36

5.1.1 Ogledovanje ponudb

Uporabnik lahko pregleda akcijske ponudbe, ki so jih preko privatne spletne strani v

podatkovno bazo dodale lekarne. Za boljše filtriranje lahko uporabi iskanje po simptomu

bolezni ali po kategoriji zdravila. Na sliki 4.2 lahko vidimo izpis akcijskih ponudb.

Slika 5.2 – Pregled akcijskih ponudb

5.1.2 Kreiranje opomnika

Za rezervacijo opomnika za kontracepcijsko sredstvo ali zdravilo je potrebno najprej

izbrati določeno zdravilo oz. kontracepcijsko sredstvo, nato pa nastaviti čas ter intervale

opominjanja. Izgled uporabniškega vmesnika lahko vidimo na sliki 4.3.

Page 46: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

37

Slika 5.3 - Aktivni opomniki za zdravila

5.1.3 Ogledovanje lekarn

Na zemljevidu se uporabniku prikaţe 10 najbliţjih lekarn glede na njegovo lokacijo. Ob

kliku na zatič ima uporabnik moţnost izrisa poti do lekarne ali pa izpisa podrobnosti o

lekarni, kot so delovni časi, lokacija in dodane akcijske ponudbe. Na sliki 4.4 lahko vidimo

prikaz lekarn na zemljevidu.

Page 47: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

38

Slika 5.4 – Prikazovanje bliţnjih lekarn na zemljevidu

5.1.4 Ogled menstrualnega koledarja

Uporabnik si lahko pregleda dnevnik krvavenja, predvidene dneve krvavenja in

predvidene dneve plodnosti. Za beleţenje stopnje krvavenja ob kliku na datum v koledarju

izbere vrednost med 1 in 3. Na sliki 4.5 vidimo prikaz trenutnega krvavenja ter prihajajoče

plodne dneve.

Slika 5.5 – Menstrualni koledar

Page 48: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

39

5.1.5 Ogled kalorij

Uporabnik lahko vodi evidenco zauţitih kalorij, prav tako pa lahko doda obrok, ki ga je

pojedel. Na seznamu zdravil izbere zauţito ţivilo ter količino zauţitega. Ob prvem zagonu

funkcionalnosti mora izpolniti podatke o teţi, višini, starosti, spolu, aktivnosti ter cilju

prehranjevalne diete. Slika 4.6 prikazuje dnevnik zauţitih kalorij.

Slika 5.6 – Pregled dnevnega vnosa kalorij

5.1.6 Izračun indeksa telesne mase

Za izračun indeksa telesne mase uporabnik izpolni podatke o teţi, višini, spolu in starosti.

Podatki se nato prikaţejo na grafičnem vmesniku, prav tako pa lahko s klikom na ikonico z

vprašajem dobi napotke ali pohvale za njegov način ţivljenja. Na sliki 4.7 lahko vidimo

končni rezultat izračunavanja ITM.

Page 49: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

40

Slika 5.7 – Izračun ITM

5.1.7 Pregled vpliva vremena

Na prvem delu strani se preko grafičnega vmesnika na diskretni skali prikaţe vpliv

vremena, drugi del strani pa vsebuje opise vpliva vremena. Na sliki 4.8 vidimo grafični

vmesnik prikazovanja vpliva vremena.

Slika 5.8 – Prikaz vpliva vremena

Page 50: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

41

5.1.8 Spreminjanje nastavitev

Uporabnik lahko nastavi čas, ob katerih jé obroke, trajanje menstrualnega ciklusa in

krvavenja, radij iskanja ponudb ter dovoljenje za dostop aplikacije do njegove lokacije.

Slika 4.9 prikazuje seznam nastavitev v aplikaciji.

Slika 5.9 – Nastavitve na aplikacijskem nivoju

Page 51: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

42

6 SKLEP

V diplomskem delu smo prikazali postopek razvijanja mobilnih aplikacij na mobilni

platformi Windows Phone 8. Spoznali smo delovanje in obnašanje Windows Phone

aplikacij, razrede in grafične elemente ter njihovo uporabo v praksi.

Pozornost smo posvetili razvijalnemu okolju Microsoft Visual Studio 2012 in

programskemu jeziku C#, prav tako pa smo poglobili znanje na področju razvijanja

mobilnih aplikacij za mobilno platformo Windows Phone.

Spoznali smo moderne smernice oblikovanja uporabniških vmesnikov, bogatenja

uporabniških scenarijev ter zmanjševanja uporabnikove interakcije z elementi grafičnega

vmesnika ter se posvetili interkaciji z vsebino. Raziskali smo delo s spletnimi storitvami, z

mapo in geografskimi lokacijami. Podrobno smo razčlenili delovanje in ţivljenjski cikel

izvajanja asinhronih metod.

Razvili smo mobilno aplikacijo, ki obsega okoli 3600 vrstic izvršne kode. Ugotovili smo, da

kot razvijalec ni potrebno vsega razviti sam, saj so na spletu dostopne odprtokodne

knjiţnice, ki nam olajšajo delo. V postopku testiranja smo prišli do spoznanja, da je

potrebno redno preverjati povezljivost z internetom in sistemske nastavitve dostopanja do

uporabnikove lokacije. Prav tako smo ugotovili, da je potrebno sistematsko beleţiti

identifikatorje opomnikov, da jih lahko brez teţav izbrišemo iz delovanja v ozadju.

Med pisanjem diplomskega dela aplikacija čaka na potrditev s strani poslovnih partnerjev,

da lahko izide na trg. Aplikacija je bila testirana v profesionalni programerski ekipi, kjer

smo vsako napako skrbno zabeleţili ter jo kasneje odpravili. Skozi ţivljenjsko dobo je

aplikacija zaradi potreb uporabnikov v celoti spremenila grafično podobo in postavitev,

večkrat pa smo morali poskrbeti za mikrooptimizacijo in prerazporeditev grafičnih

elementov.

V prihodnosti nameravamo dele kode prepisati tako, da bo čim bolj generična in

razširljiva. Ţelimo si tudi preučiti priljubljene zasnovne vzorce in arhitekturne stile ter jih

skušati integrirati v našo kodno bazo.

Page 52: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

43

LITERATURA IN VIRI

[1] Clark, J. History of Mobile Application. University of Kentucky. Dostopno na:

http://www.uky.edu/~jclark/mas490apps/History%20of%20Mobile%20Apps.pdf

[19.8.2014]

[2] Microsoft design principles. Microsoft Developer Network. Dostopno na:

https://dev.windowsphone.com/en-us/design/principles [19.8.2014]

[3] Windows Phone. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Windows_Phone [19.8.2014]

[4] Lomas, N. Android Still Growing Market Share By Winning First Time Smartphone

Users. TechCrunch, (2014). Dostopno na:

http://techcrunch.com/2014/05/06/android-still-growing-market-share-by-winning-first-time-

smartphone-users/ [19.8.2014]

[5] Belfiore, J. Scaling Windows Phone, evolving Windows 8. Windows Blog, (2014).

Dostopno na:

http://blogs.windows.com/windows_phone/b/windowsphone/archive/2014/02/23/scaling-

windows-phone-evolving-windows-8.aspx [19.8.2014]

[6] Windows Phone 7. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Windows_Phone_7 [19.8.2014]

[7] Hatchimonji, G. Microsoft Launches Windows Phone 8. Brighthand, (2012). Dostopno

na: http://www.brighthand.com/news/microsoft-launches-windows-phone-8/ [19.8.2014]

[8] Rubino, D. Overview and review of Windows Phone 8. WP Central, (2012). Dostopno

na:

http://www.wpcentral.com/overview-and-review-windows-phone-8 [19.8.2014]

[9] Windows Phone 8.1. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Windows_Phone_8.1 [19.8.2014]

[10] Bright, P. Windows NT coming to phones with Windows Phone 8. Ars Technica,

(2012). Dostopno na:

http://arstechnica.com/gadgets/2012/06/windows-nt-coming-to-phones-with-windows-

phone-8/ [19.8.2014]

[11] Nevalainen, J. Windows Phone 8 Kernel Architecture. .NET Junkyard, (2012).

Dostopno na:

http://j4ni.com/blog/?p=107/ [19.8.2014]

[12] Whitechapel, A., McKenna, S. Windows Phone 8 Development Internals, Preview 2.

Microsoft Press, 2012.

Page 53: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

44

[13] App activation and deactivation for Windows Phone 8. Microsoft Developer Network,

(2014). Dostopno na:

http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff817008(v=vs.105).aspx

[19.8.2014]

[14] .NET Framework. Wikipedia. Dostopno na:

http://en.citizendium.org/wiki/.NET_Framework [19.8.2014]

[15] What is DreamSpark? Dostopno na:

https://www.dreamspark.com/What-Is-Dreamspark.aspx [19.8.2014]

[16] Windows Phone SDK 8.0. Microsoft Download Center. Dostopno na:

http://www.microsoft.com/en-us/download/details.aspx?id=35471 [19.8.2014]

[17] Visual Studio Express 2012 for Windows Phone 8. Micosoft Developer Network,

(2014). Dostopno na:

http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff630878(v=vs.105).aspx

[19.8.2014]

[18] Extensible Application Markup Language. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Extensible_Application_Markup_Language [19.8.2014]

[19] The Windows Phone Toolkit. CodePlex. Dostopno na:

http://phone.codeplex.com [19.8.2014]

[20] Binkley-Jones, T., Benoit, A., Perga, M., Sync, M. Windows Phone 8 in Action.

Manning Publications, 2014.

[21] The JavaScript Object Notation (JSON) Data Interchange Format. The Internet

Engineering Task Force, (2013). Dostopno na:

http://tools.ietf.org/html/rfc7158 [19.8.2014]

[22] JavaScriptSerializer Class. Microsoft Developer Network. Dostopno na:

http://msdn.microsoft.com/en-

us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx [19.8.2014]

[23] Starhl, R. Using JSON.NET for dynamic JSON parsing. Rick Strahl's Web Blog,

(2012). Dostopno na:

http://weblog.west-wind.com/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-

parsing [19.8.2014]

[24] 24 XML. Wikipedia. Dostopno na: http://en.wikipedia.org/wiki/XML [19.8.2014]

[25] XmlReader Class. Microsoft Developer Network. Dostopno na:

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx [19.8.2014]

[26] XML Declaration, XMLwriter. Dostopno na:

https://xmlwriter.net/xml_guide/xml_declaration.shtml [19.8.2014]

Page 54: RAZVOJ MOBILNE APLIKACIJE »LIFESAL« ZA PLATFORMO …da potrebujejo naslednika za takrat aktualno platformo Microsoftovih mobilnih naprav – Windows Mobile. Windows Phone 7, prva

Razvoj mobilne aplikacije „LifeSal“ za platformo Windows Phone 8

45

[27] Cameron, R. Pro Windows Phone App Development, second edition. Apress, 2011.

[28] Rahman, M. Expert C# 5.0 with the .NET 4.5 Framework. Apress, 2012.

[29] Albahari, J., Albahari, B. C# 5.0 in a Nutshell, 5th edition. O'Reilly Media, 2012.

[30] Asynchronous Programming with Async and Await. Microsoft Developer Network.

Dostopno na: http://msdn.microsoft.com/en-us/library/hh191443.aspx [19.8.2014]

[31] Haversine formula. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Haversine_formula [19.8.2014]

[32] Body mass index. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Body_mass_index [19.8.2014]

[33] Harris-Benedict equation. Wikipedia. Dostopno na:

http://en.wikipedia.org/wiki/Harris%E2%80%93Benedict_equation [19.8.2014]