Aplicație Android tip Ghid turistic [305967]
Universitatea “Politehnica” [anonimizat]: [anonimizat]. Eduard – Cristian POPOVICI Florina Ioana GUȚU
2020
C U P R I N S
Lista figurilor……………………………………………………………………………………………………………………….7
Introducere ………………………………………………………………………………………………………………………….9
Capitolul 1 – Noțiuni teoretice referitoare la sistemul de operare Android ……………………………………11
.
Exemple de aplicații Android utilizate pentru identificarea obiectivelor turistice ………11
Noțiuni generale…………………………………………………………………………………………………19
Crearea aplicației Android ………………………………………………………………………………….21
Rularea aplicației……………………………………………………………………………………………….23
Prezentarea mediului de lucru Android…………………………………………………………………24
Capitolul 2 – Prezentarea generală a arhitecturii specifice sistemului………………………………………..27
2.1 Structura aplicației………………………………………………………………………………………………27
2.2 Arhitectura aplicației ………………………………………………………………………………………….32
Capitolul 3 – Detalii implementare aplicație…………………………………………………………………………..37
3.1 Activități…………………………………………………………………………………………………………..37
3.1.1 AndroidManifest.xml…………………………………………………………………………….38
3.1.2 MainActivity.java………………………………………………………………………………….39
3.1.3 activity_main.xml…………………………………………………………………………………..41
3.2 Fragmente………………………………………………………………………………………………………….42
3.2.1 ListaFragment.java………………………………………………………………………………..43
3.2.2 fragment_lista.xml……………………………………………………………………………….44
3.3. DetailFragment.java……………………………………………………………………………………………44
3.3.1 fragment_detail.xml……………………………………………………………………………….45
3.4 GoogleMapsfragment.java……………………………………………………………………………………45
3.5 GalerieFragment.java…………………………………………………………………………………………..46
3.5.1 fragment_galerie.xml……………………………………………………………………………..46
3.6 FacebookFragment.java……………………………………………………………………………………….47
3.6.1 fragment_facebook.xml………………………………………………………………………….47
3.7 nav_graph.xml……………………………………………………………………………………………………48
3.8 strings.xml…………………………………………………………………………………………………………48
3.9 ghid _turistic_menu.xml………………………………………………………………………………………48
3.10 build.gradle………………………………………………………………………………………………………49
Capitolul 4 – Teste și analiza rezultatelor obținute …………………………………………………………………51
Concluzii……………………………………………………………………………………………………………………………53
Bibliografie………………………………………………………………………………………………………………………..55
Anexa 1……………………………………………………………………………………………………………………………..56
Anexa 2……………………………………………………………………………………………………………………………..57
Anexa 3……………………………………………………………………………………………………………………………..59
Anexa 4……………………………………………………………………………………………………………………………..60
Anexa 5……………………………………………………………………………………………………………………………..61
Anexa 6……………………………………………………………………………………………………………………………..62
Anexa 7……………………………………………………………………………………………………………………………..63
Anexa 8……………………………………………………………………………………………………………………………..64
Anexa 9……………………………………………………………………………………………………………………………..66
Anexa 10……………………………………………………………………………………………………………………………67
Anexa 11……………………………………………………………………………………………………………………………68
Anexa 12……………………………………………………………………………………………………………………………69
Anexa 13……………………………………………………………………………………………………………………………70
Anexa 14……………………………………………………………………………………………………………………………71
Anexa 15……………………………………………………………………………………………………………………………72
Anexa 16……………………………………………………………………………………………………………………………73
Anexa 17……………………………………………………………………………………………………………………………74
Anexa 18……………………………………………………………………………………………………………………………77
Lista figurilor
Figura 1.1 Iconița aplicației Amazing România ………………………………………………………………………11
Figura 1.2 Listarea obiectivelor turistice………………………………………………………………………………..12
Figura 1.3 Detaliere obiectiv turistic……………………………………………………………………………………..12
Figura 1.4 Indicarea pe hartă a locațiilor………………………………………………………………………………13
Figura 1.5 Setările aplicației…………………………………………………………………………………………………13
Figura 1.6 Politica de confidențialitate a aplicației România Uimitoare………………………………………14
Figura 1.7 Modalitățile de logare în aplicație………………………………………………………………………….14
Figura 1.8 Afișarea unui obiectiv turistic………………………………………………………………………………..15
Figura 1.9 Detalierea locației……………………………………………………………………………………………….15
Figura 1.10 Adăugare locație ……………………………………………………………………………………………….16
Figura 1.11 Meniu aplicație PocketGuide ………………………………………………………………………………17
Figura 1.12 Exemplu de obiectiv turistic ………………………………………………………………………………..18
Figura 1.13 Listarea obiectivelor turistice audio………………………………………………………………………19
Figura 1.14 Exemplu de locație din apropierea utilizatorului…………………………………………………….20
Figura 1.15 Tipuri de activități………………………………………………………………………………………………21
Figura 1.16 Stabilirea versiunii suportate de Android pentru noua aplicație……………………………….22
Figura 1.17 Distribuția versiunilor de Android………………………………………………………………………. 22
Figura 1.18 Crearea unui dispozitiv mobil virtual……………………………………………………………………23
Figura 1.19 Specificațiile AVD……………………………………………………………………………………………..23
Figura 1.20 Mediul de lucru Android……………………………………………………………………………………..24
Figura 2.1 Navigarea între fragmentele aplicației Ghid turistic………………………………………………….27
Figura 2.2 Iconița aplicației Ghid turistic România …………………………………………………………………27
Figura 2.3 Meniul aplicației …………………………………………………………………………………………………28
Figura 2.4 Lista obiectivelor turistice ……………………………………………………………………………………29
Figura 2.5 Galeria plicației……………………………………………………………………………………………………30
Figura 2.6 Indicarea locațiilor obiectivelor……………………………………………………………………………..31
Figura 2.7 Fereastra Facebook……………………………………………………………………………………………..32
Figura 2.8 Arhitectura Android…………………………………………………………………………………………….33
Figura 2.9 Gruparea logică a modulelor aplicației…………………………………………………………………….34
Figura 2.10 Structura de pe discul fizic al proiectului ……………………………………………………………….35
Figura 3.1 Obiectele grafice ale fragmentului…………………………………………………………………………43
7
8
INTRODUCERE
Obiectivul lucrării
Lucrarea de față are ca scop prezentarea unei aplicații de tip Ghid turistic, care oferă turiștilor posibilitatea de a vizualiza detalii despre principalele obiective turistice din țara noastră și constă în identificarea pe hartă a locației, prin indicarea longitudinii și latitudinii locului, folosind serviciul Google Maps.
Aplicația prezintă o listă cu 14 locații din țară și este proiectată pentru dispozitive mobile care rulează sistemul de operare Android. Este vorba despre un ghid vizual care conține obiective din mai multe categorii, cum ar fi: orașe, cetăți medievale, mănăstiri, etc.
Motivația alegerii temei
Această temă a fost aleasă pe considerentul că este utilă o astfel de aplicație, având în vedere că sistemul de operare Android este larg răspândit în cadrul echipamentelor de comunicații mobile, permițând utilizatorului să acceseze magazinul virtual Google Play.
Gradul de noutate al temei
În urma studierii aplicațiilor existente în magazinul virtual Google Play, am ajuns la concluzia că acestea prezintă un grad ridicat de complexitate în ceea ce privește structura acestora, implicând un efort suplimentar din partea utilizatorului de a le folosi. Din acest motiv, am considerat că se impune proiectarea unei aplicații care să simplifice modul de accesare a informațiilor de către utilizator.
Obiectivele generale ale proiectului
Lucrarea cuprinde mai multe capitole, dintre care primul capitol conține noțiuni teoretice referitoare la sistemul de operare Android.
Al doilea capitol constă în prezentarea generală a arhitecturii specifice sistemului.
Al treilea capitol prezintă detalii privind implementarea aplicației.
Al patrulea capitol prezintă testarea aplicației și ideile de îmbunătățire din perspectiva dezvoltării ulterioare a aplicației.
La finalul lucrării sunt enunțate concluziile.
Contribuția studentului
Aplicația Android de tip Ghid turistic România este dezvoltată și implementată în mod individual, prin folosirea mediului de dezvoltare Android Studio.
9
10
CAPITOLUL 1
Noțiuni teoretice referitoare la sistemul de operare Android
Exemple de aplicații Android utilizate pentru identificarea obiectivelor turistice
Amazing România
Amazing România – Ghidul Turistic de Aventură al României este o aplicație de tip ghid turistic care prezintă unele dintre cele mai frumoase locuri din România: trasee montane, cascade, chei, orașe, sate tradiționale și fortificații. Aceasta este dezvoltată atât pentru Android, cât și pentru iOS. Particularitate acestei aplicații constă în faptul că permite selectarea traseelor în funcție de preferințe.
Aplicația a avut peste 10.000 de instalări, ultima actualizare fiind la data de 21 iulie 2017. Aceasta necesită versiunea minimă de Android 4.1 (Jelly Bean), versiunea actuală a aplicației fiind 1.1.3.
Ca dimensiune, aplicația este una robustă, ocupând un spațiu de memorie de 3,9 MB.
Această aplicație solicită permisiunea de a avea acces la:
accesarea fotografiilor din spațiul de stocare;
citirea informațiilor din spațiul de stocare;
modificarea sau ștergerea informațiilor din USB;
accesarea locației folosind WiFi sau rețelele de telefonie mobilă pentru a determina locația dispozitivului, iar pentru determinarea cât mai precisă a locației folosindu-se GPS-ul
verificarea conexiunii la INTERNET, precum și utilizarea acestuia
Odată ce aplicația a fost instalată pe dispozitivul mobil, pe ecranul utilizatorului va apărea
iconița de mai jos, ce conține numele aplicației.
Figura 1.1 Iconița aplicației Amazing România
Aplicația are un meniu principal, unde sunt listate principalele obiective turistice. La apăsarea
pe un item, se deschide o nouă fereastră ce conține poza respectivei destinații, distanța de la locația curentă până la aceasta, precum și detalii despre amplasare.
În bara de meniu secundar asociată destinației selectate, se pot regăsi informații despre restaurantele din apropierea obiectivului, cazare, activități în aer liber, cum ar fi ciclism și evenimente culturale: festivaluri de muzică, piese de teatru.
11
Figura 1.3 Detaliere obiectiv turistic
Figura 1.2 Listarea obiectivelor turistice
In meniul principal, dacă utilizatorul apasă pe , atunci va apărea pe hartă toate
obiectivele turistice raportat la locația curentă. La apăsarea pe iconița , vor apărea setările privind căutarea destinațiilor turistice în funcție de noutate, de distanța măsurată în Km față de locația curentă, precum și afișarea în ordine alfabetică a obiectivelor turistice.
Utilizatorul are posibilitatea să seteze distanțele, precum și tipul de destinație căutată: alpinism, ciclism, pârtii de schi, cascade și lacuri, fortificații, orașe.
Dacă utilizatorul apasă pe , acesta are posibilitatea să caute respectivul obiectiv turistic în funcție de denumire.
12
Figura 1.5 Setările aplicației
Figura 1.4 Indicarea pe hartă a locațiilor
România Uimitoare
România Uimitoare este o aplicație de tip ghid turistic care prezintă locații, afișate pe hartă sau împărțite pe regiuni, județe sau orașe mari, care pot fi vizitate în România. Ele sunt împărțite în patru categorii, și anume: Arhitectură și Muzee, Lăcașuri de cult, Trasee turistice, Natură și Sport. Aceasta este dezvoltată pentru Android.
Aplicația a avut peste 1.000 de instalări, ultima actualizare fiind la data de 05 august 2019. Aceasta necesită versiunea minimă de Android 4.4 (KitKat), versiunea actuală a aplicației fiind 2.6.0.
Ca dimensiune, aplicația este una robustă, ocupând un spațiu de memorie de 5,3 MB. Este cotată cu PEGI 3, putând fi folosită de orice categorie de vârstă, chiar și de minori.
Această aplicație solicită permisiunea de a avea acces la:
Locație
locația exactă (bazată pe GPS și rețea);
Stocare
citirea conținutului stocat pe cardul SD;
modificarea sau ștergerea conținutului aflat pe cardul SD;
13
Altele
acces fără restricții la rețea;
vizualizare conexiuni la rețea;
împiedică telefonul să intre în repaus;
vizualizare conexiuni Wi-Fi;
serviciul de facturare GooglePlay;
primirea datelor prin INTERNET.
Odată ce aplicația a fost instalată pe dispozitivul mobil, pe ecranul utilizatorului va apărea
iconița , ce conține numele aplicației.
În momentul deschiderii aplicației prima dată, se va cere acordul utilizatorului referitor la termenii și condițiile de confidențialitate, precum și la politica de confidențialitate. În cazul refuzului, aplicația se va închide.
Figura 1.7 Modalitățile de logare în aplicație
Figura 1.6 Politica de confidențialitate a aplicației România Uimitoare
14
Următorul pas constă în crearea unui cont în interiorul aplicației, existând și posibilitatea autentificării prin folosirea contului de Facebook sau al contului de email de la Google.
Prin accesarea paginii cu detaliile locației, se poate vedea cel puțin o fotografie reprezentativă, distanța până la destinația respectivă. Navigarea până la obiectiv se poate face folosind Google Maps. De asemenea, se poate adăuga o evaluare de la 1 la 5 stele.
Figura 1.9 Detalierea locației
Figura 1.8 Afișarea unui obiectiv turistic
Adăugarea unei locații se face prin deschiderea meniului, dând click pe pictograma din partea stângă a barei de sus, apoi se apasă pe butonul "Adăugați o locație" , după care utilizatorul va completa detaliile locației: cel puțin o fotografie, titlul, categoria și coordonatele. Se pot folosi locațiile curente sau se pot alege alte poziții cu ajutorul hărții Google Maps.
15
Figura 1.10 Adăugare locație
Aplicația este simplă, intuitivă, rapidă și are un design modern. Aceasta include și Favorite, unde se pot salva locațiile.
Spre deosebire de Amazing Romania, aplicația România Uimitoare nu pune la dispoziția utilizatorului o gamă variată de setări, față de care acesta să poată căuta o anumită destinație.
Aplicația Romania Uimitoare oferă anumite detalii care nu se vor regăsi in cadrul aplicației Amazing Romania cum ar fi : posibilitatea de a vizualiza intervalul orar în care obiectivul respectiv poate fi vizitat, posibilitatea utilizatorului de a îmbunătăți el însuși aplicația, prin adăugarea unor noi obiective turistice și posibilitatea de a–și exprima opinia personală prin evaluarea respectivei destinații pe o scară de la 1 la 5.
PocketGuide Audio Travel Guide
PocketGuide este o aplicație de tip ghid turistic care oferă utilizatorilor posibilitatea de a asculta informații despre obiectivele turistice din apropierea locației turistului. Aceasta este dezvoltată atât pentru Android, cât și pentru iOS.
Aplicația prezintă detalii pentru mai mult de 150 destinații turistice. Ea folosește GPS-ul și vocea pentru a oferi turiștilor un tur virtual.
Turiștii pot selecta limba dorită pentru a putea asculta informațiile și îndrumările despre cele mai apropiate restaurante și cafenele. Recomandările audio pot fi descărcate pe dispozitivul mobil și
16
pot fi accesate fără a fi necesară o conexiune la INTERNET.
Aplicația a avut peste 500.000 de instalări, ultima actualizare fiind la data de 25 aprilie 2019. Aceasta necesită versiunea minimă de Android 4.1 (Jelly Bean), versiunea actuală a aplicației fiind 4.6.10. Este cotată cu PEGI 3, putând fi folosită de orice categorie de vârstă, chiar și de minori.
Ca dimensiune, aplicația este extinsă, ocupând un spațiu de memorie de 39 MB.
Această aplicație solicită permisiunea de a avea acces la:
Locație
locație exactă (bazată pe GPS și rețea);
locație aproximativă (pe bază de rețea);
Telefon
citire stare și identitate telefon
Stocare
modificarea sau ștergerea conținutului aflat pe cardul SD
Microfon
înregistrare audio
Altele
control vibrații;
acces la rețea;
vizualizare conexiuni la rețea;
împiedică telefonul să intre în repaus;
vizualizare conexiuni Wi-Fi
Odată ce aplicația a fost instalată pe dispozitivul mobil, pe ecranul utilizatorului va
apărea iconița , ce conține denumirea acesteia.
În bara de meniu lateral se regăsesc opțiuni privind selectarea unui anumit oraș,
circuite personalizate, jurnal de călătorie, precum și setările.
Figura 1.11 Meniu aplicație PocketGuide
17
La apăsarea pe butonul MAP, se deschide o nouă fereastră, în cadrul căreia sunt indicate
pe harta Google Maps destinațiile turistice din proximitatea utilizatorului, iar în partea de jos a ferestrei sunt arătate distanțele până la obiectivele turistice. Dacă se selectează un anumit obiectiv, acesta poate vizualiza sau asculta informațiile.
Figura 1.13 Listarea obiectivelor turistice audio
Figura 1.12 Exemplu de obiectiv turistic
La apăsarea pe butonul PLACES, se deschide o nouă fereastră, din care utilizatorul poate afla
Informații despre restaurantele și cafenele din apropiere, precum și locațiile de divertisment.
18
Figura 1.14 Exemplu de locație din apropierea utilizatorului
1.2 Noțiuni generale
Instrumentele utilizate pentru dezvoltarea aplicației sunt: Android SDK, emulator, mediul de dezvoltare Android Studio.
SDK (Software Development Kit) reprezintă o colecție de instrumente care permite dezvoltarea aplicației pentru sistemul de operare Android.
Sistemul de operare este bazat pe nucleul Linux care oferă software-ul necesar pentru a coordona atât partea hardware, cât și aplicația de tip Ghid turistic.
Aplicația este scrisă în limbajul de programare Java, fiind un limbaj orientat spre obiecte, portabil, cu posibilități reduse de erori. De asemenea, oferă simplitate, neutralitate arhitecturală. Având în vedere că este un limbaj independent de platforma de lucru, aplicația rulează fără nicio modificare și fără a necesita compilarea ei pe sistemul de operare Linux.
Programul în Java este alcătuit dintr-o listă de definiții de clase și interfețe, în clase fiind definite datele și comportamentul obiectelor, iar în interfețe, serviciile.
Studiul calității este esențial pentru dezvoltarea aplicațiilor mobile.
Caracteristicile de calitate din punct de vedere tehnic vizează:
capacitatea aplicației de a funcționa fără a genera erori de prelucrare sau întreruperi
necontrolate;
19
furnizarea de rezultate corecte și complete atunci când informațiile introduse de
utilizator sunt complete și corecte, când opțiunile de prelucrare sunt alese pas cu pas, urmărind cu claritate un obiectiv;
acoperirea unei game largi de situații legate de problema de rezolvat, astfel încât
fiecare utilizator să se regăsească prin rezultatele oferite în variantele incluse pe tot parcursul interacțiunii
cu aplicația;
interfețele să fie cât mai sugestive, prin folosirea unui vocabular alcătuit din
cuvinte recunoscute și la alte aplicații, care să îl ghideze pe utilizator în așa fel încât, printr-un număr cât mai mic de pași, să obțină rezultatele dorite;
necesitatea de a funcționa 24/24, ceea ce presupune asigurarea unui nivel de
calitate, astfel încât în orice punct al prelucrărilor, să fie asigurată continuarea sau reluarea acestora;
respectarea unor principii specifice, astfel încât utilizatorul să nu reintroducă
aceleași date pe parcursul unei sesiuni de lucru, rezultatele intermediare obținute să nu fie memorate în fișiere sau în baze de date și să asigure prelucrarea de elemente comune altor aplicații, astfel încât clientul să se acomodeze rapid cu aplicația.
Din punct de vedere al aspectelor sociale, acestea se referă la o serie de caracteristici legate de:
păstrarea condițiilor de mediu, care este ușor de realizat, având în vedere că latura
poluantă a echipamentelor mobile este limitată. De altfel, aplicațiile mobile nu sunt construite nici direct și nici indirect, ca să determine poluarea mediului ambiant;
adaptarea structurii interfeței, a fluxurilor specifice interacțiunii la particularitățile
utilizatorilor, în așa fel încât activarea concluziilor să fie realizată cu factor de maximă necesitate;
nivelul de accesibilitate la noile versiuni ale aplicațiilor. La proiectarea și
dezvoltarea aplicațiilor mobile, procesele de mentenanță au un caracter continuu. Este indicat de utilizatorii să beneficieze de ultimele versiuni, pentru ca aceștia să beneficieze de toate opțiunile și facilitățile nou implementate. Efectele sociale aduse de ultimele versiuni, se caracterizează prin includerea de noi parametri, prin creșterea nivelului de agregare a criteriilor de selecție și prin modul de prezentare a variantelor;
Caracteristicile de calitate ale aplicațiilor mobile:
portabilitatea unei aplicații mobile se realizează fie folosind instrumente care
realizează conversii, fie emulatoare;
fiabilitatea este acea caracteristică care asigură funcționalitatea permanentă a
aplicației, permițând accesul la toate resursele necesare utilizatorului de a-și rezolva problemele.
generabilitatea este caracteristica de calitate care permite utilizatorilor să le
răspundă așteptărilor, chiar dacă aplicația mobilă are un caracter bine delimitat;
mentenabilitatea este caracteristica prin care aplicațiile mobile se mențin în
actualitate, prin prelucrarea tuturor elementelor de noutate;
ortogonalitatea este caracteristica de calitate care evidențiază cât de diferite sunt
anumite componente ce alcătuiesc aplicațiile mobile sau elementele din structura interfeței lor;
complexitatea face diferența, constând în aceea că există aplicații mobile cu o
diversitate redusă de prelucrări comparativ cu alte aplicații care conțin numeroase opțiuni, ceea ce permite utilizatorilor să își rezolve o gamă variată de probleme.
20
1.3 Crearea aplicației Android
Pentru a crea un proiect nou Android Studio, selectez din bara de meniu principală File>New>New Project, apoi selectez tipul de activitate necesar.
În cadrul acestui proiect, voi folosi o activitate de tipul Empty Activity.
Figura 1.15 Tipuri de activități
Tipurile de activități care pot fi adăugate în cadrul unui proiect, sunt următoarele:
No Activity – nu este adăugată nicio activitate;
Fullscreen Activity – activitate ce acoperă intergal ecranul;
Google Maps Activity – permite adăugarea unei hărți Google Maps în cadrul activității;
Login Activity – este adăugată o activitate care conține câmpurile: nume utilizator, parolă și butonul Sign In;
Master/Detail Flow – activitate care prezintă o listă de elemente împreună cu detaliile asociate acestora;
Navigation Drawer Activity – activitate care include un meniu de navigare în partea stângă a ecranului;
Settings Activity – activitate utilizată pentru modificarea opțiunilor de funcționare a aplicației;
Scrolling Activity – activitate care permite folosirea funcției scroll;
Empty Activity – activitate care afișează pe ecran textul Hello World.
Configurarea noului proiect se realizează completând, pe rând, următoarele câmpuri: nume, locația în care va fi salvat, limbajul de programare ales, precum și versiunea minimă de Android pe care va rula aplicația.
21
Figura 1.16 Stabilirea versiunii suportate de Android pentru noua aplicație
În figura de mai jos, se observă faptul că această aplicație va rula pe aproximativ 100% din dispozitivele mobile care au instalat sistemul Android.
Figura 1.17 Distribuția versiunilor de Android
22
1.4 Rularea aplicației
Aplicația poate rula folosind un dispozitiv mobil fizic sau un emulator În cadrul acestui proiect voi folosi un emulator integrat in Android SDK care redă specificatiile hardware si software ale unui telefon mobil.
Pentru crearea dispozitivului virtual (Android Virtual Device – AVD) Pixel 3 XL am dat click pe Tools > AVD Manager > Create Virtual Device.
Figura 1.18 Crearea unui dispozitiv mobil virtual
Acesta dispune de o diagonală de 6.3 inch iar rezoluția ecranului este de 1440 x 2960 pixeli.
Versiunea sistemului de operare este Android Q( 10.0) , API 29.
Figura 1.19 Specificațiile AVD
23
1.5 Prezentarea mediului de lucru Android
Una dintre funcțiile esențiale ale unui mediu integrat de dezvoltare o reprezintă posibilitatea de a naviga între diferitele ferestre ale unui proiect.
Bara principală de meniu Fila editorului Bara de unelte Fereastra editorului de text
Bara de stare
Butoane unelte Fereastra proiect
Figura 1.20 Mediul de lucru Android
Fereastra editorului de text – este ferestra situată în panoul central al unui IDE și oferă posibilitatea editării de text. În fereastra de editare pot fi deschise simultan una sau mai multe file. Toate celelalte ferestre din Android Studio sunt numite ferestre de unelte.
Fila editorului – navigarea între diferite file din Android Studio, se realizează utilizând Alt + săgeată dreapta | Ctrl + săgeată dreapta sau Alt + săgeata stângă | Ctrl + săgeată stânga. Închiderea ultimei file al unui panou face ca întregul panou să dispară.
Butoane unelte – atunci când o fereastră este deschisă, butonul corespunzător acesteia are culoarea gri închis. Pentru a vizualiza lista tuturor uneltelor disponibile, se apasă pe butonul View > Windows Tool din bara principală de meniu.
Fereastra proiect – permite vizualizarea proiectului din trei perspective, și anume: Proiect; Pachete și Android. În mod implicit, Android Studio va afișa proiectul în Android.
24
Bara principală de meniu – este bara din Android Studio, situată în partea de sus. Spre deodebire de celelate bare, aceasta nu poate fi ascunsă. Pentru majoritatea comenzilor disponibile în bara de meniu există comenzi rapide utilizând tastatura.
Bara de unelte – conține butoane pentru comenzile cel mai des utilizate, cum ar fi: copiere, lipire, rularea și depanarea aplicației,configurarea unu nou dispozitiv virtual, etc.
Bara de stare – oferă informații despre procesele curente
25
26
CAPITOLUL 2
Prezentarea generală a arhitecturii specifice sistemului
În cadrul acestui capitol, vor fi prezentate funcționalitățile aplicației.
2.1 Structura aplicației
În figura de mai jos este ilustrat meniul aplicației, conținând patru elemente: Lista obiective
turistice; Galerie; Google Maps, Facebook.
Figura 2.1 Navigarea între fragmentele aplicației Ghid turistic
Odată ce aplicația a fost instalată pe dispozitivul mobil, pe ecranul utilizatorului va apărea
iconița de mai jos, ce conține numele aplicației.
Figura 2.2 Iconița aplicației Ghid turistic România
27
Pe ecranul utilizatorului va apărea iconița de meniu , iar după apăsarea pe aceasta, se va deschide bara de meniu care conține elementele: Lista obiective turistice, Galerie, Google Maps, Facebook, așa cum rezultă în figura de mai jos:
Figura 2.3 Meniul aplicației
La apăsarea pictogramei , se deschide fereastra Fragment Lista, cu lista destinațiilor turistice pe care utilizatorul dorește să le viziteze: Cetatea Alba Carolina, Castelul Bran, Castelul Peleș, Brașov, Cluj-Napoca, Sibiu, Sighișoara, Mănăstirea Bârsana, Mănăstirea Neamț, Mocănița, Cetatea Râșnov, Cimitirul Vesel, Transfăgărășanul, Barajul Vidraru.
28
Figura 2.4 Lista obiectivelor turistice
La accesarea unui element din listă, se deschide o nouă fereastră, în care sunt prezentate detaliile despre respectiva destinație turistică.
La apăsarea următoarei pictograme , se deschide fereastra Galerie Fragment care conține imagini cu obiectivele turistce.
29
Figura 2.5 Galeria aplicației
La apăsarea pictogramei , se deschide fereastra Fragment Google Maps, care folosește indicatorul pentru a marca pe hartă locațiile destinațiilor turistice, însoțite de numele locației, precum și de o scurtă descriere a acesteia.
30
Figura 2.6 Indicarea locațiilor obiectivelor
La apăsarea pictogramei , se deschide fereastra Facebook Fragment care afișează o pagină de Facebook, unde utilizatorul poate completa emailul și parola contului de Facebook, în vederea accesării paginii Web dedicată aplicației Ghid turistic România.
31
Figura 2.7 Fereastra Facebook
2.2 Arhitectura aplicației
Android este o platformă software care permite dezvoltarea aplicațiilor mobile pe smartphone-uri echipate cu versiune modificată a sistemului de operare Linux. El este structurat în cinci secțiuni, cu mai multe nivele, astfel cum este prezentat în figura de mai jos.
32
Figura 2.8 Arhitectura Android
Nucleul Linux conține driver-ele pentru diferitele componente hardware.
Bibliotecile conțin codul care oferă principalele funcționalități ale sistemului de operare Android, făcând legătura între kernel Linux și aplicație.
Motorul Android rulează serviciile de platformă și aplicația, fiind reprezentat de:
Android Runtime este mașina virtuală Java și include un set de librării care susțin o mare parte din funcționalitatea pusă la dispoziție de limbajul de programare Java. Elementele .class sunt convertite de sistemul Android în fișiere .dex (Dalvik executable). Fisierele .dex sunt rulate de către mașina virtuală Dalvik.
Zygote este procesul care gestionează toate aplicațiile, fiind lansat în execuție odată cu sistemul de operare.
Framework oferă toate funcționalitățile necesare utilizării resurselor oferite de sistem. Este
structurat pe componente, în așa fel încât să permită ca funcționalitățile unei aplicații să poată fi utilizate de către alte aplicații.
Aplicațiile propriu-zise sunt create pentru a putea fi folosite de către utilizatorii finali.
Aplicația Android tip Ghid turistic folosește ca nucleu sistemul de operare Linux, care asigură interfața cu componentele hardware ale telefonului: ecran, tastatură, USB. Totodată, utilizează mediul integrat Android Studio, care necesită pachetul Android SDK pentru compilarea și rularea aplicației. Android SDK include un emulator Pixel 2 XL API 29 pentru rularea și testarea aplicației.
33
Mediul integrat Android Studio, fiind bazat pe Intellij IDEA, prezintă câteva particularități. Punctul de start este reprezentat de un proiect (rădăcina arborelui) care conține toate resursele, respectiv: fișiere de sursă, layout-uri, biblioteci.
La crearea proiectului, modulul implicit generat este app, iar la rădăcina proiectului se află fișierul AndroidManifest.xml
Fișierul Java cuprinde fișierele cod sursă Java, inclusiv codul de test JUnit., iar în directorul res sunt organizate toate resursele aplicației și conține subdirectoarele drawable, layout, menu, mipmap, values. Sistemul de compilare Gradle Scripts verifică dacă elementele necesare proiectului sunt disponibile.
În Android Studio, structura proiectului poate fi vizualizată din două perspective, și anume:
Gruparea logică a modulelor aplicației
Figura 2.9 Gruparea logică a modulelor aplicației
34
Structura de pe discul fizic al proiectului
Figura 2.10 Structura de pe discul fizic al proiectului
Aplicația conține mai multe componente, și anume:
– Contextul asigură accesul către funcționalitățile disponibile în Android, precum și accesul la informațiile legate de mediul în care rulează aplicația: resursele dispozitivului mobil, baze de date și fișiere, setările aplicației, servicii de sistem.
– Activitatea este formată dintr-un grup de task-uri ce îndeplinesc o sarcină unitară, relativ independentă de restul task-urilor și reprezintă elementele de interfață grafică asociată aplicației.
– Fragmentul este o componentă a unei activități care poate fi divizată. Fragmentele constituie părți dintr-o activitate ce se repetă sau sunt specifice unei anumite configurații în cadrul activității, asigurând flexibilitate în dezvoltarea aplicației.
35
– Serviciul înglobează procese mai complexe, permițând derularea unor acțiuni în fundal. Acesta nu prezintă interfață grafică.
– Intenția este mecanismul de comunicare între elementele unei aplicații Android: activități și servicii. Pentru activarea unor componente din cadrul aceleiași aplicații, se folosesc mesaje asincrone care sunt încapsulate în obiectele de tip intenție.
36
CAPITOLUL 3
Detalii implementare aplicație
3.1 Activități
Toate activitățile unei aplicații sunt declarate în fișierul AndroidManifest.xml. și au un ciclu de viață compus din mai multe stări. Astfel, o activitate se poate afla în una din următoarele stări:
activă – activitatea rulează și este în prim-plan;
inactivă – activitatea nu este vizibilă, dar se află în memorie;
întreruptă – activitatea este vizibilă, dar nu este activată;
terminată – activitatea a fost ștearsă din memorie.
Tranziția unei activități dintr-o stare în alta este gestionată prin supraîncărcarea funcțiilor cu apel invers (callback). Aceste metode sunt:
onCreate(Bundle) – apelată atunci când activitatea este creată. În cadrul acestei metode se
realizează:
încărcarea interfeței grafice printr-un apel al metodei setContentView(int), metodă
ce preia ca parametru referința către resursa de tip XML care conține interfața grafică. Referințele către componentele interfeței grafice sunt obținute prin apelarea metodei findViewById(int) al cărui parametru reprezintă referința către componenta respectivă;
realizarea unor conexiuni către alte modele de date;
crearea activității nu presupune și afișarea acesteia. Metoda onCreate() este întotdeauna urmată de metoda onStart().
onStart() – apelată anterior afișării activității pe ecran; poate fi urmată de metoda onPause()
sau onResume();
onResume() – apelată atunci când utilizatorul poate interacționa cu activitatea care devine
activă, fiind urmată întotdeauna de metoda onPause();
onPause() – apelată atunci când activitatea devine inactivă; activitatea poate fi vizibilă, dar
utilizatorul nu poate interacționa cu aceasta; poate fi urmată de metoda onResume() sau de metoda onStop(). Este singura metodă care este apelată în mod garantat înainte de a elibera memoria utilizată de activitate;
onStop() – apelată în momentul în care activitatea este ascunsă; poate fi urmată de metoda
onRestart(), dacă activitatea urmează să devină din nou vizibilă sau de metoda onDestroy() dacă activitatea urmează să fie terminată și eliminată din memorie;
onRestart() – apelată după ce activitatea revine în prim-plan; poate fi urmată de metoda
onStart();
onDestroy() – apelată la terminarea activității și înainte ca să fie eliminată din memorie.
Fiecare dintre metodele care gestionează ciclul de viață al activității trebuie să apeleze metoda din cadrul clasei părinte. Astfel, în cazul metodei onCreate() este necesar ca apelul să fie realizat la începutul metodei onCreate() din clasa derivată. Aceste metode sunt invocate automat de către sistemul de operare Android. Unele dintre metodele care gestionează ciclul de viață al unei activități primesc ca parametru un obiect de tip Bundle, utilizat pentru transmiterea anumitor valori specifice stării unei activități.
37
3.1.1 AndroidManifest.xml
Fișierele Extensible Markup Language (XML) sunt fișiere text pentru descriere date. Standardul prin care acestea descriu datele este stabilit de către Consorțiul Web W3C și este independent atât de software, cât și de hardware.
Metalimbajul XML este derivat din HTML și prezintă o serie de avantaje, precum: extensibilitatea, validitatea, independența și simplitatea.
Proprietățile aplicației sunt specificate în format XML.
În cadrul fișierului AndroidManifest.xml se regăsesc setările la nivelul aplicației, descrierea activităților și serviciilor, a permisiunilor, fiind definit pachetul unde se află sursele, versiunea codului și denumirea versiunii.
AndroidManifest.xml este un fișier XML, cu prima componentă a aplicației <manifest>, în care sunt incluse etichetele <uses-permission/>; <application/> .
Elementul <manifest> include domeniul de nume Android și atributul package corespunzător numelui pachetului aplicației:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ghidturistic">
Eticheta <uses-permission/> specifică permisiunile necesare aplicației.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
Pentru ca aplicația să acceseze locația utilizatorului, trebuie solicitată permisiunea în funcție de nivelul de precizie:
ACCESS_COARSE_LOCATION – Permite API-ului să folosească date WiFi sau rețele
de telefonie mobilă pentru a determina locația dispozitivului;
ACCESS_FINE_LOCATION – Permite API-ului să determine o locație cât mai precisă
folosind Sistemul Global de Poziționare (GPS)
Permisiunea INTERNET este adăugată pentru a accesa conținutul unei pagini Web, aplicația neputând fi instalată decât dacă utilizatorul acceptă solicitarea de a permite folosirea conexiunii la Internet.
Eticheta <application/> cuprinde toate elementele necesare pentru descrierea aplicației Android.
Atributele asociate activităților sunt:
android:allowBackup=restabilire date;
android:icon=pictograma asociată activității;
android:label=textul afișat împreună cu pictograma;
android:theme=tema specificată.
38
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
La executarea aplicației, este lansată activitatea principală în cadrul fișierului <manifest>, caracterizată prin următoarele proprietăți: acțiunea are valoarea android.intent.action.MAIN, întrucât această activitate va fi lansată în momentul executării aplicației, iar categoria are valoarea android.intent.category.LAUNCHER, deoarece activitatea va putea fi lansată de către utilizator. Este specificat și un filtru de intenții în cadrul elementului <intent-filter>, indicând modalitatea de accesare a componentel aplicației. Acest filtru este necesar pentru ca activitatea să poată fi rulată folosind intenții implicite.
<activity android:name=”.MainActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
Cheia prin intermediul căreia se semnează aplicația și care permite utilizarea hărților Google este introdusă în fișierul AndroidManifest.xml printr-o etichetă de tip <meta-data inclusă în eticheta <aplication>.
<meta-data android:name=”com.google.android.geo.API_KEY”
android:value=”AIzaSyBEJMSMIf8N0MrWHl-yTFtSxn5TnvphQjo”/>
Aceasta are două atribute:
– android:name care are asociată valoarea =”com.google.android.geo.API_KEY”
– android:value căruia i se va atribui cheia generată, folosind un cont google
3.1.2 MainActivity.java
Fișierul MainActivity.java include codul Java propriu-zis.
Clasa MainActivity extinde clasa AppCompatActivity, care la rândul ei, extinde clasa FragmentActivity.
Se declară un vector de tip string, în care se enumeră toate elementele listei.
public String[] item = {" Alba Iulia","Mănăstirea Bârsana","Castelul Bran","Brașov", "Castelul Peleș","Cluj-Napoca","Mănăstirea Neamț","Mocănița","Cetatea Râșnov","Cimitirul Vesel","Sibiu",
"Sighișoara","Transfăgărășan","Barajul Vidraru”};
Suprascrierea metodei onCreate() apelează metoda părinte. Pentru fiecare activitate, se descrie interfața grafică în cadrul unui fișier .xml, încărcat manual, în cadrul metodei onCreate(), printr-un apel al metodei setContentView(). Acest fișier este plasat în directorul res/layout și conține referințe
39
către toate obiectele care vor fi afișate în cadrul ferestrei.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupNavigation(); }
Metoda onNavigationItemSelected se apelează atunci când un element din listă este selectat. Ea returnează adevărat sau fals.
Structura switch(id) selectează unul din cele 4 cazuri, în funcție de valoarea id-lui și execută instrucțiunea specifică acelui caz, respectiv navighează cu ajutorul metodei navigate() către unul din cele 4 fragmente.
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
menuItem.setChecked(true);
drawerLayout.closeDrawers();
int id = menuItem.getItemId();
switch (id) {
case R.id.listaObiective:
navController.navigate(R.id.listaFragment);
break;
case R.id.galerie:
navController.navigate(R.id.galerieFragment);
break;
case R.id.googleMaps:
navController.navigate(R.id.googleMapsFragment);
break;
case R.id.facebook:
navController.navigate(R.id.facebookFragment);
break; }
return true; }
Apelarea metodei navigatetoDetailView care primește ca parametru poziția și care face trimiterea către fragmentul detailFragment.
public void navigatetoDetailView(int position){
Bundle bundle = new Bundle();
bundle.putInt("position",position);
navController.navigate(R.id.detailFragment,bundle);
}
Fragmentul detailFragment se regasește in fisierul nav_graph.xml din directorul navigation și este utilizat pentru a afișa detaliile din lista cu obiectivele turistice.
40
<fragment
android:id="@+id/detailFragment"
android:name="com.example.ghidturistic.DetailFragment"
android:label="Detail Fragment"
tools:layout="@layout/fragment_detail" />
3.1.3 activity_main.xml
Pentru construcția machetei ferestrei se poate utiliza atât modul ”Design” cât și modul „Text”. Orice element ce urmează să fie pus pe ecran, trebuie să fie conținut într-un container de tip layout care să asigure modul de afișare al acestuia raportat la celelalte elemente.
În vederea definirii unui identificator care să permită recunoașterea componentelor, se utilizează proprietatea android:id. În lipsa identificatorului, se folosește următoarea construcție: android:id="@+id/drawer_layout".
Fiecare componentă vizuală include două proprietăți:
android:layout_width, corespunzătoare lățimii componentei;
android:layout_height, corespunzătoare înălțimii componentei, care stabilește dimensiunea unui control, cu următoarele valori:
wrap_content – dimensiunea controlului dată de conținutul său;
match_parent – controlul ce ocupă tot spațiul pus la dispoziție de containerul părinte.
În afara celor două proprietăți, mai există și un alt atribut pentru componentele vizuale, cum ar fi layout_gravity, care aliniază controlul în container.
Containerul NavigationView are rolul de a permite vizualizarea elementelor din meniul de navigare.
<androidx.drawerlayout.widget.DrawerLayout este un container care permite vizualizarea informațiilor din fereastra aflată pe marginea verticală a containerului.
Proprietatea tools:context=".MainActivity"> specifică faptul că acestui layout îi este asociată clasa MainActivity
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:id="@+id/drawer_layout" specifică faptul că se creează un nume de identificare pentru containerul DrawerLayot.
Containerul DrawerLayout conține și o componentă de tip <LinearLayout, care la rândul său are definită o componentă <fragment definită în mod static în fișierul xml.
Prin folosirea containerului LinearLayout, componentele sunt adăugate una după cealaltă, pe orizontală sau pe verticală.
41
Proprietatea android:orientation,cu valorile horizontal sau vertical controlează modul de aranjare a componentelor.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
</LinearLayout>
NavigationView este o componentă de tip View, ce primește ca referință un fișier din directorul menu.
app:headerLayout este referința către un fișier de tip header.
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/ghid_turistic_header"
app:menu="@menu/ghid_turistic_menu" />
3.2 Fragmente
Fragmentele reprezintă elemente modulare reutilizabile ale unei activități, care pot fi adăugate sau eliminate în mod dinamic în timp ce activitatea se execută, având un ciclu de viață distinct și răspunzând la propriile evenimente.
Pentru ca un fragment să poată fi utilizat este necesar ca el să fie inclus în cadrul unei activități. Prin urmare, ciclul de viață al acestuia este influențat de ciclul de viață al activității gazdă, astfel încât
atunci când activitatea este întreruptă, același lucru se întâmplă și cu fragmentele componente.
Fragmentele se pot afla în una din următoarele stări:
Activ – activitatea care include fragmentul rulează, fragmentul fiind vizibil;
Întrerupt – activitatea căreia îi este asociat fragmentul este vizibilă, dar nu este activată;
Oprit – fragmentul nu este vizibil; activitatea asociată a fost terminată sau fragmentul a
fost eliminat, menținându-se însă în stiva de navigare. Deși un fragment de acest tip încă există, el nu mai este vizibil și va fi eliminat odată cu încheierea activității.
O componentă de tip Fragment este similară ca și structură cu una de tip Activity, în cadrul lor regăsindu-se aceleași metode onCreate, onStart(), onPause(), onStop(), însă au și câteva metode specifice.
42
Astfel cum reiese din figura de mai jos, obiectele grafice ale fragmentului sunt adăugate la cele aparținând activității în cadrul metodei onCreateView() care este executată la crearea interfeței grafice asociate fragmentului.
Figura 3.1 Obiectivele grafice ale fragmentului
Diferența dintre ciclul de viață al activităților și cel al fragmentelor are legătură cu modul în care răspund la acționarea butonului Back. Sub acest aspect, activitățile sunt plasate automat într-o stivă gestionată de către sistemul de operare, în vreme ce fragmentele pot fi incluse în mod explicit într-o stivă creată la nivelul activității care găzduiește fragmentul prin apelul metodei addToBackStack ().
Avantajul folosirii fragmentelor constă în faptul că pot fi cu ușurință adăugate, eliminate sau modificate ca răspuns la acțiunile utilizatorului.
3.2.1 ListaFragment.java
Clasa ListFragment extinde clasa de bază Fragment și reprezintă un fragment care afișează o listă de elemente din care utilizatorul poate selecta una sau mai multe intrări.
public class ListaFragment extends ListFragment
Accesul la o componentă vizuală definită în cadrul unui fragment, se realizează cu metoda onCreateView() din clasa asociată fragmentului și se apelează metoda findViewById() cu identificatorul componentei. Metoda este apelată de obiectul de tip View instanțiat din resurse.
Clasa ArrayAdapter se bazează pe colecții de date simple, cum ar fi Array sau ArrayList. Inițializarea unui adaptor de tip ArrayAdapter se bazează pe context, identificatorul resursei asociat unui element din listă și lista de șiruri.
Adaptorul de tip ArrayAdapter include o referință la lista de obiecte care vor fi afișate și acesta pune la dispoziție metode pentru adăugarea, inserarea, ștergerea și golirea elementelor din listă.
43
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_lista, container, false);
listView = (ListView) view.findViewById(android.R.id.list);
item = ((MainActivity) getActivity()).item;
arrayAdapter = new ArrayAdapter<String>(inflater.getContext(),
android.R.layout.simple_list_item_1, item);
setListAdapter(arrayAdapter);
return view;
}
Cuvântul cheie extends este utilizat pentru a implementa mecanisme de moștenire Java.
Metoda onListItemClick() este apelată în mod automat, de fiecare dată când se execută un click asupra unui element din listă. Aceasta primește ca parametrii lista, elementul din listă împreună cu poziția sa și id-ul.
Pentru a adăuga o acțiune metodei onListItemClick(), aceasta trebuie suprascrisă folosind instrucțiunea @Override
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
((MainActivity) getActivity()).navigatetoDetailView(position);
}
Funcția getActivity returnează activitatea MainActivity. În cazul în care această activitate nu există, funcția va returna null.
3.2.2 fragment_lista.xml
Interfața grafică asociată clasei ListaFragment este alcătuită dintr-un container ConstraintLayout și o componentă vizuală de tip <ListView , care conține o listă ce poate fi parcursă.
Există două moduri de a adăuga un fragment: fie dinamic folosind Java, fie direct în fișierul XML al activității.
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent">
3.3 DetailFragment.java
Structura switch(p) {case} selectează în funcție de valoarea poziției, pe unul dintre cazurile posibile.
Structura TextView textView = (TextView) detailsView.findViewById(R.id.textView)
instanțiază clasa TextView și se creează obiectul textView.
Pentru afișarea textului se utilizează metoda setText() care primește ca parametru o resursă de tip string.
44
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View detailsView = inflater.inflate(R.layout.fragment_detail, container, false);
TextView textView = (TextView) detailsView.findViewById(R.id.textView);
Bundle bundle = getArguments();
int p = bundle.getInt("position");
switch (p) {
case 0: textView.setText(getResources().getString(R.string.poz)); break;
case 1: textView.setText(getResources().getString(R.string.poz1)); break;
case 2: textView.setText(getResources().getString(R.string.poz2)); break;
case 3: textView.setText(getResources().getString(R.string.poz3)); break;
case 4: textView.setText(getResources().getString(R.string.poz4)); break;
case 5: textView.setText(getResources().getString(R.string.poz5)); break;
case 6: textView.setText(getResources().getString(R.string.poz6)); break;
case 7: textView.setText(getResources().getString(R.string.poz7)); break;
case 8: textView.setText(getResources().getString(R.string.poz8)); break;
case 9: textView.setText(getResources().getString(R.string.poz9)); break;
case 10: textView.setText(getResources().getString(R.string.poz10)); break;
case 11: textView.setText(getResources().getString(R.string.poz11)); break;
case 12: textView.setText(getResources().getString(R.string.poz12)); break;
case 13: textView.setText(getResources().getString(R.string.poz13)); break;
}
return detailsView;
}
fagment_detail.xml
În cazul continerului FrameLayout, componentele sunt poziționate implicit la aceleași coordonate. Containerul este proiectat să afișeze un singur control, prin adăugarea altor controale, acestea se vor suprapune, componentele fiind poziționate pe axa z ca într-o stivă.
<FrameLayout 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"
tools:context=".DetailFragment">
În fișierul fragment_default.xml, pe lângă proprietățile componentelor vizuale, se introduce și atributul background, care setează imaginea de fund
android:background="@drawable/background
3.4 GoogleMapsfragment.java
În cadrul hărților Google pot fi adăugate marcaje pentru a semnala anumite locații. Clasa corespunzătoare acestora se numește MarkerOptions.
45
Clasa pune la dispoziția dezvoltatorului proprietăți pentru modificarea titlului (title), care va fi afișat la apăsarea pe marcaj a descrierii (snippet), a locației (position) în care va fi afișat sau a pictogramei (icon), atunci când se dorește altă pictogramă decât cea predefinită. Aceste marcaje vor fi afișate ulterior creării pe harta curentă, prin apelul metodei addMarker(), care va primi drept parametru, instanța clasei MarkerOptions anterior creată.
Metoda returnează un obiect de tip Marker, prin intermediul căruia marcajul abia adăugat, poate fi accesat ulterior. De această instanță va fi nevoie și atunci când se dorește ștergerea acestuia prin apelul metodei remove().
Clasa LatLng primește ca parametrii latitudinea și longitudinea exprimate în grade.
LatLng albaCarolina = new LatLng(46.0674191,23.5664645);
googleMap.addMarker(new MarkerOptions().position(albaCarolina)
.title("Cetatea Alba Carolina").snippet("Cetate Alba Iulia"));
Metoda onMapReady() se apelează dacă harta este pregătită pentru utilizare. Dacă utilizatorul nu are instalat Serviciul Google Play, acesta va trebui întâi să îl instaleze, apoi se va apela metoda onMapReady().
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
Un obiect de tip GoogleMap nu poate fi instanțiat direct, ci doar indirect prin apelul metodei getMapAsync().
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
SupportMapFragment mapFragment = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
3.5 GalerieFragment.java
Se instanțiază clasa ImageView și se creează obiectul alba. Modificarea dinamică a imaginilor se realizează pe baza tipului resursei. Pentru resursele incluse în pachetul aplicației se utilizează funcția setImageResource().
ImageView alba= (ImageView)vw.findViewById(R.id.alba);
alba.setImageResource(R.drawable.cetate_alba);
3.5.1 fragment_galerie.xml
În fișierul fragment_galerie este definit un NestedScrollView, care conține un container de tip GridLayot, înălțimea și lățimea acestuia fiind date de dimensiunile componentei NestedScrollView.
46
</GridLayout>
</androidx.core.widget.NestedScrollView>
Containerul are în alcătuirea sa 14 elemente de tip Imageview, fiecare dintre ele având definit un id diferit și atribuită o altă resursă din folder-ul drawable.
Înălțimea și lățimea fiecărei componente de tip ImageView este de 200 dp (pixel independent de rezoluție).
Interfața grafică se bazează pe clase derivate din clasa View.
Containerul GridLayot oferă un control mai bun pentru poziționarea componentelor față de containerul TableLayout. Pe cale de consecință, se poate specifica numărul de coloane prin proprietatea android:columnCount.
<GridLayout
android:id="@+id/GridLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2"
android:rowCount="9">
3.6 FacebookFragment.java
Pentru afișarea conținutului HTML și a paginilor Web în cadrul activităților, se utilizează controlul WebView, derivat din clasa View. Pentru accesul la rețea este necesară includerea permisiunii android.permission.INTERNET în fișierul AndroidManihfest.xml.
Adresa de unde va fi preluat conținutul este inițializată cu metoda loadUrl().
Proprietățile navigatorului, precum agentul, dimensiunea textului, suportul pentru JavaScript, salvarea parolelor și datelor din formulare, încărcarea automată a imaginilor, accesul la coordonatele geografice,etc. sunt controlate prin intermediul unui obiect de tipul WebSettings obținut prin apelul metodei getSettings(). Controlul suportă JavaScript, dar acesta nu este implicit activat. Pentru activare, se va apela metoda setJavaScriptEnabled() din clasa WebSettings.
WebView webView =(WebView)view.findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://www.facebook.com/");
3.6.1 fragment_facebook.xml
În cadrul interfeței grafice este definită o componentă de tip WebView, ce are ca atribut id-ul
webView, iar dimensiunile acesteia sunt aceleași cu dimensiunile containerului.
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
47
3.7 nav_graph.xml
Dacă un fragment are propria interfață grafică, acest aspect se specifică fie dinamic, fie direct în fișierul XML al activității, cu ajutorul cuvântului “fragment”.
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/defaultFragment">
<fragment
android:id="@+id/listaFragment"
android:name="com.example.ghidturistic.ListaFragment"
android:label="Fragment Lista"
tools:layout="@layout/fragment_lista"
/>
3.8 strings.xml
Valorile constante se află în fișierele XML din directorul values. La rândul său, directorul include valori constante stocate în fișiere specifice pentru șiruri de caractere, culori, dimensiuni, stiluri.
Celelalte resurse care nu definesc valori constante sunt definite în subdirectoarele dedicate din directorul res.
Legătura dintre fișierele de resurse și codul sursă al aplicației se realizează printr-o clasă specială R, generată pe baza resurselor incluse în proiect. Clasa R include subclase aferente resurselor existente în directorul res.
Resursele predefinite sunt disponibile în clasa android.R.
Referirea resurselor se realizează prin construcții de forma @tip_resursa/nume_resursa.
3.9 ghid _turistic_menu.xml
Pentru definirea meniului, se creează un fișier xml în directorul res.
Un element de tip <menu> conține unul sau mai multe elemente de tip <item>, cu următoarele atribute:
android:id – identificatorul opțiunii de meniu;
android:title – eticheta opțiunii;
android:icon – pictograma asociată opțiunii de meniu
Fiecare dintre itemii meniului au un id diferit și câte o imagine atribuită din folderul drawable.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/listaObiective"
android:title="Lista obiective turistice"
android:icon="@drawable/ic_lista_obiective"/>
48
3.10 build.gradle
Android Studio folosește un mecanism automat pentru construirea aplicației Android, denumit Gradle, responsabil cu aducerea bibliotecilor, cu definirea proprietăților aplicației Android, cu compilarea și împachetarea tuturor resurselor folosite pentru rularea și instalarea aplicației.
Un fișier de configurare Gradle conține două secțiuni:
android – conține proprietățile aplicației
-compileSdkVersion – reprezintă versiunea de SDK care va fi utilizată pentru compilarea proiectului
-buildToolsVersion – reprezintă versiunea de Android SDK Build Tools folosită pentru construirea fișierului care va fi instalat pe dispozitivul mobil
-defaultConfig – conține diferite configurări
-applicationId – pachetul care identifică în mod unic aplicația Android
-midSdkVersion – platforma minimă pe care se garantează că aplicația va rula;
-targetSdkVersion-platforma maximă la care se garantează că aplicația va rula;
-versionCode – versiunea curentă a aplicației
-versionName – versiunea curentă a aplicației, afișată către utilizator
-testInstrumentationRunner – biblioteca folosită pentru testele aplicației
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.ghidturistic"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
dependencies – reprezintă bibliotecile de care depinde aplicația pentru a putea fi rulată
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
}
49
-testImplementation și androidTestImplementation – indică pachete care conțin biblioteci pentru teste unitare
Bibliotecile "android.arch.navigation:navigation-fragment:$nav_version" și
"android.arch.navigation:navigation-ui:$nav_version" sunt utile în cazul navigației între diferite fragmente.
50
CAPITOLUL 4
Teste și analiza rezultatelor obținute
Testarea unei aplicații reprezintă etapa cea mai complexă din ciclul de dezvoltare software, deoarece se are în vedere validarea funcționalităților noi și a celor care au fost dezvoltate anterior. Aplicațiile dezvoltate în Android urmează aceleași principii ca toate aplicațiile software.
Testele care se scriu pentru o aplicație sunt împărțite în trei categorii, după impactul pe care îl au asupra codului:
teste mici („small tests”);
teste medii („medium tests”);
teste mari („large tests”)
Aplicația dispune de o interfață intuitivă ce permite utilizatorului să selecteze din meniu o
anumită opțiune.
Îmbunătățirile ce pot fi aduse aplicației constau în:
adăugarea în serviciul Google Maps a locației utilizatorului și măsurarea distanței în Km până la unul din obiectivele turistice selectate;
adăugarea unui buton de căutare în fereastra listei, ce permite găsirea unui element din listă în funcție de nume;
personalizarea marker-ului ce indică locația unui obiectiv turistic;
posibilitatea de a selecta o anumită imagine din Galerie și navigarea între diferitele imagini din cadrul Galeriei;
extinderea obiectivelor turistice accesibile utilizatorului.
51
52
CONCLUZII
Prezenta lucrare are rolul de a oferi turiștilor posibilitatea de a vizualiza detalii despre principalele obiective turistice din țara noastră, cum ar fi: Cetatea Alba Carolina, Castelul Bran, Castelul Peleș, Brașov, Cluj-Napoca, Sibiu, Sighișoara, Mănăstirea Bârsana, Mănăstirea Neamț, Mocănița, Cetatea Râșnov, Cimitirul Vesel, Transfăgărășanul, Barajul Vidraru.
Funcționarea aplicației permite utilizatorului să acceseze resursele acesteia din orice loc, în orice moment. Corectitudinea prelucrărilor este astfel percepută, încât utilizatorul află cu exactitate locația. Prin urmare, nivelul de corectitudine este în așa fel definit, încât se vede cu claritate că succesiunea de opțiuni care a dus la un anumit rezultat, aparține exclusiv utilizatorului.
Caracteristicile economice avute în vedere, se referă la:
necesarul de resurse pentru a lansa în execuție aplicația, ceea ce înseamnă că
trebuie avută în vedere capacitatea de memorare, dar și varietatea sistemului de operare;
avantajele aduse de realizarea unei documentări legate de poziționarea unui
obiectiv vizează eliminarea cheltuielilor pentru deplasări și pentru efectuarea de variante construite de către utilizator;
schimbarea structurii fondului de timp la nivelul utilizatorului în condițiile creșterii
încrederii în fluxurile construite după implementarea aplicației. Împrejurarea că pe telefonul mobil este încercată o aplicație care permite rezolvarea unor probleme, precum și faptul că utilizatorul are încredere în calitatea soluției oferite, conduce la lărgirea gamei de probleme care să fie soluționate direct de pe telefonul mobil.
Aplicația ar putea fi îmbunătățită prin introducerea locației curente a utilizatorului și calcularea distanței până la unul din obiectivele turistice selectate.
Consider că Android pune la dispoziție instrumentele necesare pentru crearea unor aplicații care să ofere niveluri de siguranță și exigențe ridicate în ce privește rezolvarea unor probleme. Astfel, se observă efectele pozitive asupra relațiilor sociale și încântarea persoanelor, atunci când rezolvarea problemelor este determinată de folosirea unei aplicații mobile.
53
54
BIBLIOGRAFIE
Paul Pocatilu, Ion Ivan, Adrian Vișoiu, Felician Alecu, Alin Zamfiroiu, Bogdan Iancu
Programarea aplicațiilor Android, Ed. ASE
Liviu Șerbănescu, Dezvoltarea Aplicațiilor Pentru Dispozitivele Mobile, Universitatea
Hyperion
https://informatica.hyperion.ro/wp-content/uploads/2017/11/DEZVOLTAREA-APLICATIILOR-PENTRU-DISPOZITIVELE-MOBILE.pdf accesat la data de 01.08.2019
Lucrarea 5 Aplicații Android (în format electronic)Ed la adresa
http://ares.utcluj.ro/cm_2018_files/l5.pd, accesat la data de 05.08.2019
Google Play “Amazing Romania” în
https://play.google.com/store/apps/details?id=net.amazingromania.starter&hl=en, accesat
la data de 12.08.2019
Google Play “ România Uimitoare” în
https://play.google.com/store/apps/details?id=com.andrei.romaniauimitoare&fbclid=IwAR0AzAqSweVtwAQTlC9kfxcpAU48sHeZqIPgIKLcCsXeH8ad-EU24O6Hh7g, accesat la data de 12.08.2019
Google Play “PocketGuide Audio Travel Guide” în
https://play.google.com/store/apps/details?id=hu.pocketguide, accesat la data de 12.08.2019
7. Adam Gerber | Clifton Craig, Learn Android Studio , Editura Apress
http://barbra-coco.dyndns.org/student/learning_android_studio.pdf accesat la data
de 13.06.2020
55
Anexa 1 – AndroidManifest.xml
56
Anexa 2 – MainActivity.java
57
58
Anexa 3 – MainActivity.xml
59
Anexa 4 – ListaFragment.java
60
Anexa 5 – Lista_fragment.xml
61
Anexa 6 – DetailFragment.java
62
Anexa 7 – Detail_fagment.xml
63
Anexa 8 – GoogleMapsfragment.java
64
65
Anexa 9 – fragment_google_maps.xml
66
Anexa 10 – GalerieFragment.java
67
Anexa 11 – fragment_galerie.xml
68
Anexa 12 – FacebookFragment.java
69
Anexa 13 – fragment_facebook.xml
70
Anexa 14 – DefaultFragment.java
71
Anexa 15 – fragment_default.xml
72
Anexa 16 – Nav_graph.xml
73
Anexa 17 – String.xml
74
75
76
77
78
Anexa 18 – ghid _turistic_menu.xml
79
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: Aplicație Android tip Ghid turistic [305967] (ID: 305967)
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.
