Monitorizarea Activitatilor Fizice Printr O Aplicatie Windows Phone
Monitorizarea activităților fizice printr-o aplicație Windows Phone
Cuprins
INTRODUCERE
CAPITOLUL 1. PREZENTAREA TEHNOLOGIEI UTILIZATE
1.1. ISTORIC
1.2. ARHITECTURA MICROSOFT .NET
1.3. ARHITECTURA APLICAȚIILOR WINDOWS PHONE
1.4. TEHNOLOGIE C#
1.4.1 Tipuri de date
1.4.2 Tipuri de date Clasele
1.4.3 Delegații(delegate)
1.4.4 Evenimentele
1.4.5 Programarea asincronă
1.5. TEHNOLOGIA XAML
1.5.1. Importanța limbajul XAML în arhitectura Windows Phone și în procesul de dezvoltare
1.5.2 Spațiile de nume XAML
1.5.3 Sintaxa XAML
1.6. SPAȚIUL DE NUME WINDOWS.DEVICES.GEOLOCATION
1.6.1. Clasa Geolocator
1.6.2. Clasa Geoposition
1.7. SPATIILE DE NUME WINDOWS.SERVICES.MAPS SI WINDOWS.UI.XAML.CONTROLS.MAPS.MAPROUTESVIEW
1.7.1. Clasa MapLocationFinder
1.7.2. Clasa MapRouteView
1.8. SQLITE
CAPITOLUL 2. PREZENTARE APLICAȚIEI
2.1. PREZENTAREA FUNCȚIONALITĂȚII
2.2. PREZENTAREA STRUCTURII TEHNICE
2.3. PREZENTAREA STRUCTURII BAZEI DE DATE
CAPITOLUL 3. DEZVOLTĂRI ULTERIOARE
3.1. APLICAȚIE WEB CU BACKUP ÎN AZURE ȘI ONEDRIVE
CONCLUZII
BIBLIOGRAFIE
ANEXE
Introducere
Pentru mine sistemul de operare pentru mobile oferit de Microsoft, Windows Phone a fost tot timpul cel mai bun de pe piață. De ce? Update-uri direct de la Microsoft, utilizatorii având avantajul că le primesc rapid, iar sistemul de operare rulează fluent chiar și pe cel mai slab telefon din punct de vedere al configurației hardware.
Mi-am ales această temă, deoarece mi se pare interesantă ideea de a cunoaște distanța parcursă într-o zi in toate activitățile tale, și mai ales să știi câte calorii ai consumat într-un număr de pași. Mi-am dorit ca atunci când ajung acasă după activitățile zilnice, să pot vedea traseul parcurs de mine în timpul zilei pe o hartă și să-mi pot compara activitatea cu celelalte zile.
Alegând această temă mi-am lansat singur o provocare, neștiind cum ar urma să fie structurată aplicația, cum să încep, cu ce să încep, dar acum la final mi-am dat seama că am făcut o alegere bună.
Structura aplicației este una simplistă și ușor de utilizat pentru un utilizator normal. La început utilizatorul este întâmpinat de o pagină, unde trebuie să aleagă între modul alergare sau mers și să-și introducă numărul de kilograme și înălțimea sa în centimetri. După ce au fost îndepliniți acești pași, utilizatorul o sa vadă structura aplicației formată din trei părți:
Acasă reprezintă prima din cele trei părți și este locul unde utilizatorul poate să vadă toate informațiile necesare în timpul și după desfășurarea activității sale: distanța parcursă în km, durata activității, numărul de pași efectuați și viteza medie.
Locația Mea este a doua din cele trei părți, iar în această pagină utilizatorul poate să-și vadă poziționarea pe hartă în timp real și traseul parcurs de când și-a pornit aplicația și până la locația sa curentă. Aceasta mai oferă utilizatorului opțiunea de a introduce adresa unei locații unde ar vrea să ajungă și mai apoi afișarea traseului de urmat, pe hartă.
Istoric reprezintă ultima parte din aplicație în care apare o listă conținând informațiile despre activitățile desfășurate de utilizator în ultimele zile. Acestea sunt stocate într-o bază de date.
În ziua de astăzi mai există aplicații care au ca și scop monitorizarea activităților fizice. Ele se găsesc pe magazinul de aplicații Windows Phone: „Sănătate și fitness” este o aplicație dezvoltată de Microsoft și după părerea mea este cea mai bună și complexă aplicație de activitate fizică din magazinul de aplicații Windows Phone; „Step Counter” este o altă aplicație din magazinul de aplicații, dar spre deosebire de aplicația dezvoltată de mine arată doar numărul de pași pe o anumită distanță, nu și informații precum numărul de calorii arse, viteza medie pe o anumită distanță etc; „RunMaster Pedometer” dezvoltată de RunMaster are toate trăsăturile aplicației dezvoltate de mine, în afară de una: aceea de a introduce o locație, de a se stabili un traseu pană la acea locație și posibilitatea de a se monitoriza traseul stabilit de utilizator.
În continuare structura lucrării mele de licență este structurată în trei capitole în care voi prezenta în detaliu tehnologiile folosite, modul în care se obține locația, prezentarea funcționalităților și dezvoltările ulterioare.
Capitolul 1. Prezentarea tehnologiei utilizate
Istoric
Windows Phone este un sistem de operare mobil dezvoltat de Microsoft, ca și succesorul sistemului de operare mobil Windows Mobile. Prima variantă a sistemului Windows Phone a fost Windows Phone 7, care a apărut în 8 noiembrie 2010. Apoi au urmat o serie de update-uri ale sistemului Windows Phone la versiunea 7.5 sau Mango în mai 2011, la Windows Phone 7.8 în ianuarie 2013, care din păcate a fost ultimul update dat de Microsoft pentru utilizatorii de Windows Phone 7. În 20 iunie 2012 a apărut Windows Phone 8, a doua generație a sistemului de operare mobil Microsoft, care înlocuiește complet arhitectura lui Windows Phone 7. Din această cauză utilizatorii lui Windows Phone 7 n-au putut face tranziția printr-un update la Windows Phone 8. Microsoft a confirmat atunci că toți utilizatorii pe ai căror telefoane rulează Windows Phone 8, vor putea face upgrade la Windows Phone 8.1, atunci când acesta se lansează. Astfel în data de 10 Februarie 2014 a apărut Windows Phone 8.1 și toți utilizatorii de Windows Phone 8 au putut face tranziția la noul sistem de operare.
Noua versiune a sistemul de operare oferit de Microsoft a venit cu multe noutăți în acest domeniu. Acesta putea oferi dispozitive cu diverse facilități:
rezoluții mai bune cu trei dimensiuni („WVGA 800×480 15:9”, „WXGA 1280×768 15:9”, „720p 1280×720 16:9”, „1080p 1080 x 1920 16:9”)
procesoare multi-core
suport de card micro-SD
NFC, Near Field Communication
compatibilitate cu aplicațiile Windows Phone 7 și actualizări OTA(over-the-air) pe toate dispozitivele Windows Phone 8.1, cu suport garantat de 18 luni de la lansarea lor.
O noutate din punct de vedere hardware este faptul că acum noul sistem de operare mobil oferit de Microsoft, suportă butoane digitale în detrimentul celor fizice. Acestea au aceleași funcționalități ca cele fizice: Înapoi sau Ieșire din aplicații, Butonul de start și Căutare pe internet.
Una dintre cele mai importante noutăți aduse de Windows Phone 8.1 este Cortana, un asistent personal virtual, similar cu Google Now sau Siri de la Apple. Capabilitățile Cortana includ: abilitatea de a seta remindere, de a răspunde la întrebări și utilizează un așa numit NoteBook (jurnal) în care memorează obiceiurile utilizatorului pentru o mai bună interacțiune între Cortana și utilizator.
Pe lângă Cortana, un nou adaos la partea vizuală este a treia coloană de „Tile-uri” unde utilizatorul poate să își personalizeze și mai mult telefonul.
O altă noutate adusă cu Windows Phone 8.1 este mult așteptatul centru de notificări, unde acum utilizatorul poate să își seteze anumite opțiuni rapid, cum ar fi pornire sau oprire de date mobile, de Bluetooth sau modul avion.
Figura 1.1. Trecerea de la Windows Phone 7 la Windows Phone 8
Microsoft a anunțat o noua versiune de a sistemului de operare mobil denumit Windows 10. Aceștia au promis că orice telefon cu sistemul de operare Windows Phone 8.1 va face tranziția la Windows Phone 10. Noul sistem de operare este programat să se lanseze la sfarșitul anului 2015.
Arhitectura Microsoft .NET
Arhitectura.NET este un cadru de dezvoltare a softului sub care, se vor realiza, distribuii si rula aplicații de tip WEB, serviciu WEB si forme Windows. .NET este formată din trei părți importante ASP.NET, clasele specifice platformei și Common Language Runtime. Platforma .NET suportă mai multe limbaje de programare cum ar fi :C++, Visual Basic, Java, C# etc.
Caracteristici principale ale arhitecturii. NET:
managementul automat al memoriei datorită mecanismului automat garbage collection
independență de procesor și de platformă
dezvoltarea multilimbaj
suportul pentru versionare
portabilitate
Arhitectura .NET este formată din două părți importante:
Common Language Runtime (CLR)
Este mediul de execuție a programelor, modulul care se ocupă cu managementul și execuției codului scris
Base Class Library
Biblioteca de clase a arhitecturi .NET asigură o arie largă a necesităților de programare (interfețe cu utilizatorul, conectarea la baze de date, accesarea datelor și altele). Codul bibliotecii este precompilat fiind încapsulat în funcții denumite metode pe care programatorul le poate apela din propriul program. Tot odată metodele aparțin claselor iar clasele aparțin spațiilor de nume (namespaces).
Platforma .NET are doua unelte puse la dispoziția programatorilor pentru dezvoltarea de aplicații:
Visual Studio
.NET Framework SDK care include următoarele:
Arhitectura .NET
Compilatoare în linia de comandă pentru limbaje de programare (c#,c++ etc)
Exemple și documentație
Instrumente pentru creare, depanare și configurarea aplicațiilor .NET
Arhitectura aplicațiilor Windows Phone
Figura 1.2 Arhitectura aplicațiilor Windows Phone
Sistemul de operare mobil lansat de Microsoft utilizează o arhitectură stratificată așa cum se poate vedea în figura 1.2. Windows Phone definește un minim de specificații hardware pe care toate telefoanele trebuie să le îndeplinească cum ar fi: procesor ARM7, ecran multi-touch, GPU cu DirectX, o cameră foto , senzori standard (GPS ,busolă, senzor de proximitate, de lumină și accelerometru) și trei butoane fizice sau virtuale, cu funcții de înapoi, start și căutare.
Arhitectura Windows Phone este bazată pe Windows NT, aceasta însemnând că acum sistemul de operare deține elementele de securitate, stiva de rețea, sistemul de fișiere la fel ca Windows 8. Astfel o aplicație poate fi portată de pe Windows Phone 8 pe Windows 8 cu puține modificări, mai exact, conform declarațiilor Microsoft, doar 10% din aplicație trebuie să fie modificată, restul fiind comun. Diferența majoră la portare este dată de rezoluția și dimensiunea ecranului.
O dată cu apariția lui Windows Phone 8, Microsoft introduce și un nou model de programare asincronă bazată pe procese. Această schimbare relevantă este introdusă în librăriile CoreCLR și .NET Framework. Noul sistem va rula pe hardware multi-core. Astfel se poate profita de modele Async și Await pentru a putea oferi o experiență mult mai optimizată pentru utilizatori, profitând de nucleele dispozitivelor.
Aplicațiile sunt distribuite în cadrul lui Windows Phone cu ajutorul aplicației proprietar Marketplace sau Magazin de aplicații și prin intermediul lui Windows Phone Dev Center.
Windows Phone Dev Center este un portal destinat programatorilor care oferă informații cu privire la modul de a construi, gestiona și publica aplicații. Acesta oferă de asemenea instrumente pentru urmărirea descărcărilor aplicațiilor pentru următoarele categorii: beta, trial, gratuite și plătite.
Magazinul de aplicații în schimb, este destinat utilizatorilor și acceptă variante trial ale aplicațiilor, astfel încât utilizatorii să poată să încerce aplicația înainte de a se decide dacă o vor cumpăra. Acesta oferă suport și pentru așa numitul buy-in-app (cumpărare-în-aplicație) care permite utilizatorului să cumpere diverse bonusuri în cadrul aplicației, contra cost. Programatorii de asemenea, pot introduce un model de publicitate, magazinul de aplicații acceptând și facilitând și acest lucru. Magazinul de aplicații suportă selecții de aplicații în funcție de țară și chiar și diverse modalități de plată în funcție de aceasta.
Tehnologie C#
Limbajul de programare C#(CSharp) a fost conceput la sfârșitul anilor nouzeci de Microsoft și a fost construit pentru a fi un concurent pentru limbajul Java conceput de către James Gosling la Sun Microsystems. Acest limbaj prezintă următoarele calități:
Este un limbaj de programare simplu, modern și productiv
Este orientat total pe obiect
Gestionează în mod automat memoria utilizată
El de aplicații în schimb, este destinat utilizatorilor și acceptă variante trial ale aplicațiilor, astfel încât utilizatorii să poată să încerce aplicația înainte de a se decide dacă o vor cumpăra. Acesta oferă suport și pentru așa numitul buy-in-app (cumpărare-în-aplicație) care permite utilizatorului să cumpere diverse bonusuri în cadrul aplicației, contra cost. Programatorii de asemenea, pot introduce un model de publicitate, magazinul de aplicații acceptând și facilitând și acest lucru. Magazinul de aplicații suportă selecții de aplicații în funcție de țară și chiar și diverse modalități de plată în funcție de aceasta.
Tehnologie C#
Limbajul de programare C#(CSharp) a fost conceput la sfârșitul anilor nouzeci de Microsoft și a fost construit pentru a fi un concurent pentru limbajul Java conceput de către James Gosling la Sun Microsystems. Acest limbaj prezintă următoarele calități:
Este un limbaj de programare simplu, modern și productiv
Este orientat total pe obiect
Gestionează în mod automat memoria utilizată
Eliberează memoria automat folosindu-se de garbage collector
Sintaxa limbajului este una asemănătoare limbajelor C++ sau Java
Funcționează pe Arhitectura.NET(.NET Framework)
C# este un limbaj compilat, iar în urma compilări se creează un fișier numit assembly, care de regulă are extensia .exe sau .dll. Fișierul assembly nu poate fi executat pe un sistem în care nu există infrastructura Arhitecturi .NET. Acest fișier conține un tip special de cod numit Limbaj Intermediar (Common Intermediate Language – CIL). Limbajul CIL definește un set de instrucțiuni portabile independente de orice tip de procesor și platformă.
În momentul execuției unui program, CLR activează un compilator special JIT (just in time) care preia codul CIL și îl transformă în cod executabil. Această transformare se face la cerere, o secvență de cod se compilează doar în momentul în care este utilizată pentru prima oara. Datorită formatului CIL, un program în acest format se poate rula pe orice sistem în care sa instalat CLR astfel se asigură portabilitatea aplicațiilor Arhitecturi .NET.
1.4.1 Tipuri de date
Limbajul C# conține doua tipuri de date tipuri valoare și tipuri referință. Tipurile de date valoare includ tipurile simple (char, int etc), tipul enumerare și tipul structură. Tipurile referință includ tipurile clasă, tablou, delegat și interfață.
1.4.2 Tipuri de date Clasele
Clasele aparțin tipului de dată referință. O clasă poate să implementeze mai multe interfețe și să moștenească o singură clasă. Clasele pot conține metode, proprietăți, evenimente, câmpuri, indexatori, constructori, constante și tipuri imbricate
Tabelul 1.1 Modificatori de acces ai unei clase
Fiecare membru al unei clase conține un modificator de acces care controlează accesul la el. O descriere este dată in tabelul 1.1.
1.4.3 Delegații(delegate)
Delegările fac parte din tipul de date referință a limbajului C# și au rolul de a menține toate semnăturile a unor liste de metode iar apoi în a le apela pe toate simultan. Aceste tipuri de date se declară în afara claselor, la nivel global, cu ajutorul cuvântului cheie „delegate”. Un exemplu de declarare se poate vedea după cum urmează:
delegate Delegat(int x).
Un aspect important al delegărilor este că acestea nu au corp, iar prin declararea lor se specifică semnătura metodelor pe care ea le poate îngloba.
În exemplu, avem declarat un delegate cu numele Delegat care acceptă metode de tip retur int iar ca și parametru tot un tip de dată int.
Fiind tipuri de date referință delegările trebuie a fi instanțate cu ajutorul operatorului „new” cu care se declara un obiect și se alocă memorie pentru el. Delegările sunt similare pointerilor din limbajele de programare C și C++.
Apelarea unui delegat se realizează similar ca la un apel normal de funcție, numai ca apelarea unui delegat presupune apelarea simultană a metodelor aflate pe lista de invocare. De reținut este că apelarea unui delegat care conține alte metode (alt tip decât void), în lista de invocare, dă ca rezultat, rezultatul ultimei metode apelate.
Delegările sunt importante în limbajul de programare C# din doua motive:
Permit implementarea evenimentelor
Amână determinarea metodei invocate până la momentul execuției. Această capacitate se dovedește utilă atunci când se creează o arhitectură care permite adăugarea elementelor pe parcurs.
O facilitate destul de importantă pe care delegați o oferă, este capacitatea de multicasting. Multicastingul reprezintă capacitatea de a crea o listă de metode care vor fi apelate automat la invocarea unei delegări.
Pentru a crea o astfel de listă, se instanțiază mai întâi o delegare iar apoi utilizând operatorul „+=” se adaugă metode în lista sau utilizând operatorul „-=” se elimină metode din listă. O restricție importantă, delegările multicast trebuie să întoarcă un rezultat de tip void.
1.4.4 Evenimentele
Pe același fundament ca și delegările, Microsoft cu ajutorul limbajului C# au construit o alta facilitate importantă pentru mediu de programare, evenimentele.
Un eveniment reprezintă notificarea automată a unei clase că s- produs o acțiune în aplicație. Pe baza acestei rutine se poate răspunde cu o rutină pentru tratarea evenimentului. Cele mai multe evenimente sunt acțiuni alte utilizatorului (eveniment de click, eveniment de schimbarea unei liste, eveniment de introducerea unei text etc.).
In cadrul platformei .NET Framework dezvoltată de Microsoft, obiectele cunoscute ca și event senders declanșează evenimente atunci când se produc acțiuni. De aceste evenimente se ocupa event receivers prin rularea unei metode denumite event handler. Trebuie creat un delegat care se va comporta ca un pointer către event handler deoarece event sender-ul nu cunoaște ce metodă se va ocupa de eveniment.
Evenimentele sunt membri ai unei clase și se declară utilizând cuvântul cheie „event”. Declararea unui eveniment se face conform următorului exemplu:
Public event delegare_eveniment nume_eveniment
Delegare_eveniment reprezintă numele delegări iar nume_eveniment reprezintă numele evenimentului instanțat.
Pentru crearea unui eveniment sunt necesare următoarele etape:
Declararea unui delegat
Crearea unei clase pentru a transmite argumentele rutei de tratare a evenimentului
Declararea evenimentului propriu-zis
Crearea rutinei de tratare a evenimentului
Lansarea evenimentului
Deoarece evenimentele au delegați multicast tipul returnat va fi void dar evenimentele pot accepta și parametri. Cu ajutorul delegaților multicast, evenimentele permit mai multor obiecte să poată răspundă la înștiințarea apariției unui eveniment.
În platforma .NET aproape toate evenimentele sunt implementate folosind delegați multicast care au doi parametri, unul de tip object care reprezintă obiectul care a provocat evenimentul iar celălalt de tip EventArgs care conține datele cat pot fi utilizate în tratarea evenimentului.
Se pot construii evenimente în interiorul claselor iar suportul pentru delegări și evenimente permit gestionarea aplicațiilor complexe mult mai ușor.
În cadrul unui proiect Windows phone, spațiul de nume Windows.UI.Xaml.Controls pune la dispoziție un număr mare de evenimente standard. Acestea sunt asociate unor controale(Button, TextBlock, Radio button etc.). În mediu de dezvoltare Visual Studio evenimentele sunt regăsite în meniul Properties secțiunea Events al unui control anume. În figura 2.3 este reprezentată lista de evenimente al unui controler numit button.
Figura 2.3 Listă evenimente
1.4.5 Programarea asincronă
Odată cu platforma .Net Framework 4.5 și C# 5.0, Microsoft a introdus în limbajul c# suport pentru programarea asincronă prin cuvintele cheie „await” și „async”. Aceastăa programare asincronă presupune că, codul asincron pornește o operație care se desfășoară pe o perioadă de timp mai îndelungată și returnează imediat controlul firului de execuție fără a bloca cursul evenimentelor aflate în rulare, așteptând rezultatul operației.
Când operația sa terminat, suntem notificații de acest lucru prin diverse mecanisme cum ar fi, un delegat, o expresie lambda sau un eveniment.
În platforma .NET Framework 4.5 au fost introduse o serie de metode asincrone dar au rămas de asemenea și echivalentele lor sincrone. Când au lansat conceptul de programare asincronă, cei de la Microsoft au recomandat folosirea programării asincrone pe cât posibil. Aplicațiile Windows Phone, prin natura lor este terminată neașteptat daca aceasta apelează o metodă sincronă a cărei timp de execuție este foarte lung. Utilizarea perechii async/await a fost gândită în așa fel încât să arate foarte asemănător cu echivalentul său sincron.
Prin convenție o metodă asincronă va conține cuvântul cheie „async”. Cel mai important lucru de înțeles la programarea asincronă este succesiunea de la metodă la metodă. Următoarea figură 2.4 explică procesul de programare asincronă.
Figura 2.4 Proces programare asincronă sursă(https://msdn.microsoft.com/en-us/library/hh191443.aspx)
Următori pași corespund cu pași din diagramă:
Un eveniment apelează și așteaptă (await) metoda asincronă AccessTheWebAsync().
Metoda AccessTheWebAsync() creează o instanță HTTpClient și apelează metoda asincronă GetStringAsync() pentru a descărca conținutul unui site ca și un string.
Ceva sa întâmplat in metoda GetStringAsync() care a suspendat procesul. Pentru a evita blocarea de resurse GetStringAsync() predă controlul apelantului ei AccessTheWebAsync().
Metoda GetStringAsync() returnează un Task<TResult> unde TResult este un string iar metoda AccessTheWebAsync() asignează taskul variabilei getStringTask. Acest task reprezintă procesul ne întrerupt al apelului până la metoda GetStringAsync(), iar până când se termină procesul acesta trebuie să producă un string valid.
Deoarece variabila getStringTask nu a fost așteptată încă, metoda AccessTheWebAsync() poate lucra cu alte procese care nu depind de rezultatul final a metodei GetStringAsync(). Aceste procese sunt reprezentate prin apelul metodei sincrone DoIndependentWork().
Metoda sincronă DoIndependentWork() este o metodă care funcționează și returnează apelantului.
Metoda AccessTheWebAsync() a rămas fără procese care le poate realiza fără rezultatul final al variabilei getStringTask . Acum metoda dorește a calcula și a returna lungimea stringului descărcat , dar nu poate calcula până nu deține stringul.
Pentru aceasta metoda AccessTheWebAsync() folosește un operator await pentru a-și suspenda progresul și pentru a preda controlul metodei care a apelat AccessTheWebAsync().
Metoda GetStringAsync() a terminat și produce un string rezultat. Stringul rezultat nu este returnat apelantului metodei GetStringAsync(). În schimb stringul rezultat este stocat în variabila getStringTask care reprezintă finalul metodei. Operatorul await preia rezultatul din variabila getStringTask apoi trimite rezultatul stringului urlContents.
Când metoda AccessTheWebAsync() deține stringul rezultat poate calcula lungimea stringului. Treaba metodei sa terminat iar evenimentul apelant își poate continua procesul.
O metodă asincronă poate returna doar trei tipuri de date, void, Task și Task<T>, unde T poate fi orice fel de tip de dată. Nu sunt permise alte tipuri de date deoarece metodele asincrone nu blochează și au un asociat de notificare la terminarea execuției metodelor care cunoaște cele trei tipuri de date ca și rezultat. Dacă avem nevoie de un tip returnat int atunci tipul de retur al metodei asincrone va fi Task<int>.
Tehnologia XAML
XAML sau Extensible Application Markup Language este un limbaj declarativ. Acest limbaj este folosit în Windows Presentation Foundation(WPF), Silverlight, Windows Store apps și Windows Phone.
Acest limbaj poate inițializa obiecte și seta proprietăți, se pot creea interfețe vizuale(UI) în zona de declarare și se pot utiliza obiectele declarate pentru a răspunde la evenimente sau alte manipulări.
Limbajul suportă schimbarea de unelte(Visual Studio și Blend pentru Visual Studio) pentru diferite procese în timpul dezvoltări fără a pierde din informații.
Importanța limbajul XAML în arhitectura Windows Phone și în procesul de dezvoltare
XAML este limbajul primar în Windows Phone pentru declararea de interfețe grafice și a elementelor vizuale în interfață. În mod normal o pagină XAML este reprezentată sub numele de „page”, ca prima pagină la crearea unui proiect în Windows Phone. Se pot adăuga la aceea pagină alte pagini XAML.
XAML este formatul folosit pentru declararea stilurilor și template-urilor aplicate în partea logica a controalelor și a interfeței grafice din Windows Phone. Se pot folosii și templateuri predefinite. XAML este formatul cel mai comun folosit pentru diesign-ul folosit în aplicațiile Windows Phone și pentru a face schimb de diesign între cele 2 unelte Visual Studio și Blend pentru Visual Studio.
În Windows Phone, limbajul XAML definește apariția vizuală în interfața grafică și se poate asocia cod în spate pentru a defini partea logică a elementelor din interfața grafică din XAML. Diesiegnul vizual se poate ajusta fără a face modificări a codului din partea logică. Cu ajutorul acestui limbaj se simplifică fluxul de lucru între dezvoltarea parții logice și dezvoltarea diesignului. Datorită suportului extins a limbajului XAML ,se pot crea prototipuri rapide în primele etape ale dezvoltări.
1.5.2 Spațiile de nume XAML
Spațiile de nume din XAML sunt spații de nume conceptuale care deservesc scopului acestui limbaj. În Windows Phone XAML este folosit pentru a declara obiecte, proprietăți ale acelor obiecte și relație obiect-proprietate exprimată într-o ierarhie. Obiectele declarate sunt susținute de librării de tipuri. Aceste librării pot fi:
Librăriile de bază Windows Phone care sunt valabile în orice moment al rulări
Librări distribuite care fac parte din Windows Phone SDK(Software Develoment Kit)
Librăriile proprii create de programator în propriul proiect Windows Phone
Alte librării definite într-un proiect separat și referite în proiectul curent Windows Phone
Declararea spațiilor de nume XAML folosesc stilul XML (xmlns) și se asociază informații specifice spațiilor de nume XAML. Identificatorul spațiilor de nume XAML poate fi un URL, un token string în forma unui CLR, spațiu de nume și o informație de asamblare (assembly).
Un fișier XAML aproape tot timpul declară un spațiu de nume de bază (default) în elementul său de bază. Acest spațiu de nume de bază definește ce element poate fi declarat fără alte prefixe.
În Windows Phone spațiul de nume de bază în XAML include aproape toate tipurile din Windows Phone în librăria de bază System.Windows.dll.
Un fișier XAML aproape tot timpul are exact un element ca și bază care declară un obiect care va fi baza conceptuală a unei structuri de programare cum ar fi o pagină.
1.5.3 Sintaxa XAML
În termeni de sintaxă in limbajul XAML există trei opțiuni pentru a declara obiecte:
Direct, folosind sintaxa obiectului:
<Button> </Button>
Indirect, folosind atributele sintaxei:
<Button Name=”nume”> </Button>
Folosind o extensie markup
Extensiile Markup sunt conceptele ale limbajului XAML și sunt folosite în implementarea XAML a lui Windows Phone. În sintaxa XAML acoladele ({}) indica o extensie a limbajului. Această utilizare, spune procesului XAML să ignore atributele generale ale acelei proprietăți. Ele sunt definite în spațiul de nume de bază în Windows Phone XAML.
Windows Phone suportă următoarele extensii markup:
Binding: suportă bindiguri de date care ascunde o valoare la o proprietate pană când este interpretată sub un context de dată
StaticResource: suportă referințe la valori care sunt definite în ResourceDictionary.
TemplateBinding: suportă controlul template-urilor în XAML care pot interacționa cu proprietățile obiectului template.
RelativeSource: pornesc o formă particulară de template binding.
De asemenea Windows Phone suportă o extensie markup de bază care este definită în spațiul de nume XAML, x:NULL.
XAML este un limbaj declarative pentru obiecte și proprietăți dar include și sintaxa pentru a atașa evenimente obiectelor. Sintaxa acestui limbaj pentru evenimente poate fi extinsă de o tehnologie specifică cum ar fi Windows Phone care integrează evenimente declarate XAML în modelul de programare. Programatorul trebuie să specifice numele evenimentului ca un nume atribut al obiectului unde evenimentul este tratat. Pentru valoarea atribut, programatorul trebuie să specifice numele evenimentului care va fi tratat în cod. Procesorul XAML folosește acest nume pentru a crea un delegate reprezentativ în arborele încărcat al obiectului care adaugă handlerul specificat într-o listă de handler interni.
Majoritatea aplicațiilor Windows Phone sunt generate de codul din spate. În cadrul unui proiect XAML, codul din spate este scris ca un fișier cu extensia .xaml și limbajul CLR ca Visual Basic sau C# este folosit pentru a scrie codul din spatele fișierului.
În forma de bază normalizarea spațiilor apar când procesorul XAML procesează orice text interior găsit între elementele al unui fișier XAML.
Exemple de normalizare:
Toate spațiile caractere sunt convertite în spații
Toate spațiile consecutive sunt șterse și înlocuite de un singur spațiu
Un spațiu după un tag-ul de pornire este șters
Un spațiu înainte de tag-ul de închidere este șters
Spațiul de nume Windows.Devices.Geolocation
Acest spațiu de nume (namespace) oferă API (Application Programming Interface) pentru a detecta poziția curentă geografică sau pentru a urmări în mod continu locația dispozitivului. Informațiile estimative cu privire la locații pot veni din diferite surse de semnal cum ar fi: semnal WI-FI, turnuri de rețea, senzorul GPS integrat în telefon și din IP-ul dispozitivului. Cu ajutorul acestui spațiu de nume putem primi cea mai apropiată dată de localizare din toate sursele disponibile.
Acuratețea informațiilor pot diferii în funcție de sursă. Latitudinea și longitudinea primite cu ajutorul spațiului de nume pot varia în funcție de următoarele intervale:
GPS, în aproximativ zece metri
WI-FI, între treizeci și cinci sute de metri
Turnuri de rețea, între trei sute și trei mii de metri
Adresa IP, între o mie și cinci mii de metri
În plus față de latitudine și longitudine, spațiul de nume ne mai poate oferi informații în legătură cu direcția, viteza și altitudinea.
Spațiul de nume conține clase, enumerări, interfețe și structuri.
Cu ajutorul claselor de mai în jos dezvoltatori pot construi aplicații care detectează poziția geografică a dispozitivului. De exemplu o aplicație poate să afișeze pe o hartă locația curentă a dispozitivului, tăgui o poză, trimite un mesaj cu coordonatele geografice sau a notifica utilizatorul de punctele de interes în jurul locației sale.
Clasa Geolocator
Această clasă face parte din spațiul de nume Windows.Devices.Geolocation și ajută dezvoltatorul pentru a obține locația curentă a utilizatorului. Geolocator se ocupă cu toate interacțiunile cu rețeaua celulară sau GPS și returnează un obiect Geoposition. În principiu ne putem gândi la Geolocator ca o unealtă de cerere pentru locație. Cu ajutorul acestei clase putem să specificăm cât de precisă să fie informația referitoare la locația noastră curentă pana la un metru și cât de rapid sa primim aceste informații.
Clasa Geolocator conține doua evenimente, PositionChanged care se invocă când locația este actualizată și StatusChanged care se invocă când obiectul Geolocator are abilitatea de a actualiza schimbări de locație.
Metodele clasei Geolocator sunt următoarele:
GetGeopositionAsync(), pornește un proces asincron pentru a obține locația curentă a dispozitivului într-un timp determinat sau nedeterminat.
GetGeopositionHistoryAsync(), pornește un proces asincron pentru a obține istoricul locaților a dispozitivului într-un timp determinat sau nedeterminat.
RequestAccessAsync(), pornește un proces de cerere de a permite aplicației de a accesa locația.
Proprietățile Clasei Geolocator sunt următoarele:
DesiredAccuracy, setează sau afișează nivelul de precizie la care se dorește a obține locația dispozitivului.
DesiredAccuracyInMeters, setează sau afișează nivelul de precizie în metri la care se dorește a obține locația dispozitivului.
LocationStatus, indică abilitatea a lui Geolocator pentru a obține actualizări de locație.
MovementThreshold, setează sau afișează distanța mișcări în metri relativi ale coordonatelor de la ultima poziție data de evenimentul PositionChanged. Clasa Geolocator are nevoie ca această proprietate să fie setată înainte pentru a putea invoca evenimentul de PositionChanged.
ReportInterval, setează sau afișează timpul minim în milisecunde între actualizările de poziție. Clasa Geolocator are nevoie ca această proprietate să fie setată înainte pentru a putea invoca evenimentul de PositionChanged.
Clasa Geoposition
Această clasă face parte din spațiul de nume Windows.Devices.Geolocation și are ca și scop primirea de la clasa Geolocator o poziție geografică. Geoposition returnează cu ajutorul proprietăților sale coordonatele poziției primite sau chiar și adresa de la poziția geografică primită de la Geolocator.
Proprietățile Clasei Geoposition sunt următoarele:
CivicAdress, cu ajutorul acestei proprietăți putem obține informați asociate poziției geografice primite de la clasa Geolocator. Aceste informați pot consta în: numele țări, orașului, statului, codului poștal și ora la care a fost obținuta poziția geografică.
Coordinate, cu ajutorul acestei proprietăți putem obține informați asociate poziției geografice primite de la clasa Geolocator. Aceste informați pot consta în: acuratețea locației în metri, altitudinea, longitudinea, latitudinea, sursa de la care sa obținut locația și ora la care a fost obținută poziția geografică.
Spatiile de nume Windows.Services.Maps si Windows.UI.Xaml.Controls.Maps.MapRoutesView
Cu ajutorul acestor spații de nume putem obține rute cu ajutorul coordonatele primite de la clasa Geoposition și putem desena traseul rutei pe o hartă.
Clasa MapLocationFinder
Această clasă aparține spațiului de nume Windows.Services.Maps și cu ajutorul acestei clase obținem rute de la un punct A pana la un punct B convertind coordonatele geografice în adrese.
Metodele clasei sunt:
FindLocationsAtAsync(), cu ajutorul acestei metode primim o listă de locați aflate în aproprierea punctului geografic dat.
FindLocationsAsync(), cu ajutorul acestei metode primim o listă de un număr stabilit înainte de locați aflate în aproprierea textului dat pe baza unei coordonate denumită sugestie.
Clasa MapRouteView
Cu ajutorul acestei clase se afișează o ruta primită de la metoda GetWalkingRoutesAsync a clasei MapRouteFinder, pe o hartă.
Proprietățile clasei sunt:
RouteColor, setează culoarea rutei adăugate.
OutlineColor, setează marginea rutei într-o anumită culoare.
Route, setează ruta pe care va urma să o afișeze.
SQLite
SQLite este un DLL(Dynamic Link Library) care implementează un motor de baze de date SQL necesitând zero configurare având posibilitatea de a fi introdus in diverse sisteme. Tot odată este un sistem de gestiune a bazelor de date.
Una dintre caracteristicile lui SQLite este că baza de date este stocată integral pe hard disk într-un singur fișier astfel putem avea controlul mai mare asupra bazei de date. Diferențele dintre SQLite și alte motoare de bază de date sunt: nu necesită configurare, ușor de administrat, simplu de folosit și simplu întreținut.
Acest DLL nu folosește nici-un server spre deosebire de alte motoare de bază de date. Ne folosind server, o aplicație numai trebuie să trimită comenzi printr-un server cu baza de date și să aștepte rezultatul. Folosind SQLite numai există intermediari comunicarea se face în mod direct. Această caracteristică vine cu avantaje și dezavantaje:
Avantaje:
Numai trebuie instalat nici-un server
Zero configurare
Numai este necesar suportul administrativ pentru setarea bazei de date
Orice aplicație Windows Phone poate folosi SQLite
Dezavantaje:
Mai puțină protecție împotriva bug-urilor
Precizie mai mică în controlul bazei de date
SQLite este bază de date fără server care permite mai multor aplicații să acceseze aceeași bază de date în același timp.
Întreg DLL este compact, având o dimensiune maxima de cinci sute kb majoritatea altor motoare de baze de date sunt mai mare, dimensiunile fiind peste doi mb. Memoria utilizată din punct de vedere al stocări este foarte mica. De exemplu, dacă stochezi într-o coloana VARCHAR(10) un singur caracter, acel caracter va ocupa din memorie un singur octet. În cazul altor motoare de baze de date SQL, dacă declari o coloană VARCHAR(10) atunci motorul de bază de date va aloca zece octeți în memorie chiar dacă aceea coloană nu este plină sau goală.
În Windows Phone utilizând SQLite, pentru a reprezenta un tabel trebuie construit o clasă iar fiecare atribut al clasei devine un atribut al tabelei din baza de date.
Alocarea de tipuri de date în SQLite este una diferită față de celălalte deoarece permite să se stocheze orice valoare pe orice coloană necontând tipul declarat al acelei coloane. Singura excepție o face coloana INTEGER PRIMARY KEY. În schimb alte motoare de bază de date permit stocarea în coloane doar a datelor de același tip cu coloana.
Capitolul 2. Prezentare aplicației
2.1. Prezentarea funcționalității
Scopul aplicației este de a ajuta utilizatorul în monitorizarea traseului parcurs de acesta și de ai oferi anumite informații relevante utilizatorului pe o anumită distantă. Calculul caloric diferă în funcție de datele utilizatorului cum ar fi, kilogramele și modul ales de acesta, mers sau alergare. Din punct de vedere al funcționalități aplicația este structurată în doua pagini.
În prima pagină utilizatorul este rugat în a introduce informați cu privire la numărul de kilograme și înălțimea sa iar apoi, în a selecta un mod ,mers sau alergare. Aplicația va ține cont de datele utilizatorului în efectuarea calculelor și afișarea lor.
Figura 2.1 Prima pagină a aplicației.
După cum se vede in Figura 2.1 la deschiderea aplicației utilizatorul este întâmpinat de un mesaj de salut apoi este rugat în ași introduce numărul de kilograme, înălțimea și în a-și alege o opțiune ,apoi utilizatorul putând apăsa butonul „OK” pentru validare.
Apăsând butonul „OK” utilizatorul este trimis în pagina doi a aplicației unde se vor afișa toate datele necesare obținute în urma parcursului din toată activitatea utilizatorului în acea zi. Dacă utilizatorul apasă butonul de validare „OK” și nu a introdus numărul de kilograme sau înălțimea sau nu a ales nici-o opțiune, atunci aplicația va trimite un mesaj după cum urmează:
În cazul în care utilizatorul nu a scris numărul de kilograme se poate vedea mesajul transmis de aplicație in Figura 2.2.
Figura 2.2 Nu sa scris numărul de kilograme
În cazul în care utilizatorul nu a selectat nici-o opțiune se poate vedea mesajul trimis de aplicație în figura 2.3.
Figura 2.3 Nu sa selectat nici-o opțiune.
În cazul în care utilizatorul nu a introdus înălțimea sa, se poate vedea mesajul trimis de aplicație în Figura 2.4
Figura 2.4 Nu sa introdus înălțimea
În cazul în care utilizatorul nu a selectat nici-o opțiune și nu a introdus numărul de kilograme și înălțimea se poate vedea mesajul trimis de aplicație în Figura 2.5
Figura 2.5 Nu sa selectat o opțiune și nu sa introdus numărul de kilograme și înălțimea.
Dacă utilizatorul nu primește nici-un mesaj la apăsarea butonului „OK” atunci datele introduse de utilizator au fost verificate și validate ca fiind în regulă, apoi el va fi trimis pe pagina a doua a aplicației.
A doua pagină a aplicație constă într-o afișare de tip pivot. Acest pivot este împărțit în trei părți.
Prima parte a pivotului din a doua pagină este numită „Acasă” și ea este reprezentată în figura 2.5
Figura 2.5 Acasă a doua pagină
La primul contact cu partea Acasă utilizatorul va vedea un buton de start și unul de stop. Pe lângă aceste butoane există și un mesaj în care i se explică utilizatorului, ca pentru a începe monitorizarea activității trebuie să apese butonul „Start”.
A doua parte a pivotului din a doua pagină este numită „Locația Mea” și este reprezentată în figura 2.6.
Figura 2.6 Locația Mea a doua pagină
Această parte este formată dintr-un search bar ( bară de căutare), o descriere a scopului barei și o hartă care are rolul de a afișa locația utilizatorului,
La deschiderea aplicației utilizatorul va avea de așteptat până când aplicația îi va detecta locația și o va afișa. Odată detectată locația utilizatorul va putea să-și vadă locația pe hartă sub forma unui punct verde cum este reprezentat în figura 2.7.
Figura 2.7 Locația cu punct
Având locația reprezentată pe hartă acum, utilizatorul poate să folosească bara de cautare. Bara de căutare este ușor de utilizat și intuitiv. Tot ce va trebui utilizatorul să facă este de a scrie numele complet sau o parte din nume a străzi la care dorește să ajungă și va primi automat sugesti cum este reprezentat în figura 2.8. Până când aplicația nu va detecta poziția utilizatorului, acesta nu va putea căuta o stradă cu ajutorul barei de căutare.
Figura 2.8 Căutare stradă.
Având lista de sugestii, utilizatorul va trebui să aleagă o stradă iar daca strada dorită nu se regăsește în lista de sugestii, atunci utilizatorul va trebui sa continue să scrie numele străzi dorite până când strada dorită se va afla în lista de sugestii.
Odată selectată strada dorită, pe hartă se va afișa ruta din punctul de unde se află utilizatorul până la strada dorită.
In figura 2.9 este reprezentat traseul de la Bulevardul General Vasile Milea din Sibiu unde se și află punctul verde până la Strada Rahovei din Sibiu.
Figura 2.9 Traseu Milea – Rahovei
Acum utilizatorul tot ce va avea de făcut este de-a urma traseul până la strada dorită, punctul verde cu locația lui curentă se va actualiza odata la zece metri parcurși dacă butonul „Start” este apăsat și bineânțeles utilizatorul va începe să se miște .
A treia parte a pivotului din a doua pagină este numită „Istoric” și este reprezentată în figura 2.10.
Figura 2.10 Istoric pagina doi
Partea de istoric a pagini doi se încarcă la pornirea aplicației. Dacă utilizatorul este la prima utilizare a aplicației atunci partea „Istoric” va fi goală la încărcare, dacă nu atunci ea va arăta ca în figura 2.10.
În această parte utilizatorul are opțiunea de a șterge întregul istoric apăsând butonul „Șterge istoric” sau poate să șteargă doar anumite părți din istoric apăsând butonul „X” de la fiecare afișare din istoric.
Revenind la prima parte a pivotului acasă, utilizatorul are opțiunea de a apăsa butonul „Start”. Apăsând butonul „Start” , aspectul primei părți se va schimba și vor apărea o listă de informați referitoare la traseul ce va fi parcurs de utilizator. Distanța parcursă în kilometri, viteza cu care se deplasează redată în kilometri pe oră (km/h) , caloriile consumate pe durata activități, timpul dedicat perioadei de activități, altitudinea la care se află utilizatorul, viteza maximă care a atins-o utilizatorul redată în kilometri pe ora (km/h) și numărul de pași făcuți. Aspectul pagini după apăsarea butonului „Start” este reprezentată în figura 2.11.
Figura 2.11 Aspect după apăsarea butonului „Start”
În timpul deplasări, utilizatorul poate să-și urmărească poziția actuală pe harta aflată în partea a doua a pivotului. Pe durata deplasări poziția utilizatorului din interiorul hărți se modifică odată la zece metri, la fel se modifică și informațiile din prima parte a pivotului.
La sfârșitul activității, utilizatorul va avea opțiunea de a apăsa butonul „Stop”, apăsând acest buton toate informațiile din prima parte a pivotului „Acasă” se vor transfera în partea a treia a pivotului „Istoric” și astfel el va putea să vadă informațiile parcursului său.
Aplicația trimite și un mesaj în a îndemna utilizatorul să consulte partea de „Istoric” a aplicației. Acest lucru se poate vedea în Figura 2.12.
Figura 2.12 Stop activității
2.2. Prezentarea structurii tehnice
Din punct de vedere tehnic aplicația este scrisă cu ajutorul limbajelor C# și limbajul declarativ XAML. Cu ajutorul limbajului C# sau efectuat toate operațiile logice ale aplicației. Interfața grafică este construită cu ajutorul limbajului declarativ XAML, și pe baza acestuia aplicația este formată din doua pagini. Prima pagină are rolul de a primi datele necesare funcționări de la utilizator iar a doua pagină prezintă informațiile rezultate din urma datelor colectate de la utilizator în urma activităților sale.
Prima pagină a aplicației are un fundal albastru și conține mai multe controale declarate cu ajutorul XAML.
Atunci când utilizatorul va dorii să introducă numărul de kilograme și înălțimea sa, acesta va trebui sa atingă cu degetul controalele de tip XAML denumite „TextBox”. Când le va atinge, va apărea o tastatură de tip numerică, acesta fiind “ forțat ” să introducă date doar numerice. În Figura 2.13 este reprezentat acest lucru.
Figura 2.13 Tastatura.
Utilizatorul nu va putea să introducă un număr de kilograme sau înălțimea sa în centimetri cu un număr format din mai mult de trei cifre. Acesta neputând să introducă nici valori de zero în ambele cazuri. Dacă au fost introduse valorii de 0 în cazul kilogramelor și a înălțimi, aplicația va trimite un mesaj în care anunță utilizatorul că nu se poate acest lucru.
În figura 2.14 este reprezentat acest mesaj.
Figura 2.14. Mesaj de zero valori
Aplicația are nevoie de numărul de kilograme și de un mod ales de utilizator pentru a putea calcula și afișa caloriile pierdute de utilizator în urma activităților sale.
Înălțimea utilizatorul este necesară aplicației pentru a stabili lungimea pasului făcut de utilizator, iar mai apoi cu ajutorul lungimi pasului aplicația poate calcula și afișa numărul de pași efectuați de acesta. Formula lungimi pasului este următoarea: înălțimea utilizatorului * 0.414.
La apăsarea butonul „Ok” de către utilizator aplicația va salva datele utilizatorului pentru a le transmite paginii doi a aplicației.
Atunci când utilizatorul ajunge în pagina a doua a aplicației, datele introduse de acesta în prima pagină sunt transferate pagini doi. Acest transfer se poate vedea în următoarea porțiune de cod.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
KgRadio h = e.Parameter as KgRadio;
kg = h.kilograme;
optiune = h.radioButon;
marimePas = h.lungimepas;
}
În această porțiune de cod sunt transferate datele introduse de utilizator din prima pagină în cea de-a doua. Funcția OnNavigatedTo aparține pagini doi a aplicației și parametru din interiorul funcției NavigationEventArgs e sunt datele din prima pagină a aplicației. Datele primite de la pagina unu sunt transmise în pagina doi cu ajutorul clasei KgRadio iar apoi pe rând informațile din această clasă sunt transferate variabilelor din interiorul pagini doi.
Locația utilizatorului este obținută cu ajutorul metodei GetGeopositionAsync() care aparține clasei Geolocator. Porțiune de cod în care este obținută locația este redată mai în jos.
pozitie = await locatie.GetGeopositionAsync(TimeSpan.FromMinutes(2), TimeSpan.FromSeconds(30));
Obiectul pozitie aparține clasei GeoPosition și în obiectul acesta se salvează locația utilizatorului iar cu ajutorul obiectului locatie care aparține clasei Geolocator obținem locația utilizatorului.
Parametri din antetul funcției GetGeopositionAsync(), au rolul de a spune obiectului pozitie cât timp sa stocheze locația primită și în cât timp obiectul pozitie să primească locația. Primul parametru indică faptul că obiectul poziție va păstra locația utilizatorului maxim doua minute, iar cel de-al doilea „obligă” obiectul locatie în a opțiune poziția utilizatorului în maxim treizeci de secunde.
Având locația utilizatorului, aplicația acum va putea redea pe hartă poziția acestuia. Acest lucru este obținut cu următoarea secvență de cod.
MapControl.SetLocation(ellipse, pozitie.Coordinate.Point);
await mymap.TrySetViewAsync(pozitie.Coordinate.Point, 15);
mymap.Children.Add(ellipse);
Cu ajutorul clasei MapControl din cadrul spațiului de nume Windows.UI.Xaml.Controls.Maps se accesează metoda SetLocation() cu ajutorul a doi parametri. Primul parametru ellipse este o elipsă, mai excat punctul verde de pe hartă iar al doilea parametru sunt punctele geografice ale utilizatorului obținute cu ajutorul clasei Geolocator. Metoda SetLocation(), adaugă elipsa la coordonatele primite de la obiectul pozitie.
Următoarea linie de cod are rolul de a aduce harta în punctele primite de la obiectul pozitie iar apoi în ultima linie de cod se adaugă elipsa pe hartă și astfel utilizatorul își va putea vedea locația sa cu ajutorul unui punct verde pe o hartă.
Atunci când utilizatorul apasă „Start” se acționează evenimentul PositionChanged al obiectului locatie. Cu ajutorul acestui eveniment aplicația monitorizează în mod constant poziția utilizatorului. În următoarea secvență de cod este reprezentat cum se acționează evenimentul de PositionChanged.
locatie.MovementThreshold = 10;
locatie.PositionChanged += locatie_PositionChanged;
Înainte de a pornii evenimentul, trebuie setată proprietatea MovementThreshold. Setarea acestei proprietăți este necesar a fi făcută înaintea acționari evenimentului de Positionchanged. Scopul acestei proprietăți este de a seta din cât în câți metri să se apeleze evenimentul. Proprietatea este setată la zece metri iar astfel evenimentul se va apela odată la zece metri parcurși. Ultima linie de cod este pur și simplu acționarea evenimentului, iau apoi evenimentul se va acționa din zece în zece metri.
În interiorul acestui eveniment se produc toate calculele pentru informațiile pe care le va vizualiza utilizatorul.
Distanța pe care utilizatorul o parcurge este calculată cu ajutorul formulei matematice Haversine. Aceasta este o formulă importantă în navigație, deoarece cu ajutorul ei putem obține distanța cea mai scurtă intre doua puncte aflate pe suprafața unei sfere. Pentru a putea calcula distantă cea mai scurtă dintre două puncte avem nevoie de latitudinea și longitudinea punctelor respective. Formula lui Haversine cu ajutorul căreia sa calculat distanța parcursă de utilizator este reprezentată în figura 2.15.
Figura 2.15 Formula Haversine
Formula conține următoarele elemente:
haversin este funcția lui haversin fiind reprezentată în figura 2.16
Figura 2.16 Funcția haversin
d este distanța dintre doua puncte
r reprezintă radianța sferei( în cazul nostru radianța pământului care este aproximativ 6371 km)
Ø1, Ø2 semnifică latitudinea punctului unu și latitudinea punctului doi
ƛ1, ƛ2 semnifică longitudinea punctului unu și longitudinea punctului doi
Aflarea lui d din formula lui haversine se poate afla cu următoarea formulă reprezentată în figura 2.17.
Figura 2.17. Aflarea lui d varianta 1
Unde elementul h se poate afla utilizând funcția haversin(d/r) sau formula lui d poate fi redată mai explicit în figura 2.18.
Figura 2.18 Aflarea lui d varianta 2
Utilizând această formulă aplicația poate reda distanța parcursă de utilizator în kilometri. Acest calcul se face în următoarea linie de cod.
rezultatDistanta = calculate(pozitie.Coordinate.Point.Position.Latitude, pozitie.Coordinate.Point.Position.Longitude,
geoPosition.Coordinate.Point.Position.Latitude, geoPosition.Coordinate.Point.Position.Longitude);
În variabila „rezultatDistanta” se va stoca distanța parcursă de utilizator. Funcția calculate primește patru parametri, latitudinea și longitudinea punctului de unde a plecat utilizatorul și latitudinea și longitudinea punctului unde se află utilizatorul în acel timp. Această linie de cod se apelează odată la zece metri parcurși de utilizator iar la următoarea apelare poziția undea se află utilizatorul devine poziția de unde a plecat. Aplicația adună toate datele primite de la variabila „rezultatDistanta” și astfel se obține distanța parcursă de utilizator în kilometri.
Viteza cu care se deplasează utilizatorul este calculată după formula, distanța actuală parcursă de utilizator / timpul trecut de când a început deplasarea. Viteza se actualizează de cate ori se apelează evenimentul de PositionChanged.
Caloriile consumate de utilizator sunt calculate după următoarea formulă: modul ales de utilizator * distanța parcursă de utilizator * kilogramele utilizatorului. Alegerea modului contează foarte mult în a reda numărul aproximativ de calorii consumate de utilizator. Dacă utilizatorul selectează opțiunea „Mers” atunci în formula de calorii se va atribui valoarea de 0.5 în locul modului ales de utilizator iar daca alege opțiunea „Alergare”, în modul ales de utilizator se va înlocui cu valoarea de 0.9.
Timpul dedicat activități utilizatorului se calculează cu următoarea formulă: timpul de când a fost pornit sistemul în milisecunde – o variabilă start_time. Această variabila primește ca valoare la apăsarea butonului start, timpul de când a fost pornit sistemul în milisescunde. Timpul afișat utilizatorului se modifică la fiecare secundă trecută, astfel timpul de când a fost pornit sistemul crește iar variabila start_time rămâne neschimbată și astfel se obține timpul petrecut de utilizator în activitățile sale.
Altitudinea este obținută cu ajutorul clasei Geoposition. Clasa Geoposition conține coordonatele utilizatorului
2.3. Prezentarea structurii bazei de date
Capitolul 3. Dezvoltări ulterioare
3.1. Aplicație WEB cu Backup în Azure și OneDrive
Ca și dezvoltări ulterioare, mi-am propus să dezvolt o aplicație WEB cu ajutorul tehnologiei Silverlight care să comunice cu aplicația mobilă „Monitorizarea activităților fizice”. Având aplicația mobilă instalată pe telefon, utilizatorul dacă dorește poate instala și aplicația WEB pe computerul personal pentru o mai bună gestionare a informaților activităților sale.
În aplicația WEB, utilizatorul poate vedea un raport detaliat al informațiilor sale, pe zile, săptămâni și luni. Dacă activitatea utilizatorului este de lungă durată poate vedea raportul inclusiv pe ani. În acest raport activitățile sale sunt adăugate zilnic, și pot fi vizualizate în modul „toată ziua ” sau pe intervale de timp.
Raportul o să conțină informațiile din aplicație mobilă mult mai detaliate, o hartă cu traseul/trasele parcurse în aceea zi, cele mai vizitate locuri și o statistică a zilei comparată cu activitățile din trecut alte utilizatorului. Utilizatorul va avea opțiunea sa compare activitățile dintr-o perioadă cu o altă perioadă.
Informațiile referitoare la activitățile sale pot fi distribuite pe platformele de socializare Facebook, Twitter, Google+ etc. Prieteni de pe acele rețele de socializare, pot comenta, distribuii mai departe acele informații sau aprecia.
Utilizatorul își poate salva toate rapoartele sale cu ajutorul serviciilor de Cloud oferite de Microsoft, Microsoft Azure și OneDrive.
Microsoft Azure este un serviciu de backend oferit de Microsoft, care oferă soluții de stocare și/ sau procesare de date. Această platformă combină capabilitățile stocări și infrastructuri de serviciu cu serviciul de cloud.
OneDrive este un serviciu de stocare a fișierelor în cloud oferit de Microsoft, disponibil gratuit pentru toți deținători de un cont Microsoft. Acest serviciu oferă o soluție simpla de a stoca, sincroniza și partaja conținutul utilizatorilor.
Concluzii
Aplicațiile mobile au cunoscut o mare popularitate în ultima vreme și sunt într-o continuă extindere a popularității. În ziua de astăzi avem aplicații pentru aproape fiecare categorie: vreme, business, jocuri, video, fotografie, etc.
Scopul acestor aplicații este de a ușura viața utilizatorilor și de a le face viața mai bună informându-i de anumite informații relevante pentru ei.
Aplicația „Monitorizarea activităților fizice” face parte din categoria aplicaților de monitorizare a activităților fizice. Această aplicație prezintă numeroase avantaje pentru utilizator în detrimentul altor dispozitive.
Utilizatorul își poate folosi telefonul său personal, ne având nevoie de a cumpăra alte dispozitive, echipamente etc. Telefonul utilizatorului nici nu trebuie să fie performant, aplicația rulează pe cel mai slab telefon, din punct de vedere hardware. Singura necesitate a utilizatorului este de a deține un telefon cu sistemul de operare mobil dezvoltat de Microsoft Windows Phone.
Timpul de așteptare pentru a avea aplicația în telefon este foarte mic, instalarea se face foarte rapid și memoria ocupata este și ea foarte mică. Utilizatorul are nevoie de o conexiune la internet doar pentru ași instala aplicația în restul timpului ne-mai fiind nevoie.
Având telefonul la el, automat aplicația este și portabilă, o poți avea tot timpul la tine, fără nici-un efort suplimentar din partea utilizatorului. Având aplicația instalată în telefon utilizatorul poate să-și monitorizeze activitățile fizice de oriunde sar afla el.
Costurile utilizatorului având această aplicație sunt zero, utilizatorul ne-fiind obligat pentru a plăti la instalarea ei și nici nu există nici-un cost pentru administrarea ei.
Scopul acestei aplicați este de ai oferii utilizatorului informați cu privire la activitățile lui fizice în timpul unei activități fizice dedicate sau pur și simplu o plimbare în parc.
Bibliografie
Platforme Software Nokia pentru Internet Mobil, http://saim.pub.ro/PSNIM/Introducere_in_Windows_Phone_p1_v01.pdf, (data accesării: 01.06.2015).
Platforma Windows Phone 8, http://stst.elia.pub.ro/news/SO/Teme_SO_2013/433_ManolacheMi_HaiduMA_LupeBo_Platforma%20Windows%20Phone%208.pdf, (data accesării: 01.06.2015).
Bibliografie
Platforme Software Nokia pentru Internet Mobil, http://saim.pub.ro/PSNIM/Introducere_in_Windows_Phone_p1_v01.pdf, (data accesării: 01.06.2015).
Platforma Windows Phone 8, http://stst.elia.pub.ro/news/SO/Teme_SO_2013/433_ManolacheMi_HaiduMA_LupeBo_Platforma%20Windows%20Phone%208.pdf, (data accesării: 01.06.2015).
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Monitorizarea Activitatilor Fizice Printr O Aplicatie Windows Phone (ID: 150054)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
