Dezvoltarea de Aplicatii pe Platforma Android
LUCRARE DE DISERTAȚIE
Dezvoltarea de aplicatii pe platforma Android
CUPRINS
Introducere
Capitolul 1. Evoluția pieței de dezvoltare a aplicațiilor
Capitolul 2. Android vs. iOS
2.1. Interfața
2.2. Stabilitatea sistemelor de operare
2.3. Upgrade de software
2.4. Dispozitive
2.5. Caracteristici de apel, mesagerie și comandă vocală
2.6. Plăți electronice și securitate
2.7. Aplicații disponibile
2.8. Dezvoltarea de aplicații pe cele două platforme
2.8.1. Android SDK
2.8.2. iOS SDK
2.8.3. Avantaje iOS
2.8.4. Dezavantaje iOS
2.9. Diferențe funcționale majore
Capitolul 3. Sistemul de operare Android
3.1. Generalități
3.1.1. Cote de piață ale versiunilor
3.1.2. Avantaje
3.1.3. Dezavantaje
3.2. Procesele dezvoltării unei aplicații Android
3.3. Instrumentele folosite la crearea aplicației
3.3.1. Pachetul Android SDK pentru Android 4.0
3.3.2. Pluginul ADT pentru Eclipse
3.3.3. Google Maps API versiunea 3
Capitolul 4. Studiu de caz aplicație Salvamont
Concluzie
Bibliografie 77
Introducere
Google Android și Apple iOS sunt sistemele de operare cele mai des întâlnite în tehnologia de azi a telefoniei mobile, precum smartphone-urile ori tabletele.
Aceasta aplicație este realizată pentru România, iar cu ajutorul ei se pot afla cele mai importante avertizări montane, informații despre starea vremii la munte, trasee montane, contactele și locațiile cabanelor și starea pârtiilor. În plus, la apăsarea butonului SOS, se apelează direct serviciul 112, pentru a notifica în timp real dispeceratul Salvamont despre traseu și coordonate.
Prin intermediul acestei aplicații, iubitorii sporturilor de iarnă pot afla starea pârtiilor, evoluția stratului de zăpadă, precum și stadiul de funcționare al instalațiilor de tip teleschi/telescaun/telecabina. De asemenea, se pot afla direct pe telefonul mobil informații despre diferența de nivel, gradul de dificultate, lungimea pârtiilor și programul de funcționare.
Structura documentului cuprinde 4 capitole, separate la rândul lor pe subcapitole și paragrafe.
Capitolul 1 prezintă comparat sistemele de operare Android și iOS, din punct de vedere al interfatei, aplicațiilor, stabilității sistemului de operare, precum și a tuturor experiențelor de utilizare (apel, mesaj, comandă vocală, Maps, etc.).
Capitolul 2 conține o analiză a pieței de dezvoltare a aplicațiilor.
Capitolul 3 descrie sistemul de operare Android prin identificarea avantajelor și dezavantajelor acestuia, precum și prezentarea instrumentelor necesare la crearea aplicației: pachetul Android SDK pentru Android 4.0, pluginul ADT pentru Eclipse și integrarea Google Maps.
Capitolul 4 cuprinde studiul de caz al aplicației Salvamont, cu detalierea propriu-zisă a implementării acesteia.
Capitolul 1. Evoluția pieței de dezvoltare a aplicațiilor
Anul 2013 a reprezentat un punct de inflexiune în evoluția ecosistemelor de aplicații. Sistemele de operare Android și iOS au obținut o cotă de piață de 92% din toate livrările de terminale mobile în primul trimestru al anului 2013. Producătorii de telefoane mobile care au eșuat la tranziția de la sistemul lor de operare la un sistem adaptat mai multor dispozitive (ex. Nokia cu trecerea de la Symbian la Windows Phone), vor pierde în continuare la cota de piață și rulaj.
Procentul ridicat de 75% obținut de terminalele Android se datorează unei game largi de produse, de la cele mai ieftine până la cele mai costisitoare. iOS-ul se situează la mare distanță, obținând 18% cota de piață, cu 37,4 milioane de terminale vândute.
Figura 1: Cotele de piață în funcție de sistemul de operare
În prezent, dezvoltatorii de aplicații se orientează multi-platforma, însă nu toate aceste platforme au aceeași prioritate în dezvoltare. Aceasta prioritizare a platformelor diferă în funcție mai multe criterii, cum ar fi: profit, distribuire, costuri, viteza, ușurință în găsire său mediu de dezvoltare.
Platforma de bază este cea pe care se lansează prima oară aplicații sau apar caracteristici noi ale celor lansate deja și reprezintă platforma căreia i se face cel mai mult marketing. Aceasta prioritizare va fi orientată spre calitatea aplicațiilor, vânzări și rulaj. Astfel, modul în care dezvoltatorii prioritizeaza o platformă modifica impactul general al acesteia. Dacă majoritatea dezvoltatorilor clasifica o platformă ca o a doua opțiune, acest lucru se va reflecta în mod negativ asupra calității aplicațiilor și ulterior, asupra veniturilor de pe urmă acestora.
Conform unui sondaj realizat de cei de la Vision Mobile, 84% dintr-un eșantion de 5271 dezvoltatori aleg ca platforma principală Android, iOS sau HTML5. Android și iOS sunt principalele platforme dominante, cu 34,4% dintre procente, respectiv 32,7%, în timp ce HTML5 se afla la distanță, cu 17,3% dintre procente.
Figura 2: Preferințele dezvoltatorilor în materie de platforme de bază
Setarea priorităților în materie de platforma pe care să se dezvolte o aplicație diferă în funcție de nivelul de experiență al dezvoltatorilor. Dezvoltatorii care se afla la început de drum prefera Android-ul, cu un procent aproape dublu (40%) comparativ cu iOS-ul (22%). Acest lucru se datorează accesului mai dificil la platforma de dezvoltare iOS, precum și necesitatea deținerii unui echipament Mac și achitarea unei taxe de 99$. Dezvoltatorii mai experimentați au tendința de a adopta iOS că platformă de bază: 44% dintre aceștia cu 3-5 ani de experiență folosesc iOS că platforma principală versus 31% care folosesc Android.
Figura 3: Preferințele dezvoltatorilor în funcție de experiență
În cazul platformelor diferite de Android și iOS, acestea se axează pe o dezvoltare pe piețele unde iOS-ul nu este atât de puternic (ex. Africa), unde se observă că BlackBerry 10 deține 24%. Alegerea unei platforme pentru dezvoltarea unei aplicații este diferită în funcție de specificațiile piețelor regionale, care diferă în demografie și influențe.
În mod evident, Android și iOS, precum și HTML5 domina toate piețele regionale. În același timp, se poate observa o variație a procentelor de la o regiune la alta: iOS are 62% în America de Nord însă doar 48% în Asia și 33% în Africa. Platforma Android este bine reprezentată în toate regiunile, dominând cu peste 70% în majoritatea dintre acestea.
Optarea pentru o platformă sau alta este în strânsă legătură cu vânzările de terminale în aceste regiuni. Dezvoltatorii vor alege platformă care le oferă o poziție de forță în regiune. Deși dezvoltatorii nu sunt legați de o piață sau alta, ei putând să vândă aplicații la nivel global, majoritatea dintre aceștia se axează pe o piață anume.
Figura 4: Preferințele dezvoltatorilor în funcție de regiune
În general, trei criterii sunt dominante în alegerea platformei de dezvoltare a aplicației: potențialul de rulaj, accesarea publicului ținta și viteza și costurile de dezvoltare. Următorul grafic arata prioritizarea criteriilor în funcție de platforme: Android, iOS, HTML5, Windows și BlackBerry 10.
Criteriul dominant de selecție este viteza și costurile de dezvoltare ale aplicațiilor pentru majoritatea dezvoltatorilor, excepție făcând cei care dezvoltă pe platforma iOS, care au ca prima alegere potențialul de rulaj.
Figura 5: Ordinea criteriilor de selecție al platformei de dezvoltare
Figura 6: Prognoza de dezvoltare a sistemelor de operare
Livrări de terminale la nivel mondial în funcție de sistemul de operare (Milioane de unități)
Figura 7: Ordinea preconizată a criteriilor de selecție a platformei de dezvoltare
Capitolul 2. Android vs. iOS
Interfața
Atât iOS cât și Android folosesc o interfață cu touchscreen, care permite apăsarea, mutarea și mărirea elementelor de pe ecran, idee preluată de la desktop-ul unui PC, în timp ce la iOS ecranul principal conține doar iconițele aplicațiilor, Android permite utilizatorilor posibilitatea adăugării de widget-uri, care pot afișa informații precum meteo, e-mailuri, apeluri. Interfața iOS în schimb permite folosirea unui director unde utilizatorii pot adăuga cele mai des accesate aplicații.
Ambele sisteme de operare au însă în comun informații precum dată, WIFI, semnalul telefonului, indicator de baterie; în cazul Android mai apar informații precum e-mailuri recent primite, mesaje ori reminder-e.
Stabilitatea sistemelor de operare
Pentru a evalua stabilitatea sistemelor de operare pe platformele Android/iOS, vom analiza ultimele versiuni ale acestora: Android 4.4 și iOS 7.1, comparativ cu versiunile anterioare. Conform celor mai recente studii în domeniu, sistemul de operare Android KitKat 4.4 s-a dovedit mai stabil decât iOS 7. Astfel evoluția stabilității sistemelor este după cum urmează:
Android 2.3 Gingerbread are un crash rate de 1,7%, comparativ cu versiunile mai noi – Ice Creăm Sandwich, Jelly Bean și KitKat, care au un crash rate de 0,7%.
iOS 7.1 are un crash rate de 1,6%, mai mic decât versiuni anterioare, care aveau 2,1% la iOS 7, respectiv 2,5% la iOS 5.
De asemenea, versiunile pentru telefon s-au dovedit a fi mai stabile decât cele pentru tableta.
Rata de crash variază în funcție de categorie: jocurile au probabilitatea cea mai mare (4,4%), în schimb aplicațiile de e-comert au cea mai mică, de doar 0,4%.
Upgrade de software
Deși Google oferă update-uri relativ frecvent, unii utilizatori descoperă că nu pot primi update la telefonul lor sau că au cumpărat un telefon cu un sistem de operare deja depășit. Producătorii de telefoane sunt cei care decid dacă oferă upgrade-uri și când le oferă, existând posibilitatea să nu ofere un update la ultima versiune de Android pentru toate telefoanele și tabletele din oferta lor. De obicei, aceste update-uri apar după câteva luni de zile după apariția pe piață a unei noi versiuni de sistem de operare.
În această privință, utilizatorii de iOS sunt avantajați. Upgrade-urile pe această platformă sunt în general disponibile pentru toate dispozitivele iOS, excepție făcând dispozitivele mai vechi de 3 ani sau pentru anumite caracteristici cum ar fi Șiri, care nu este disponibilă decât de la versiunea de iPhone 4S în sus. În general, motivul pentru care upgrade-ul nu este posibil este limitarea hardware, terminalele mai vechi nesuportând toate îmbunătățirile.
Dispozitive
Dispozitivele Android sunt disponibile într-o gamă largă, la diferite prețuri, dimensiuni și caracteristici tehnice.
iOS-ul este însă prezent doar pe dispozitivele Apple: telefonul iPhone, tableta iPad și mp3 player-ul iPod Touch. Aceste dispozitive tind să aibă preț mai ridicat decât echivalentele lor pe platforma Android.
Caracteristici de apel, mesagerie și comandă vocală
Android-ul permite utilizatorului să trimită dintr-o selecție de mesaje predefinite ca răspuns la respingerea unui apel, pe când la iOS se poate face o setare că telefonul să trimită implicit un mesaj în caz de respingere a unui apel sau să apară un reminder pentru a suna înapoi.
Pentru mesagerie instant, Google oferă posibilitatea de a folosi Gtalk, pe când la iOS nu există o metodă nativă de a comunica cu utilizatori non-Apple. În acest caz, utilizatorii Apple pot comunica între ei folosind iMessage, iar înafara dispozitivelor cu iOS se pot folosi aplicații de tipul Skype sau Gtalk.
Și în cazul apelurilor video, iOS restricționează accesul doar pentru cei cu dispozitive Apple prin FaceTime, în timp ce pe platforma Android, se poate folosi Google Hangouts pentru apeluri video 3G sau Wi-Fi indiferent de natura dispozitivului.
În ceea ce privește comenzile vocale, iOS are un asistent virtual denumit Șiri, care înțelege și răspunde atât la comenzi scrise, cât și la cele vocale. Printre caracteristicile acestui asistent se pot enumera: capacitatea de a interpreta evoluții ale burselor, scoruri sportive, de a face rezervări la restaurante sau cinema, de a trimite e-mailuri, de a apela și a interfera cu sistemul audio și de navigație al mașinii. În cazul Android, și această platformă beneficiază de un asistent similar denumit Google Now, care are aceleași caracteristici ca și cele alenica între ei folosind iMessage, iar înafara dispozitivelor cu iOS se pot folosi aplicații de tipul Skype sau Gtalk.
Și în cazul apelurilor video, iOS restricționează accesul doar pentru cei cu dispozitive Apple prin FaceTime, în timp ce pe platforma Android, se poate folosi Google Hangouts pentru apeluri video 3G sau Wi-Fi indiferent de natura dispozitivului.
În ceea ce privește comenzile vocale, iOS are un asistent virtual denumit Șiri, care înțelege și răspunde atât la comenzi scrise, cât și la cele vocale. Printre caracteristicile acestui asistent se pot enumera: capacitatea de a interpreta evoluții ale burselor, scoruri sportive, de a face rezervări la restaurante sau cinema, de a trimite e-mailuri, de a apela și a interfera cu sistemul audio și de navigație al mașinii. În cazul Android, și această platformă beneficiază de un asistent similar denumit Google Now, care are aceleași caracteristici ca și cele ale Șiri, însă în plus are abilitatea de a urmări calendarul și a reaminti verbal ore. De asemenea, permite dictarea și căutarea verbală.
Plăți electronice și securitate
Android folosește Google Wallet, o aplicație care permite plăti electronice. Unele terminale sunt echipate cu un chip NFC (Near-Field Communication), pentru a efectua plăti wireless doar prin simplă atingere a telefonului de dispozitivul de la casa de marcat. Acest serviciu este integrat în Google Wallet, însă nu este disponibil pe toate terminalele sau la toți furnizorii de telefonie mobilă. iOS-ul nu are caracteristici pentru efectuarea de plăți mobile.
În ceea ce privește securitatea, aplicațiile Android sunt izolate de restul resurselor sistemului, excepție făcând cazul în care utilizatorul oferă manual anumite permisiuni unor aplicații. Această izolare face că sistemul de operare să fie mai puțin vulnerabil la erori, dar care la dezvoltarea de aplicații poate duce la cererea de permisiuni inutile. Cel mai răspândit malware pe Android reprezintă trimiterea de mesaje text la numere cu costuri ridicate, fără știrea utilizatorului și trimiterea de date personale la terțe persoane. Fiind sistemul de operare cel mai popular, Android-ul este și cel mai expus la atacuri.
Cei care crează malware sunt mai puțin orientați spre iOS, datorită revizuirii detaliate efectuate de Apple tuturor aplicațiilor și verificarea identității dezvoltatorilor. Totuși, dacă un dispozitiv cu iOS are făcut jailbreak și are instalate aplicații dinafară magazinului oficial, el este mai vulnerabil la atacuri și malware.
Aplicații disponibile
Aplicațiile de la Android sunt găsite în Google Play, iar cifră în jurul căreia se învârte numărul de aplicații disponibile este în jur de 700.000, majoritatea fiind disponibile pe tablete. Multe aplicații originale iOS, sunt disponibile și pe Android, precum Instagram ori Pinterest; de asemenea aplicații specifice Android sunt disponibile în App Store precum Adobe Flash Player ori BitTorrent.
App Store, magazinul iOS de aplicații prezintă o cifră de aplicații în jurul a 800.000, din care aproximativ 300.000 disponibile pentru iPad. Ca și o curiozitatea, mulți dezvoltatori prefara să creeze un joc în iOS înainte să îl dezvolte pe Android.
Comparând cele două magazine de aplicații Google și App store, observăm că cele mai populare aplicații se vor găsi în ambele. Totuși, pentru tablete, sunt mai multe aplicații dezvoltate specific pentru iPad, în timp ce pe tabletele Android găsim adesea aplicații extinse de la smartphone-uri.
Dezvoltarea de aplicații pe cele două platforme
Aplicațiile Android se dezvoltă folosind C, C++ și Java. Este o platformă „open source”, codul sursă Android și pachetul SDK este disponibil gratuit pentru dezvoltatori. Pachetul SDK este disponibil pe toate platformele, PC, Mac și Linux.
Utilizatorii au la dispoziție o gamă largă de aplicații atât în cadrul magazinului Google Play, cât și înafara acestuia. Implicit, sistemul de operare Android limitează accesul la aplicațiile neverificate, pentru a păstra integritatea software a dispozitivului, însă aceasta setare poate fi modificată de către utilizator. Există totuși un cost care trebuie achitat o singură dată, care presupune o taxă de înregistrare pentru dezvoltatorii care își doresc publicarea aplicației (indiferent dacă aceasta este oferită gratuit sau cu plată) în magazinul oficial Google Play. Aplicațiile publicate pe această cale sunt testate de către Google înainte de lansarea pe piață.
Aplicațiile iOS sunt realizate utilizând limbajul de programare Objective-C. Dezvoltatorii trebuie să achite o taxă anuală pentru pachetul iOS SDK și pentru drepturile de publicare în magazinul App Store. Pachetul iOS SDK este valabil doar pe platforma Mac.
Anumite platforme native de dezvoltare a aplicațiilor, cum ar fi Titanium Appcelerator și PhoneGap, oferă posibilitatea de a scrie codul sursă în limbaj Javascript sau HTML, acesta fiind transformat automat în cod nativ fie pentru platfoma Android, fie pentru iOS.
Android SDK
Pachetul Android SDK reprezintă un amalgan de instrumente care permit dezvoltarea și administrarea aplicațiilor. Unele dintre aceste instrumente sunt:
Android Debug Bridge (inclus in pachetul SDK);
Fastboot;
Android Open Accessory Development Kit;
App Invetor for Android;
Hypernext Android Creator;
SDL;
Android APIMiner;
Android folosește un limbaj de programare bazat pe Java. Eclipse este cel mai comun IDE folosit prin intermediul plugin-ului ADT, care suporta în întregime dezvoltarea aplicațiilor Android. Deși Eclipse este în general folosit este totuși greu de învățat. Același lucru este valabil pentru XML-uri (ceea ce adăuga încă un layer de complexitate în relația cu UI), în special dacă anterior s-a folosit CSS. Platforma IDE NetBeans se poate folosi ca alternativă tot prin intermediul unui plugin.
Dezvoltatorii pot folosit orice editor de text pentru a edita fișiere Java sau XML, pe care le pot cupla cu instrumente în linia de comandă pentru a dezvolta și depana aplicațiile Android și pentru a controla dispozitivele Android.
Numărul instrumentelor puse la dispoziția dezvoltatorilor și posibilitatea de a găsi suport online dovedesc faptul că Android-ul este orientat spre a oferi libertate deplină în dezvoltarea aplicațiilor. Dezavantajul acestei libertăți constă în calitatea variabilă a aplicațiilor.
iOS SDK
Pachetul iOS SKD este un sistem centralizat pe consistentă, majoritatea instrumentelor acestui sistem ilustrând acest lucru. În timp ce unele din restricțiile privitoare la dezvoltarea de aplicații pe mai multe platforme sau mai relaxat, înclinația generală de a avea controlul procesului de dezvoltare a aplicațiilor este încă pronunțat.
Fiecare dintre instrumentele folosite în iOS SDK (enumerate mai jos) acoperă o zonă specifică pe care Apple dorește să fie inclusă în toate aplicațiile:
Cocoa Touch
Controlul Multi-touch-ului;
Suportul Accelerometrului;
Ierarhia de vizualizare;
Suportul camerei foto.
Media
OpenAL;
Redare video;
Formatul fișierelor foto;
OpenGL ES.
Core Services
Networking;
Bază de date integrată SQLite;
Core Location.
Mac OS X Kernel
Power Management;
Sistemul de fișiere;
Securitate;
TCP/IP.
În plus, SDK conține și instrumentul Xcode și simulatorul iPhone, un program utilizat pentru a simula dispozitivul pe calculator.
Toți dezvoltatorii trebuie să parcurgă programul iOS Developer (taxa de înscriere 99$ – cursul de bază) prima dată pentru a se asigura că îndeplinesc standardele Apple și înțeleg ce implică sistemele.
O dată ce aplicația este finalizată, poate fi distribuită în trei feluri: prin intermediul App Store, exclusiv intern (pentru angajați, etc.), și distribuire gratuită pentru până la 100 de utilizatori unici. Fiecare etapă trece printr-un proces de revizuire al Apple care confirmă s-au infirma calitatea și scopul aplicației. Java și Flash nu mai sunt folosti de către Apple.
Una din marile diferențe în dezvoltarea de aplicații pentru Apple este construcția interfeței. Atunci când lucrezi într-un ecosistem fragmentat cum e Androidul, trebuie să iei în considerare toate tipurile de dispozitive care rulează acest sistem de operare; la iOS vor fi luate în considerare doar două scări de rezoluție: iPhone și iPad.
Ambele sisteme oferă instrumente pentru dezvoltarea și distribuția de aplicații, ambele au magazine unde pot fi puse la dispoziție aplicațiile dezvoltate, de asemenea au limbaje de programare care sunt în curs de dezvoltare pentru a fi aplicate pe mai multe platforme.
În concluzie în timp ce Androidul aduce o gamă largă de oportunități, ca rezultat a unei cote de piață de 75%, în timp ce iOS se mulțumește cu 18 %, oferind un procent mai ridicat de calitate prin filtrele multiple de verificări a aplicațiilor înainte ca acestea să iasă pe piață.
Figura : Distribuirea globală a descărcărilor de aplicații Android/iOS
2.8.3. Avantaje iOS
Integrare mai bună a rețelelor de socializare Facebook și Twitter: este mai ușoară postarea și distribuirea mesajelor pe rețelele sociale, datorită integrării acestor aplicații în sistemul de operare;
Upgrade de software: Apple oferă upgrade la toate dispozitivele care au capacitatea hardware de a suporta versiuni noi.
Avantaje pentru tableta: aplicațiile populare disponibile pentru smartphone sunt disponibile și în versiune pentru tablete
2.8.4. Dezavantaje iOS
Interfața este relativ statică: Opțiunile de personalizare sunt limitate pentru ecranul de pornire; nu se pot șterge aplicațiile preinstalate; Nu se pot instala aplicații dinafară magazinului oficial;
Aplicații disponibile doar pe iOS: Passbook, FaceTime și aplicația de plăți mobile Square (disponibilă pe iOS 3GS, 4, 4S, 5, 5C, 5S și doar pentru un număr limitat de dispozitive Android);
2.9. Diferențe funcționale majore
Există 10 mari diferențe funcționale între iOS și Android, din punctul de vedere al utilizatorului:
Multitasking: iOS nu a fost proiectat inițial pentru multitasking, ceea ce face că schimbul de date între aplicații diferite care rulează concomitent să fie instabil. Sistemul de operare Android a fost proiectat pentru multitasking, astfel că aplicațiile rulează într-un mediu cu acces mai ușor la datele generate de procesele care rulează în aelasi timp.
Widget-uri: Sistemul de operare Android permite ca software-ul instalat pe dispozitiv să încorporeze „widget-uri” pe ecranul de pornire, ceea ce înseamnă că datele din aplicații pot fi disponibile instant, fără a fi necesară parcurgerea unui meniu sau a unor selecții de programe. Ecranul de pornire de la iOS este o colecție statică de iconițe ale aplicațiilor.
Restricțiile pieței: Apple restricționează publicarea aplicațiilor în App Store. Utilizatorii sunt limitați la aplicațiile din App Store, accesul la alte aplicații fiind posibil doar în cazul în care se realizează procesul de jailbreak (caz în care se anulează garanția și care poate cauza incompatibilități). În concluzie, dacă Apple nu aprobă o aplicație, aceasta nu va fi descărcată de utilizatori. În schimb, aplicațiile Android au o piață deschisă, creând o cale ușoară de distribuire pentru dezvoltatori.
Notificări: iOS permite notificări în formă ferestrelor de tip pop-up. Mai mult decât atât, o singură notificare poate fi vizibilă doar independent, utilizatorul necesitând parcurgerea mai multor notificări succesive. Sistemul de operare Android folosește o bară de notificare, care poate fi extinsă pentru a vedea toate notificările curente în același timp.
Dispozitive numeroase: Singurele dispozitive pe care rulează iOS sunt realizate de Apple: iPhone, iPad și iPod Touch. Sistemul Android rulează pe mai multe platforme hardware ale diferiților producători. Acesta este un avantaj și un dezavantaj în același timp: având mai multe dispozitive înseamnă o piață mai mare de desfacere, dar și o necesitate mare de programare suplimentară pentru că sistemul să asimileze diferențele dintre dispozitive.
ROM editabil: Memoria read-only a dispozitivelor cu iOS este inviolabilă. Acest lucru nu înseamnă că nu se poate efectua „jailbreak” pentru a rula aplicații neaprobate, se poate, însă nu se poate modifica fundamental funcționalitatea de bază a dispozitivului. Dispozitivele care rulează Android pot fi ușor reconfigurate printr-un înlocuire și rescriere completă a sistemului BIOS al dispozitivului.
Schimbările setărilor: Schimbarea setărilor unui dispozitiv Android este mult mai facilă, direct din ecranul de pornire. Mulți utilizatori iOS au probleme în a face modificările de bază. De exemplu, pentru a activa Bluetooth-ul trebuie urmați o serie de pași în meniurile de setări ale dispozitivului.
Integrarea Google: Google este un gigant. Totul a pornit de la motorul de căutare, unde este lider, și a ajuns în mai multe domenii, de la Google Maps, la mail și servicii de cloud. Desigur, Google a creat sistemul de operare Android și astfel mare parte din interfața web fuzionează cu dispozitivele Android și aplicațiile acestora. Apple, pe de altă parte, a fost o lungă perioadă de timp în conflict cu integrarea Google pe platforma iOS, iar din cauza codărilor sistemului de operare, aplicațiile care accesează serviciile Google prin iOS pot deveni ocazional problematice.
Costuri: Utilizatorii s-au plâns în mod repetat de „Taxa Apple”, și anume prețurile ridicate ale dispozitivelor Apple doar pentru marca.
Alegerea furnizorului: Acest criteriu a fost mai important în trecut decât în prezent. Când a fost lansat primul iPhone, acesta era disponibil la un singur furnizor de telefonie mobilă. Asfel, dacă se alegea dezvoltarea unei aplicații iOS, lista clienților posibili era limitată la cei din rețea. Dispozitivele Android au fost disponibile de la început la toți furnizorii majori de telefonie, astfel având o deschidere mai mare spre plajă de clienți.
Figura : Sinteză diferențe majore între platforme
Capitolul 3. Sistemul de operare Android
3.1. Generalități
Google, împreună cu Open Handset Alliance (OHA), a lansat sistemul de operare Android la sfârșitul anului 2007. În zilele noastre, OHA este reprezentată de 84 de companii de top de hardware și software, precum și de operatori mobili cum ar fi: Sprint, T-Mobile, Intel, Asus și Acer, pe lângă Google și alții.
După cum îi spune și numele, Open Handset Alliance prin companiile care o reprezintă este dedicată să contribuie la deschiderea lumii mobile. De aceea, Android este un sistem de operare open-source, care permite ca produse mai ieftine și inovative să ajungă la consumatori, iar platformele de dezvoltare a aplicațiilor să devină mai bune pentru programatori. De îndată ce noul sistem de operare a fost lansat, au fost lansate și instrumentele de dezvoltare, și tutorialele, pentru ca dezvoltatorii să descopere noul sistem.
Din punct de vedere tehnic, Android-ul reprezintă o colecție software construită pentru dspozitive mobile. Constă într-un sistem de operare, software care să furnizeze servicii pentru aplicații și aplicațiile propriu-zise.
Figura : Componentele principale ale sistemului de operare Android
3.1.1. Cote de piață ale versiunilor
Conform Android Dashboard, versiunea Jelly Bean, Android 4.1, reprezintă 34% dintre cota de piață a dispozitivelor, depășind versiunea anterioară de succes, Gingerbread, care a obținut o cotă de piață de 33%. Adunând cotele de piață obținute de versiunile de la Android 4.2 încoace, se obține o cotă de piață de peste 40,5%, ceea ce înseamnă că sistemele noi de operare sunt mult mai populare.
În ceea ce privește sistemele vechi, Froyo (v2.2), Eclair (v2.1) si Ice Cream Sandwich (v4.0.3-v4.0.4) au obținut cote de piață modeste, deși cel din urmă a obținut locul 3 cu 22,5% dintre utilizatorii activi. Unele dintre primele versiuni de Android, Honeycomb (v3.2) și Donut (v1.6), au obținut o cotă de piață minimă de 0,1 %.
Figura: Distribuția versiunilor de sistem de operare Android
3.1.2. Avantaje Android
Gamă largă de dispozitive: Există un număr mare de dispozitive Android disponibile pentru orice tip de buget, în funtie de capabilități hardware, dimensiunea ecranului și caracteristici.
Orice se poate personaliza: Ecranul de pornire poate fi personalizat nu doar cu iconițele aplicațiilor, ci și cu widget-uri, care îi permit utilizatorului să rămână conectat și informat. Alte exemple pot fi SwiftKey, care modifică tastatura implicită a telefonului Android sau aplicații care simulează console de gaming mai vechi. Google are mai puține restricții ca și Apple în ceea ce privește aplicațiile publicate în magazin. Mai mult decât atât, se pot instala aplicații și dinafară magazinului Google Play.
Este un sistem de operare open-source: Acest lucru îl face adaptabil la orice dispozitiv, astfel dezvoltatorii și producătorii pot modifica sistemul pentru a se adapta la nevoile lor. Mai mult decât atât, mulți producători portează platforma de bază Android în interfața proprie, ca de exemplu Sense GUI realizat de HTC.
Este un sistem cu popularitate în creștere: pe măsură ce tot mai multe persoane se orientează spre Android, sistemul se dezvoltă mai eficient bazat de experiența utilizatorului.
Limbajul de programare folosit este Java: Acesta este un limbaj de programare foarte popular, de aceea se pot găsi foarte ușor instrucțiuni, tutoriale în literatura de specialitate sau în articole de pe Internet. Limbajul este unui ușor de învățat, fiind relativ logic.
Control bun al aplicațiilor după lansare: prin intermediul Google Play Licensing, cei care publică aplicația pot decide dacă permit sau interzic folosirea ulterioară a aplicației.
Lipsa costurilor de dezvoltare a aplicațiilor: dezvoltarea de aplicații pe Android este relativ gratuită, singurul cost care trebuie suportat fiind achitarea unei taxe la prima înscriere în magazinul virtual Google Play.
3.1.2. Dezavantaje Android
– Multitudinea de dispozitive poate fi un dezavantaj pentru dezvoltatori: În cazul aplicațiilor 3D, acestea se pot adapta foarte dificil la dispozitivele cu capacitate hardware redusă, iar de aici pot rezulta probleme.
– Rata mare de update: Acest lucru reprezintă un dezavantaj tot din punctul de vedere al dezvoltatorilor, pentru că pot apărea probleme de compatibilitate între platforme.
– Lipsește un control al calității aplicațiilor: Oricine își poate publica aplicația, iar responsabilitatea de a alege ce aplicație să instaleze sau nu cade în mâinile beneficiarului final.
Există o serie de utilizatori care au renunțat la iPhone în favoarea dispozitivelor Android, datorită ecosistemului de servicii oferit de Google. Acesta este puternic și mult mai util comparat cu serviciile de cloud oferite de Apple.
3.2. Procesele dezvoltării unei aplicații Android
Aplicațiile dezvoltate pe platforma Android vor fi create cu ajutorul pachetului de instrumente Software Development Kit (SDK).
Instrumentele vor fi accesate printr-un plugin, Eclipse, numit Android Development Tools ori în linia de comandă.
Dezvoltarea aplicațiilor sunt clasificați în rândurile care urmează, și incorporează patru pași:
Configurarea
se instalează și se configurează mediul de lucru;
se creează AVD-urile (Android Virtual Devices);
se conectează dispozitivele hardware pe care se instalează aplicația;
Dezvoltarea
se inițializează proiectul aplicației Android, care conține toate codurile-sursă și fișierele de resurse necesare;
Depanarea și testarea
se construiește aplicația într-un pachet cu extensia .apk care poate fi instalat și rulat într-un simulator sau pe un dispozitiv Android;
se rezolvaa problemelor apărute la compilare folosind un debugger, Java Debug Wire Protocol (JDWP) plus instrumentele de depănare furnizate de Android SDK;
Publicarea
se configurează aplicația în forma sa finală și apoi este distribuită utilizatorilor.
Instrumente utilizate la dezvoltarea aplicațiilor Android
Android SDK reprezinta un pachet care detine o serie de instrumente necesare la dezvoltarea aplicatiilor mobile.
Clasificarea instrumentelor se poate imparti in doua grupe:
Instrumente SDK, care sunt independente de platforma Android si includ: Android SDK Manager (android sdk), AVD Manager (android avd), Emulatorul (emulator) și Dalvik Debug Monitor Servir (ddms).
Instrumente de platforma, care sunt personalizate pentru a suporta cerințele ultimei versiuni a platformei Android.
Instrumentele esențiale în linia de comandă
Sunt situații când aplicațiile sunt dezvoltate în alte editoare decât Eclipse, care vor fi rulate manual din linia de comandă, acestea fiind descrise mai jos:
Android – creează și actualizează proiectele Android respectiv creează, mută și șterge AVD-urile;
Android Emulator – execută aplicația Android pe o simulare de platformă Android;
Android Debug Bridge – asigură interfața cu simulatorul sau cu dispozitivele conectate (instalează aplicații, protejează dispozitivul, emite comenzi, etc.).
Pe lângă aceste instrumente din pachetul SDK, mai sunt necesare următoarele instrumente cu sursă deschisă sau gratuite:
Ant – compilarea aplicației Android într-un fișier instalabil cu extensia .apk
Keytool – pentru a genera certificate de securitate și o cheie de criptare privată, folosite pentru a semna fișierul .apk. Keytool este parte a JDK (Java Development Kit)
Jarsigner (sau un instrument similar) – pentru a securiza fișierul .apk cu o cheie de criptare privată generată de Keytool. Jarsigner este parte a JDK.
Folosind Eclipse și Android Development Tools (ADT), instrumentele adb și android sunt accesate automat de Eclipse și de ADT. Anumite funcțiuni ale lui adb nu sunt accesibile din Eclipse. De asemenea, este necesară apelarea Keytool și Jarsigner manual, totusi prin Eclipse exista posibilitatea setarii unei apelari automate.
Instrumentele folosite la crearea aplicației
Pentru dezvoltarea aplicației sunt necesare mai multe intrumente, care vor fi descrise pe rând în rândurile care urmează: pachetul SDK prezentat în capitolul imediat următor, pluginul ADT (Android Development Tools) pentru editorul Eclipse, Google Maps Javascrips API, prin care s-a integrat harta Google în aplicație, de asemenea aplicația s-a testat și cu ajutorul Android Studio care reprezintă un mediu de dezvoltare alternativ la Eclipse.
Pachetul Android SDK pentru Android 4.0
Pachetul Android SDK folosit la crearea aplicației este 4.0. Această nouă versiune a adus o serie de îmbunătățiri, pe lângă utilitățile deja cunoscute de la versiunile anterioare (permiterea instalării de aplicații pe carduri de memorie, rulare cu drepturi de administrator, prin atributul <manifest> se poate alege locația instalării aplicației, și altele):
Calendarul se actualizează conform cu profilele de socializare;
Posibilitatea de a adăuga poze la contact, de dimensiuni mari: 256×256, pe lângă iconița de 96×96 din trecut;
Widget care oferă utilizatorului într-un singur loc, toate mesajele vocale din aplicațiile telefonului;
Posibilitatea de a edita poze, video, muzica printr-o aplicație mult mai complexă;
Camera include API-uri, care permite detectarea fetei, controlând focalizarea pozei;
Focalizare continua automată, atât în cazul pozelor cât și în cazul filmărilor.
Permite împerecherea bluetooth cu dispozitive medicale;
Utilizatorul are posibilitatea de a vizualiza traficul de date folosit de orice aplicație;
Posibilitatea de a crea o rețea virtuală privată (VPN) prin crearea unei interfețe cu adresa proprie.
Observăm o tendință a noilor versiuni de a se axa pe UI (Ușer Interface), prin tot felul de widget-uri și aplicații care sunt menite să ajute utilizatorul tot mai mult, în special la organizarea timpului, dar și noi permisiuni extrem de utile cum ar fi VPN-ul.
De asemenea, acest pachet deține și mai multe variante a emulatorului Android, folosit pentru a crea aplicația pe dimensiune de ecran, densități de pixeli și rezoluții diferite.
Pluginul ADT pentru Eclipse
Pluginul ADT pentru editorul Eclipse, deține o serie de caracteristici importante și oferă un mediu puternic de dezvoltare a aplicațiilor Android, integrand mai multe operațiuni, astfel încât dezvoltarea și testarea aplicației devine ușoară. Acesta, integrează instrumentele SDK în meniurile Eclipse, și poate rula aceste instrumente ca parte a proceselor de fundal.
Documentația integrată este ușor de accesat, prin selectarea unei clase, metode sau variabile în codul sursă.
Editorul de programare în limbaj Java conține funcții ca: verificarea sintaxei la compilare, auto-completare și documentație integrată pentru API-urile Android.
Furnizează editoare XML care permit editarea fișierelor specifice Android XML într-o manieră GUI (Graphic Ușer Interface). Acest lucru înseamnă că este posibilă prelucrarea interfeței cu utilizatorul printr-o interfața de tip “drag and drop”.
Android Studio
Android Studio, reprezintă un nou mediu de dezvoltare Android, bazat pe IntelliJIDEA, similar Eclipse cu Pluginul ADT. Acesta oferă instrumente utile în dezvoltarea și depanarea de aplicații. O parte din facilitățile acestui sunt prezentate mai jos:
Posibilitatea de a observa construcția aplicației în timp real;
Posibilitatea de a efectua corectări automate;
Oferă diferite instrumente care verifica performanță, compatibilitatea versiunilor și alte probleme întâlnite;
Există un editor care permite utilizatorului să facă drag-and-drop la diferite componente, posibilitatea de a vizualiza aplicația pe mai multe configurații de ecran;
Suport integrat pentru platformă de Google Cloud.
Google maps
Lansată în 2006, aplicația Java intitulată Google Maps for Mobile, are capacitatea de a rula pe orice dispozitiv mobil cu platforma Java.
Fără a necesita un receiver GPS, din 2007 o nouă versiune a aplicației pe mobil a introdus un serviciu de localizare asemănător GPS-ului. Funcția "Locația mea" utilizează locația GPS a dispozitivului mobil. Un software determină cele mai apropiate rețele wireless și releuri. De asemenea software-ul caută locația releului cel mai apropiat folosind o bază de date cu rețele cunoscute wireless și releuri.
Se face o triangulare a puterii semnalului provenit de la diferite relee, se folosește apoi locația acestora în cadrul funcției „Locația mea”, pentru a determina locația curentă a utilizatorului. Metoda de locație bazată pe rețelele wireless folosește locația punctelor WiFi din apropiere pentru a descoperi mai apoi locația utilizatorului.
Metoda de interceptare a locației este următoarea:
Locație bazată pe GPS
Locație bazată pe WiFi sau WLAN
Locația bazată pe relee telefonice
Începând cu anul 2008, Google Maps Mobile este disponibil pe următoarele platforme: Android, iOS (iPhone, iPod Touch, iPad), Windows Mobile, Symbian, BlackBerry, Palm OS, PlayStation Vita 3G, Palm webOS și ulterior pe Motorola Droid.
Navigația prin Google Maps este gratuită, un oarecare dezavantaj ar fi faptul că hărțile nu sunt incluse în fișierele aplicației, motiv pentru care va fi necesară o conexiune la internet pentru a descărca hărțile și informațiile atașate din Google Maps. Dezavamtaj care va fi diminuat prin funcția de memorare a ariilor recent vizualizate. Continuând ideea, exista și posibilitatea de descărcare a unei hărți pentru o zonă de 26 metri pătrați, în jurul oricărui punct, având posibilitatea de a repeta această opțiune de câte ori se dorește pentru a acoperi suprafața dorită.
Harta descărcată a zonei, va include doar harta rutieră și obiectivele principale, pentru vedere din satelit, clădiri 3D, căutare sau navigare fiind necesară conexiunea la internet.
Google Maps API versiunea 3
Pentru utilizatorii de telefoane mobile, aplicațiile bazate pe hărți și localizare pot fi folosite utilizând clasele pachetului android.location, biblioteca externă Google Maps și Google Maps Javascript API.
În dezvoltarea aplicației Salvamont, s-a folosit Google Maps Javascript API (Application Programming Interface) versiunea 3, având astfel posibilitatea de a integra hărțile Google Maps în propria aplicație.
Clasa principală a pachetului Maps va fi reprezentată de com.google.android.gms.maps.GoogleMap, fiind o subclasă a ViewGroup. Prin MapFragment se afișează harta obținută, fiind cea mai simplă metoda de a amplasa o hartă într-o aplicație. Aceasta componentă poate fi adăugată în layout-ul unei activități printr-un XML, un exemplu în cazul nostru se regăsește în activitatea DetaliiTraseuActivity. Cu ajutorul Google Maps API, utilizatorul are posibilitatea de a desena straturi de tip Overlay peste harta existentă.
Figura 5.3. Dispozitiv mobil cu aplicația Google Maps
În funcție de zone, parametrii URL sunt limitați, astfel în zonele mai puțin populate, valoarea suportată se poate opri la 18, în schimb în cazul orașelor vestice, nivelul zoom-ului este în general la 20, dar sunt cazuri când poate atinge 23 ori chiar mai sus.
Făcând o paralelă cu Mercator, observam că formulele folosite în Google Maps sunt cele pentru Mercatorul sferic, însă coordonatele funcțiilor sunt coordonate GPS bazate pe WGS 84 (World Geodetic System datând din 1984). Diferența dintre o sferă și elipsoidul WGS 84 are ca rezultat o proiecție nu tocmai conformă. Discrepanța este insesizabila la scară globală, însă hărțile unor zone deviază puțin față de hărțile reale Mercator elipsoidal la aceeași scară.
Făcând un exercițiu prin care se va presupune că dE și dN vor fi componente ale coordonatelor infinitezimale locale ENU (East, North, Up coordinates – coordonate obținute prin tangența unui plan cu Pământul într-un anumit loc), lățimea și lungimea proiectate pe hartă sunt după cum urmează:
unde φ este latitudinea geodetică, e este deviația până la sferă a elipsoidului Pământului, a este axa semi-majoră a Pământului și amap este cea a scării la care harta este desenată.
Mercator proiectează polii la infinit, însă Google Maps nu poate arăta zona polilor la o latitudine nordică și sudică mai mare de 85 de grade. Lucrul acesta nu se va considera o limitare, având în vedere scopul acestui serviciu.
Capitolul 4. Studiu de caz aplicație Salvamont
În această parte se va prezenta implementarea aplicației, incluzând modul de abordare și structurare al programului.
Aplicația fiind creată pe platforma Android, vom avea o flexibilitate care ne va permite modificări ulterioare și dezvoltare a aplicației.
Figura 4.1. Accesarea aplicației din meniu
Studiul de caz, va fi descris cât mai obiectiv, astfel încât să reiasă clasele principale, activitățile care sunt transpuse în aplicația Salvamont.
Această aplicație are urmatoarele permisiuni:
Identitate
găsește conturi pe dispozitiv
Locație
locația aproximativă (bazată pe rețea)
locația exactă (bazată pe rețea și GPS)
Telefon
apelare directă numere de telefon
Fotografii/Media/Fișiere
modifică sau șterge conținutul stocării USB
citește informații despre apeluri
citește starea și identitatea telefonului
Altele
primire date prin internet
acces deplin la rețea
vizualizează conexiunile la rețea
modifică setări de sistem
împiedică intrarea dispozitivului în repaus
controlează vibrarea
Pentru implementarea aplicației vor fi necesare diferite activități care să permită selectarea traseelor montane, selectarea pârtiilor de schii și afișarea acestora pe o hartă montană, precum și vizualizarea traseelor, pârtiilor, cabanelor, cu ajutorul Google Maps.
Astfel, activitățile principale în aplicația noastră vor fi:
o activitate care să prezinte recomandările și avertizările Salvamont;
o activitate prin care se permite vizualizarea și selectarea cabanelor;
o activitate prin care se permite vizualizarea și selectarea traseelor;
o activitate prin care se permite selectarea munților și vizualizarea pârtiilor;
o activitate care permite apelarea la un număr prestabilit de telefon (SOS);
În aplicație sunt implementate următoarele activități și servicii principale:
public class Elemente;
public class Constants;
public class Parsare;
public class Partii;
public class Cabane;
public class Trasee;
Figura 4.2. Interfața cu utilizatorul în ecranul principal
AndroidManifest.xml
AndroidManifest.xml este descris ca fiind fișierul care controlează întreaga aplicație, care descrie anumite calități despre activități și servicii, permisiunile care sunt necesare, de asemenea nivelele API care vor fi suportate.
Fișierul va arăta în felul următor:
<?xml version="1.0" encoding="utf-8" ?>
– <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.salvamont2" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
– <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
– <activity android:name="com.salvamont2.FirstActivity" android:label="@string/app_name">
– <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.salvamont2.MainActivity" android:label="@string/app_name" />
<activity android:name="com.salvamont2.DetaliiTraseuActivity" android:label="@string/app_name" />
<activity android:name="com.salvamont2.CabaneActivity" android:label="@string/app_name" />
<activity android:name="com.salvamont2.PartiiActivity" android:label="@string/app_name" />
<activity android:name="com.salvamont2.InfoActivity" android:label="@string/app_name" />
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyAqhUvI18SrNKiQumH4QrEvfPSD0Nt-Okk" />
<meta-data android:name="com.google.android.gms.version" android:value="4323000" />
</application>
</manifest>
În fișierul AndroidManifest sunt prezentate principalele activități și servicii, cât și permisiunile de care are nevoie aplicația, cât și diferite date privind versiunea de Android ori tipul ecranului suportat. De asemenea nivelul de API suportat este mai mare sau egal cu 14. Aplicația necesita acces la Internet și permisiunea de a trimite notificări.
Activitățile au anumite proprietăți specifice, și vom lua activitatea principală:
<activity android:name="com.Salvamont2.FirstActivity"
aceasta are un nume specific
android:label="@string/app_name">
are un label care preia numele afișat al aplicației dintr-un fișier string.xml care e în res/values/strings.xml
<intent-filter>
<action android:name="android.intent.action.MAIN" />
un intent care specifică faptul că aplicația e de tip MAIN, linia urmatoare ne arata acest lucru:
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Strings.xml
În cazul aplicațiilor Android, partea de UI (User Interface) este separată de partea funcțională, unde sunt clasele Java care implementează funcționalitatea.
Astfel în directorul /values din res avem fișierul strings.xml care conține variabile cheie pentru aplicație, începând de la numele anumitor ferestre. Fișierul are forma:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Selectati mijlocul de transport in comun</string>
<string name="app_name">InfoTransportOradea</string>
<string name="Hello">Hello</string>
<string name="action_settings">Settings</string>
</resources>
Colors.xml
În acest fișier se stochează culorile folosite în aplicație, în formă hexadecimala, culori care vor fi apelate în fișierele java.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="bg">#ddf0f9</color>
<color name="bgHeader">#023d63</color>
<color name="bgFooter">#de1018</color>
<color name="bgFooter2">#B01549</color>
<color name="alb">#ffffff</color>
<color name="negru">#000000</color>
<color name="buttonActive">#115a89</color>
<color name="buttonInactive">#aaaaaa</color>
<color name="listDate">#C0E0E2</color>
</resources>
Ca și până acum, se observă folosirea unei codificări XML standard, de unde și simplitatea modificărilor UI în Android și totodată transparența codului, fiind ușor de înțeles.
În continuare se analizează interfețele grafice ale principalelor noastre activități și modul lor de implementare, fișiere pe care le găsim în directorul res/layout/.
Imaginea de lansare a aplicației este preluată din fișierul bitmap cu extensia .png „sigla_salvamont.png”. Mediul de dezvoltare creează o resursă drawable, localizată în directorul res/drawable/.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/sigla_salvamont" />
</LinearLayout>
Figura 4.3. Ecranul inițial
Pentru activitatea noastră principală avem fragment_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.salvamont2.MainActivity$PlaceholderFragment" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello" />
</RelativeLayout>
Din analizarea codului reiese faptul că tot ce conține fișierul e un container de tip RelativeLayout care conține un câmp de text (Text field).
Ecranul secundar care se deschide activează meniul de informații, care cuprinde tot un container de tip RelativeLayout care conține un câmp de text (Text field), precum și 5 butoane, pentru informații, cabane, trasee, părții sau SOS.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="15dp"
android:text="Pleci la munte? Afla starea vremii, detalii despre partii, cabane si trasee." />
<ListView
android:id="@+id/listViewAfisareStiri"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/linear"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1" ></ListView>
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:weightSum="5">
<Button
android:id="@+id/infoi"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/selected_button"
android:text="Info"
android:textColor="@color/alb" />
<Button
android:id="@+id/cabanei"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/selected_button"
android:text="Cabane"
android:textColor="@color/alb" />
<Button
android:id="@+id/traseei"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selected_button"
android:text="Trasee"
android:textColor="@color/alb" />
<Button
android:id="@+id/partiii"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/selected_button"
android:text="Partii"
android:textColor="@color/alb" />
<Button
android:id="@+id/sosi"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/selected_button"
android:text="Sos"
android:textColor="@color/alb" />
</LinearLayout>
</RelativeLayout>
În fișierul activity_main.xml avem formatul de afișare pentru selectia din meniuri. Acest format se află într-un ListView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
tools:context=".MainActivity" >
<TextView
android:id="@+id/selecteaza"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Selecteaza munti" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/selecteaza" />
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:weightSum="5" >
<Button
android:id="@+id/Info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selected_button"
android:text="Info"
android:textColor="@color/alb" />
<Button
android:id="@+id/Cabane"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selected_button"
android:text="Cabane"
android:textColor="@color/alb" />
<Button
android:id="@+id/Trasee"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selected_button"
android:text="Trasee"
android:textColor="@color/alb" />
<Button
android:id="@+id/Partii"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selected_button"
android:text="Partii"
android:textColor="@color/alb" />
<Button
android:id="@+id/Sos"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selected_button"
android:text="Sos"
android:textColor="@color/alb" />
</LinearLayout>
<ListView
android:id="@+id/listViewAfisareTrasee"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/linear"
android:layout_alignParentLeft="true"
android:layout_below="@+id/spinner1" >
</ListView>
</RelativeLayout>
După realizarea structurii de bază a aplicației, trebuie identificate ce variabile și clase ajutătoare sunt necesare pe mai departe.
MapFragment
Este o clasă care conține resursele preluate de la Google Maps cu ajutorul funcției getMap() și care inițializează harta pe toată suprafața ecranului pregătind astfel suprafața pentru Overlay-urile ulterioare care vor desena traseele și afișa partiile.
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="350dp"
android:layout_marginTop="10dip"
class="com.google.android.gms.maps.MapFragment" />
map=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(oradeaposition, 13));
Inițializarea de început a hărții se realizează prin introducerea unor coordonate de început, în cazul nostru ale orașului Oradea. Acest lucru este posibil folosind GoogleMap, o clasă specială a Google Maps Android API.
static final LatLng oradeaposition = new atLng(46.506014,23.002354);
GoogleMap map;
Elemente1 lista1;
Figura 4.4. Preluarea hărții Google Maps
Acum că am pregătit resursele trebuie să afișăm cumva informația într-un format cât mai plăcut pentru utilizator. Astfel am creat un adaptor pentru a putea modifica aspectul informației.
Figura 4.5. Afișaj pentru selectarea pârtiilor
Această clasă extinde un ArrayAdapter, care, așa cum îi zice și numele, extinde un adaptor de bază din Android și care va fi folosit într-un ListView sau Spinner.
Clasa Pârtii este clasa care folosește adaptorul nostru, la fel ca și Trasee. Astfel în cadrul acestei clase se extinde un ListView, adică o listă, și se inițializează pârtiile,
public class PartiiActivity extends Activity implements OnClickListener{
private Button info, partii,trasee, cabane,sos;
PartiiAdapter adapter;
ListView listaPartii;
ArrayList<PartiiSetGet> a = new ArrayList<PartiiSetGet>();
și în metoda suprascrisă onCreate se folosește pentru a popula adaptorul,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.partii);
info=(Button)findViewById(R.id.infop);
partii=(Button) findViewById(R.id.partiip);
trasee=(Button)findViewById(R.id.traseep);
cabane=(Button)findViewById(R.id.cabanep);
partii.setBackgroundResource(R.drawable.active_button);
listaPartii = (ListView) findViewById(R.id.listViewAfisarePartii);
sos=(Button) findViewById(R.id.sosp);
sos.setOnClickListener(this);
info.setOnClickListener(this);
trasee.setOnClickListener(this);
cabane.setOnClickListener(this);
a.add(new PartiiSetGet("partia Lupului"));
a.add(new PartiiSetGet("partia Valea soarelui 1"));
a.add(new PartiiSetGet("partia Soimului"));
a.add(new PartiiSetGet("partia Stadion"));
a.add(new PartiiSetGet("partia M2"));
a.add(new PartiiSetGet("partia Goznuta"));
a.add(new PartiiSetGet("partia Cavnic"));
a.add(new PartiiSetGet("partia drumul Rosu"));
adapter = new PartiiAdapter(this, R.layout.adapterpartii, a);
listaPartii.setAdapter(adapter);
}
ArrayList
Pentru a putea afișa informațiile meteo, ca de exemplu vemea de azi, mâine sau poimâine, în primul rând avem nevoie de aceste informații și pentru asta trebuie să le preluăm de undeva. În acest caz am folosit o clasă ajutătoare care preia datele în format XML și le trimite mai departe spre a fi parsate pentru a stoca datele în diferite variabile de tip array.
ArrayList<String> fct(){
new Thread(new Runnable() {
@Override
public void run() {
String url1="http://api.openweathermap.org/data/2.5/weather?q="+param+",Ro";
Log.w("lista",".."+parsare.get(url1));
Log.w("lista1",".."+parsare1.get(url1));
try{
lista= gson.fromJson(parsare.get(url1), new TypeToken<ArrayList<Elemente>>(){}.getType());
lista1 = gson.fromJson(parsare1.get(url1), Elemente1.class);
}catch(Exception e){
Log.w("lista","a intrat la catch gson");
e.printStackTrace();
}
vremea= new ArrayList<String>();
Log.w("lista","lista .size "+lista.size()+"lista.get0 "+lista.get(0).getDescription());
Log.w("lista1","temp:: "+lista1.getTemp());
e=lista.get(0);
for(int i=1;i<lista.size();i++)
{e= lista.get(i);
vremea.add(e.getDescription());
Log.w("getdescription",".."+e.getDescription());
}
Așa cum se observă, se preia URL-ul ca și parametru, se trimite o cerere către acesta și, odată primit răspunsul, acesta se transformă într-un string și se trimite mai departe spre a fi parsat.
DetaliiTraseuActivity
Odată ce avem informațiile necesare, acestea trebuie afișate, și așa cum am spus anterior, map este doar o suprafață pe care vom desena alte suprafețe. Aceste noi suprafețe vor conține traseele, partiile si pozitia cabanelor, în funcție de selecție.
map=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(oradeaposition, 13));
Markermark=map.addMarker(newMarkerOptions().position(oradeaposition).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)).title(Constants.getTraseu()));
mark.showInfoWindow();
MainActivity
MainActivity este activitatea principală a aplicației, locul din care pornește totul și locul unde toate celelalte resurse sunt folosite. Conține adresele pentru activitatile din butoanele meniului,
public void onClick(View v) {
switch(v.getId()){
case R.id.Partii:
Log.w("apasat","sa apasat pe partii");
Intent intent = new Intent(MainActivity.this, PartiiActivity.class);
startActivity(intent);
finish();
break;
case R.id.Info:
Intent intent1 = new Intent(MainActivity.this, InfoActivity.class);
startActivity(intent1);
finish();
break;
case R.id.Cabane:
Intent intent2 = new Intent(MainActivity.this, CabaneActivity.class);
startActivity(intent2);
finish();
break;
case R.id.Sos:
Intent =new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
}
}
o clasă Spinner în care se face afișarea opțiunilor și se permite alegerea uneia dintre ele, preluând date din Adapter-ul asociat cu această vizualizare:
spinner1 = (Spinner) findViewById(R.id.spinner1);
listaTrasee=(ListView) findViewById(R.id.listViewAfisareTrasee);
List<String> list = new ArrayList<String>();
list.add("Muntii Apuseni");
list.add("Muntii Bargau");
list.add("Muntii Bistritei");
list.add("Muntii Bucegi");
list.add("Muntii Calimani");
ArrayAdapter<String>dataAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list)
dataAdapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(dataAdapter);
spinner1.setOnItemSelectedListener(this);
Figura 4.6. Interfața care oferă posibilitatea selecției traseului in funcție de munții selectați
Concluzie
(urmează a se completa)
Bibliografie
[1] Burnette, Ed – Hello, Android – Introducing Google's Mobile Development Platform, ediția a 3-a, editura CommonsWare LLC, 2010, Dallas, Texas, Statele Unite ale Americii
[2] Burnette, Ed ; Gallardo, David ; McGovern, Robert – Eclipse in Action: A Guide for Java Developers, editura Manning Publications Co., 2003, Greenwich, Connecticut, SUA
[3] Darcey, Lauren ; Conder, Shane – Android Application Development in 24 Hours, editura Sams Publishing, 2010, Indianapolis, Indiana, Statele Unite ale Americii
[4] Darwin, Ian F. – Android Cookbook, editura O’Reilly Media Inc., 2012, Sebastopol, California, Statele Unite ale Americii
[5] Dimarzio, Jerome (J.F.) – Android – A programmer’s guide, editura McGraw-Hill, Co., 2008, New York, Statele Unite ale Americii
[6] Friesen, Jeff – Learn Java for Android Development, editura Apress, 2010, New York, Statele Unite ale Americii
[7] Goodman, Danny; Morrison, Michael; Novitski, Paul; Gustaff Rayl, Tia – JavaScript Bible, editura Wiley Publishing Inc., 2010, Indianapolis, Indiana, Statele Unite ale Americii
[8] Harrel, William – HTML, CSS and JavaScript Mobile Development for Dummies, editura John Wiley & Sons, Inc., 2011, Hoboken, New Jersey, Statele Unite ale Americii
[9] Lee, Wei-Meng – Beginning Android Application Development, editura Wiley Publishing Inc., 2011, Indianapolis, Indiana, Statele Unite ale Americii
[10] Meier, Reto – Professional Android Development, editura Wrox, 2010, Hoboken, Statele Unite ale Americii
[11] Morris, Jason – Android User Interface Development: Beginner's Guide, Packt Publishing, 2011, Birmingham, Marea Britanie
[12] Murphy, Mark – Android Programming Tutorials, editura CommonsWare LLC, 2010,Dallas, Texas,Statele Unite ale Americii
[13] Svennerberg, Gabriel – Beginning Google Maps API 3, editura Apress, 2010, New York, Statele Unite ale Americii
[14] http://developer.android.com/
[15] https://developers.google.com/maps/
[16] http://googlemapsapi.blogspot.ro/
[17] http://today.java.net/pub/a/today/2006/10/25/integrating-google-maps-into-web-application.html
[18] http://googlecompass.com/GoogleMapsProjection.htm
Bibliografie
[1] Burnette, Ed – Hello, Android – Introducing Google's Mobile Development Platform, ediția a 3-a, editura CommonsWare LLC, 2010, Dallas, Texas, Statele Unite ale Americii
[2] Burnette, Ed ; Gallardo, David ; McGovern, Robert – Eclipse in Action: A Guide for Java Developers, editura Manning Publications Co., 2003, Greenwich, Connecticut, SUA
[3] Darcey, Lauren ; Conder, Shane – Android Application Development in 24 Hours, editura Sams Publishing, 2010, Indianapolis, Indiana, Statele Unite ale Americii
[4] Darwin, Ian F. – Android Cookbook, editura O’Reilly Media Inc., 2012, Sebastopol, California, Statele Unite ale Americii
[5] Dimarzio, Jerome (J.F.) – Android – A programmer’s guide, editura McGraw-Hill, Co., 2008, New York, Statele Unite ale Americii
[6] Friesen, Jeff – Learn Java for Android Development, editura Apress, 2010, New York, Statele Unite ale Americii
[7] Goodman, Danny; Morrison, Michael; Novitski, Paul; Gustaff Rayl, Tia – JavaScript Bible, editura Wiley Publishing Inc., 2010, Indianapolis, Indiana, Statele Unite ale Americii
[8] Harrel, William – HTML, CSS and JavaScript Mobile Development for Dummies, editura John Wiley & Sons, Inc., 2011, Hoboken, New Jersey, Statele Unite ale Americii
[9] Lee, Wei-Meng – Beginning Android Application Development, editura Wiley Publishing Inc., 2011, Indianapolis, Indiana, Statele Unite ale Americii
[10] Meier, Reto – Professional Android Development, editura Wrox, 2010, Hoboken, Statele Unite ale Americii
[11] Morris, Jason – Android User Interface Development: Beginner's Guide, Packt Publishing, 2011, Birmingham, Marea Britanie
[12] Murphy, Mark – Android Programming Tutorials, editura CommonsWare LLC, 2010,Dallas, Texas,Statele Unite ale Americii
[13] Svennerberg, Gabriel – Beginning Google Maps API 3, editura Apress, 2010, New York, Statele Unite ale Americii
[14] http://developer.android.com/
[15] https://developers.google.com/maps/
[16] http://googlemapsapi.blogspot.ro/
[17] http://today.java.net/pub/a/today/2006/10/25/integrating-google-maps-into-web-application.html
[18] http://googlecompass.com/GoogleMapsProjection.htm
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: Dezvoltarea de Aplicatii pe Platforma Android (ID: 149720)
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.
