Aplicație Android tip Ghid turistic [617172]

Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației

Aplicație Android tip Ghid turistic

Proiect de diplomă

prezentat ca cerință parțială pentru obținerea titlului de

Inginer în domeniul Electronică și Telecomunicații

Programul de studii de licență TST

Conducător științific Absolvent: [anonimizat]. Eduard – Cristian POPOVICI Florina Ioana GUȚU

2020

C U P R I N S

Lista figurilor …………………………………………………………………………………………………………….. ………..9

Lista acronimelor………………………………………………………………………………………. ……………………… 11

Introducere …………………………………………………………………………………………………………….. …………13

Capitolul 1 – Noțiuni teoretice referitoare la sistemul de operare Android ………………………….. ……….15
.
1.1. Exemple de aplicații Android utilizate pentru identificarea obiectivelor turistice ………15

1.2. Noțiuni generale …………………………………………………………………………………………. ……..23

1.3. Crearea aplicației Android ……………………………………………………………………………… ….25

1.4. Rularea aplica ției………………………………………………………………………………………………. 27

1.5. Prezentarea mediului de lucru Android ……………………………………………………………….. .28

Capitolul 2 – Prezentarea generală a arhitecturii specific e sistemul ui………………………………… ……..31

2.1 Structura aplicației………………………………………………………………………………………. …….. 31

2.2 Arhitectura aplicației ………………………………………………………………………………….. ……..36

Capitolul 3 – Detalii i mplementare aplicație …………………………………………………………………………. .41

3.1 Activități…………………………………………………………………………………. …………………. ……41

3.1.1 AndroidManifest.xml …………………………………………………………………….. ……..42

3.1.2 MainActivity.java ………………………………….. …………………………………….. ……… 43

3.1.3 activity_main.xml ……………………………………………………………………………. …….45

3.2 Fragment e………………………………………………………………………………………………….. …….. 46

3.2.1 ListaFragment.java …………………………………………………………………………. …….47

3.2.2 fragment_lista.xml ………………………………………………………………………… …….48

3.3. DetailFragment.java …………………………………………………………………………………….. …….48

3.3.1 fragment_ detail .xml…………………………………………………………………………. ……49

3.4 GoogleMaps Fragment.java ………………………………………………………………………………. ….49

3.5 GalerieFragment.java …………………………………………………………………………………….. ……50

3.5.1 fragment_galerie.xml ………………………………………………….. ……………………. …..50

3.6 FacebookFragment.java …………………………………………………………………………………. ……51

3.6.1 fragment_facebook.xml ……………………………………………………………………. ……51

3.7 nav_graph.xml ……………………………………………………………………………………………… ……52

3.8 strings.xml ……………………………………………………………………………………………… …………52

3.9 ghid _turistic_menu.xml ………………………………………………………………………………… ……52

3.10 build.gradle ……………………………………………………………………………… …………………. …..53

Capitolul 4 – Teste și analiza rezultatelor obținute ……………………………………………………………… …55

Concluzii…………………………………………………………………………………………………….. ………………. ……57

Bibliografie………………………………………………………………………………………………….. ……………… ……59

Anexa 1…………………………………………………………………………………… …………………………………….. …60

Anexa 2………………………………………………………………………………………………………. ………………….. ..61

Anexa 3…………………………………….. ………………………………………………………………………………….. ….63

Anexa 4………………………………………………………………………………………………………. ……………….. …..64

Anexa 5………………………………………………………………………………………………………. ………………… ….65

Anexa 6…………………………………………………………………………………. ……………………………………… ….66

Anexa 7………………………………………………………………………………………………………. ………………… ….67

Anexa 8…………………………………… ……………………………………………………………………………………. ….68

Anexa 9………………………………………………………………………………………………………. ………………… ….70

Anexa 10……………………………………………………………………………………………………… …………………. ..71

Anexa 11……………………………………………………………………………….. …………………………………………. 72

Anexa 12…………………………………………………………………………………………………………… ……………… 74

Anexa 13……………………………………………………………………………………….. …………………………………. 75

Anexa 14…………………………………………………………………………………………………………… ……………… 76

Anexa 15……………………………………………………………………………………….. …………………………………. 77

Anexa 16……………………………………………………………………………………………………… …………………… 78

Anexa 17…………………………………………… ……………………………………………………………………………… 79

Anexa 18……………………………………………………………………………………………………… …………………… 84

Lista figurilor

Figura 1.1 Iconița aplicației Amazing România …………………………………………………………… ………… 15
Figura 1.2 Listarea obiectivelor turistice……………………………………………………………………… ……….. 16
Figura 1.3 Detaliere obiectiv t uristic…………………………………………………………………………… ……….. 16
Figura 1.4 Indicarea pe hartă a locațiilor……………………………………………………………………. ……….. 17
Figura 1. 5 Setările aplicației………………………………………………………………………………………. ……….. 17
Figura 1.6 Politica de confidențialitate a aplicației România Uimitoare…………………………… ………… 18
Figura 1.7 Modalitățile de logare în aplicație……………………………………………………………….. ……….. 18
Figura 1.8 Afișarea unui obiectiv turistic…………………………………………………………………. ……………. 19
Figura 1.9 Detalierea locației…………………………………………………………………………………….. ……….. 19
Figura 1.10 Adăugare locație …………………………………………………………………………………….. ……….. 20
Figura 1.11 Meniu aplicație PocketGuide …………………………………………………………………… ……….. .21
Figura 1. 12 Exemplu de obiectiv turistic ………………………………………………………………….. …………. ..22
Figura 1.13 Listarea obiectivelor turistice audio………………………………………………………….. ……….. ..22
Figura 1.14 Exemplu de locație din apropierea utilizatorului………………………………………… …………. 23
Figura 1.15 Tipuri de activități…………………………………………………………………………………. …………. .25
Figura 1.16 Stabilirea versiunii suportate de Android pentru noua aplicație………………… ……………. .26
Figura 1.17 Distribuția versiunilor de Android…………………………………………………………. …………… 26
Figura 1.18 Crearea unui dispozitiv mobil virtual………………………………………………… ………………… 27
Figura 1.1 9 Specificațiile AVD ………………………………………………………………………………………. …….27
Figura 1. 20 Mediul de lucru Android ……………………………………………………… ………………………… …..28
Figura 2. 1 Navigarea între fragmentele aplicației Ghid turistic…………………………………….. ………….. 31
Figura 2. 2 Iconița aplicației Ghid turistic România …………………………………………………….. …………. 31
Figura 2. 3 Meniul aplicației …………………………………………………………………………………… …………… 32
Figura 2. 4 Lista obiectivelor tu ristice ……………………………………………………………………….. …………. 33
Figura 2. 5 Galeria plicației………………………………………………………………………………………. …………. .34
Figura 2.6 Indicarea locațiilor obiectivelor…………………………………………………………………. …………. 35
Figura 2. 7 Fereastra Facebook……………………………………………………………………………….. …………… 36
Figura 2. 8 Arhitectura Android………………………………………………………………………………… ………… .37
Figura 2. 9 Gruparea logică a modulelor aplicației…………………………………………. …………… ………… …38
Figura 2.1 0 Structura de pe discul fizic al proiectului …………………………………………………. ………….. .39
Figura 3.1 Obiectele grafice ale fragmentului…………………………………………………………….. …………. 47

9

10

Lista acronimelor

API (Application Programming Interface ) – Interfața de Programare a Aplicației
AVD (Android Virtual Device ) – Dispozitivul Virtual Android
GPS (Global Positioning System ) – Sistem de Poziționare Globală
HTML (HyperText Markup Language ) – Limbajul de Markup al HiperText
IDE (Integrated Development Environment ) – Mediul Integrat de Dezvoltare
SDK (Software Development Kit) – Kit-ul de Dezvoltare Software
USB (Universal Serial Bus) – Magistrala Serială Universală
XML (Extensible Markup Language ) – Limbaj ul Extensibil de Marcare

11

12

INTRODUCERE

Obiectivul luc ră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 c are
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 Andr oid 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 folosi rea mediul ui de dezvoltare Android Studio.
În Capitolul 3 al lucrării am detaliat modul implementării listei ce conține obiectivel e turistice,
precum și componenta vizuală de tip ListView ce se regăsește în fișierul fragment_lista.xml , asocia tă
listei.
13

În clasa DetailFragment am implementat codul care permite afișarea pe ecranul telefonului
mobil a detaliilor privind fiecare obiectiv turistic ce se regăsește în cadrul listei. De asemenea , în
fișierul fragment_detail.xml am i nserat componenta vizuală de tip TextView care permite af ișarea
textului pe ecranul utilizatorului.
În clasa GoogleMapsFragment am implementat codul care permite utilizatorul ui să
vizualiz eze locațiile corespunzătoare fiecărui obiectiv turistic regăsit în listă, prin intermediul unui
marker, precum și o scurtă d escriere a le acestor locații .
În clasa GalerieFragment se află o galerie , în care utilizatorul poate vizualiza imagni pentru
fiecare obiectiv turistic în parte, cu ajutorul componentei vizuale de tip ImageView ce se regasește în
fișierul fragment_galerie.xml.
În clasa FacebookFragment am implementat controlul de tip WebView, derivat din clasa
View, prin intermediul căruia am încărcat o pagină web. Componenta de tip WebView ce permite
afișarea paginii pe ecran, este definită în fișierul fragment_facebook.xml

14

CAPITOLUL 1
Noțiuni teoretice referitoare la sistemul de operare Android

1.1 Exemple de a plicații Android utilizate pentru identificarea obiective lor 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 selecta rea trasee lor î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 necesi tă 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, c e 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, activi tăți în aer liber, cum ar fi ciclism și evenimente
culturale: festivaluri de muzică, piese de teatru.
15

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, f ortificații, orașe.
Dacă utilizatorul apasă pe , acesta are posibilitatea să caute respectivul obiectiv turistic
în funcție de denumire.

16

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 vizita te în România. Ele sunt împărțite în
patru categorii , și anume: Arhitectură și M uzee, 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 ori ce 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;
17

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 conf idenț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
18

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 pagin ii cu detali ile locați ei, se poate vedea cel puțin o fotografie reprezentativă,
distanța până la destinația respectiv ă. Naviga rea 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ți i cu ajutorul hărții Google Maps .

19

Figura 1.1 0 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
ascult a informa ții despre obiectivele turistice din apropierea loca ției turistului. Aceasta este
dezvoltată atât pentru Android, cât și pentr u 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 restauran te și cafenele. Recomandările audio pot fi descărcate pe dispozitivul mobil și
20

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 2 5 aprilie 2019.
Aceasta neces ită 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
Altel e
• 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.1 1 Meniu aplicație PocketGuide
21

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.1 3 Listarea obiectivelor turistice audio
Figura 1.1 2 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.

22

Figura 1.1 4 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 Andr oid.
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 n ecesita 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;

23

➢ 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ți a;
➢ interfețel e să fie cât mai sugestive, prin folosirea unui vocabular alcătu it 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, a plicațiile mobile nu sunt construite nici
direct și nici indirect, ca să determine poluarea mediul ui 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
includer ea 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 ins trumente 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.
➢ generabilita tea 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
actua litate, 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 elemente le 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.

24

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.

25

Figura 1.16 Stabilirea versiunii suportate de Android pentru no ua 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.1 7 Distribuția versiunilor de Android
26

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

27

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 princip ală de meniu Fila editorului Bara de unelte Fereastra editorului de text

Bara de stare
Butoane unelte Fereastr a proiect

Figura 1.20 Mediul de lucru Android

➢ Fereastra edit orului 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 a l 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 viz ualizarea proiectului din trei perspective, și anume: Proiect;
Pachete și Android. În mod implicit, Android Studio va afișa proiectul în Android.
28

➢ 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 m ajoritatea 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 dispo zitiv virtual , etc.
➢ Bara de stare – oferă informații despre procesele curente

29

30

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

31

Pe ecranul utilizatorului va apărea iconița de meniu , iar după apăsare a 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 fereastr a 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 .
32

Figura 2. 4 Lista obiectivelor turistice

La accesarea unui element din listă, se deschide o nouă fereastră, în care sunt prezentate
detalii le despre respectiva destinație turistică.

La apăsarea următoarei pictograme , se deschide fereastr a Galerie Fragment care
conține imagini cu obiectivele turistce.

33

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.

34

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.

35

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.

36

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 a le sistemului de operare
Android, făcând legătura între kernel Linux și aplicați e.
Motorul Android rulează serviciile de platformă și aplicați a, 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ții le 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 3 XL API 29 pentru rularea și testarea aplicației.
37

Mediul integrat Android Studio, fi ind 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 proiect ului poate fi vizualizată din două perspective , și anume:

➢ Gruparea logică a modulelor aplicației

Figura 2.9 Gruparea logică a modulelor aplicației

38

➢ Structura de pe discul fizic al proiect ului

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 di spozitivului 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 .
39

– 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.

40

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ăr ui
parametru reprezintă referința către componenta respectivă;
– realizarea unor conexiuni către alte modele de date;
– crearea a ctivităț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 activit atea care devine
activă, fiind urmată întotdeauna de metoda onPause();
➢ onPause() – apelată atunci când activitatea devine inactivă; activitatea poate fi vizibilă, dar
utilizatoru l 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 pr im-plan; poate fi urmată de metoda
onStart();
➢ onDestroy() – apelată la terminarea activit ății și înainte ca să fie eliminată din memorie.
Fiecare dintre metodele c are 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 aut omat 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 .

41

3.1.1 AndroidManifest.xml

Fișierele Ex tensible Markup Language (XML) sunt fișiere text pentru descriere date.
Standardul prin care acest ea 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 prezentat în anexa 1 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 solicita tă 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ă .
42

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 lansa tă 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
specifica t și un filtru de intenții în cadrul elementului <intent -filter>, indicând modalitatea de accesa re
a componentel aplicației . Acest filtru este nec esar 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 intermediu l căreia se semneaz ă aplica ția și care permite utilizarea h ărților Google
este introdus ă în fișierul AndroidM anifest .xml printr -o etich etă de tip < meta -data inclus ă în eticheta
<aplication >.

<meta -data android:name =”com.google.android.geo.API_KEY ”
android:value =”AIzaSyBEJMSMIf8N0MrWHl -yTFtSxn5TnvphQjo ”/>
Acea sta are dou ă atribute:
– android:name care are asociat ă valoarea = ”com.google.android.geo.API_KEY ”
– android:value c ăruia i se va atri bui cheia generat ă, folosind un cont google

3.1.2 MainActivity.java

Fișierul MainActivity.java , prezentat în anexa 2 , 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ă , prezentată în anexa 3 , î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
43

și conține referințe 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 , prezentat în anexa 16, din
directorul navigation și este utilizat pentru a afișa detaliile din lista cu obiectivele turistice .
44

<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ă asigur e 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 con trolului 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
<android x.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 cre ează un nume de identificare pentru
containerul Drawer Layot.
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ă.
45

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âmp lă ș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 încheier ea activității.
O componentă de tip Fragment este similară ca și structură cu una de tip Activity , în cadrul lor
regăsind u-se aceleași metode onCreate, onStart(), onPause(), onStop(), însă au și câteva metode
specifice.
46

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 onCreate View() 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 ().

Avantaj ul folosirii fragmentel or constă în faptul că pot fi c u ușurință adăugate, eliminate sau
modificate ca răspuns la acțiunile utilizatorului .

3.2.1 ListaFragment.java
Clasa ListaFragment , prezentată in anexa 4 , 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 Array List.
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ă.
47

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_l ista, 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 ă. Acea sta 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 ace astă activitate nu
exist ă, funcția va returna null.

3.2.2 fragment _lista .xml
Interfa ța grafic ă asociat ă clasei ListaFragment , prezentată în anexa 5, 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

Structur a switch(p) {case} din anexa 6 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 .
48

@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(getRes ources().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(get Resources().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;
}

3.3.1 fagment_detail.xml

În cazul continerului FrameLayout , prezentat în anexa 7, 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 , prezentat în anexa 15, pe lângă proprietățile componentelor
vizuale , se introduce și atributul background, care setează imaginea de fund al.
android:background ="@drawable/background
3.4 GoogleMaps Fragment.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.
49

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 metod ei addMarker (), care va primi drept
parametru, instanța clasei MarkerOptions anterior creată.
Metoda returnează un obiect de tip Marke r, 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 Lat Lng 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() , prezentată în anexa 8, 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().findFra
gmentById(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() , prezentată în anexa 10.
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 , prezentat în anexa 11, este definit un NestedScrollView , care
conține un container de tip GridLayot , înălți mea și lățimea acestuia fiind date de dimensiunile
componentei NestedScrollView .
</GridLayout>
</androidx.core.widget.NestedScrollView>
50

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:columnCou nt.

<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 , prezentat în anexa 12, 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 age ntul, 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 a pelul
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 , prezentate în anexa 13, 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>

51

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 defi nesc 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> , prezentat în anexa 18, 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" />

52

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:leg acy-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'
}

53

-testImplementation și androidTest Implementation – 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 .

54

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 princip ii 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ță int uitivă 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 d in Galerie și navigarea între diferitele imagini
din cadrul Galeriei;
– extinderea obiectivelor turistice accesibile utilizatorului.

55

56

CONCLUZII

Prin efectuarea acestei lucrări, am urmărit să ofer 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 .
Pornind de la aplicațiil e cu scop turistic existente în Google Play Store , am considerat că este
necesară o aplicație care să aibă un consum relativ mic de resurse și care să răspundă unor cerințe
punctuale .
Aportul meu efectiv este adus în capitolul al II -lea al lucrării, prin descrierea arhitecturii
specific e sistemul ui, cât și în cadrul capitolului al III -lea, prin detalierea funcționării aplicației.
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 urm are, 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 p entru 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 apli caț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.

57

58

BIBLIOGRAFIE

1. Paul Pocatilu, Ion Ivan, Adrian Vișoiu, Felician Alecu, Alin Zamfiroiu, Bogdan Iancu
Programarea aplicațiilor Android, Ed. ASE

2. Create a navigation graph
https://developer.android.com/guide/navigation/navigation -getting -started accesat la data
de 25.07.2019

3. Liviu Șerbănescu, Dezvoltarea Aplicațiilor Pentru Dispozitivel e Mobile, Universitatea
Hyperion
https://informatica.hyperion.ro/wp -content/uploads/2017/11/DEZVOLTAREA –
APLICATIILOR -PENTRU -DISPOZITIVELE -MOBILE.pdf accesat la data de 0 1.08.2019

4. 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

5. Google Play “Amazi ng Romania” în
https://play.google.com/store/apps/details?id=n et.amazingromania.starter&hl=en , accesat
la data de 12.08.2019

6. Google Play “ Rom ânia Uimitoare” în
https://play.google.com/store/apps/details?id=com.andrei.romaniauimitoare&fbclid=IwAR0Az
AqSweVtwAQT lC9kfxcpAU48sHeZqIPgIKLcCsXeH8ad -EU24O6Hh7g , accesat la data de
12.08.2019

7. Google Play “PocketGuide Audio Travel Guide ” în
https://play.google.com/store/apps/details?id=hu.pocketguide , accesat la data de 12.08.2019

8. 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

9. Dawn Griffiths, David Griffiths Head First Android Development,
Editura O’REILLY 2015

10. Android Fragments https://www.tutorialspoint.com/android/android_fragments , accesat la
data de 22.06.2020

59

Anexa 1 – AndroidManifest.xml

60 1. <?xml version="1.0" encoding ="utf-8"?>
2. <manifest xmlns:android ="http://schemas.android.com/apk/res/android"
3. package="com.example.ghidturistic" >
4.
5. <uses-permission android:name ="android.permission.ACCESS_FINE_LOCATION" />
6. <uses-permission android:name ="android.permission.ACCESS_COARSE_LOCATION" />
7. <uses-permission android:name ="android.permission.INTERNET" />
8.
9.
10. <application
11. android:allowBackup ="true"
12. android:icon ="@mipmap/ic_launcher"
13. android:label ="@string/app_name"
14. android:roundIcon ="@mipmap/ic_launcher_round"
15. android:supportsRtl ="true"
16. android:theme ="@style/AppTheme" >
17.
18. <meta-data android:name ="com.google.android.geo.API_KEY"
19. android:value ="AIzaSyBEJMSMIf8N0MrWHl -yTFtSxn5TnvphQjo" />
20.
21. <activity android:name =".MainActivity" >
22. <intent-filter>
23. <action android:name ="android.intent.action.MAIN" />
24.
25. <category android:name ="android.intent.category.LAUNCHER" />
26. </intent -filter>
27. </activity>
28. </application>
29.
30. </manifest>

Anexa 2 – MainActivity.java
61 1. package com.example.ghidturistic;
2.
3. import android.os.Bundle;
4. import android.view.MenuItem;
5.
6. import com.google.android.material.navigation.NavigationView;
7. import androidx.annotation.NonNull;
8. import androidx.appcompat.app.AppCompatActivity;
9. import androidx.core.view.GravityCompat;
10. import androidx.drawerlayout.widget.DrawerLayout;
11. import androidx.navigation.NavController;
12. import androidx.navigation.Navigation;
13. import androidx.navigation.ui.N avigationUI;
14.
15. import static androidx.navigation.ui.NavigationUI.*;
16.
17. public class MainActivity extends AppCompatActivity implements
18. NavigationView.OnNavigationItemSelectedListener {
19.
20. public DrawerLayout drawerLayout;
21.
22. public NavController navController;
23.
24. public NavigationView navigationView;
25.
26. public String[] item = {" Alba Iulia","Manastirea Barsana" ,"Castelul Bran","Brasov" ,
"Castelul Peles",
27. "Cluj-
Napoca","Manastirea Neamt","Mocanita" ,"Cetatea Rasnov","Cimitirul Vesel",
28. "Sibiu","Sighisoara" ,"Transfagarasan" ,"Barajul Vidraru"
29. };
30.
31. @Override
32. protected void onCreate(Bundle savedInstanceState) {
33. super.onCreate(savedInstanceState);
34. setContentView(R.layout.activity_main);
35.
36. setupNavigation();
37.
38. }
39. private void setupNavigation() {
40.
41.
42. drawerLayout = findViewById(R.id.drawer_layout);
43.
44. navigationView = findViewById(R.id.navigationView);
45.
46. navController = Navigation.findNavController( this, R.id.nav_host_fragment);
47.
48. setupActionBarWithNavController( this, navController, drawerLayout);
49.
50. setupWithNavController(navigationView, navController);
51.
52. navigationView.setNavigationItemSelectedListener( this);
53.
54. }
55.
56. @Override
57. public boolean onSupportNavigateUp() {
58. return NavigationUI.navigateUp(drawerLayout, Navigation.findNavController( this,
59. R.id.nav_host_fragment));
60. }

62 61. @Override
62. public void onBackPressed() {
63. if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
64. drawerLayout.closeDrawer(GravityCompat.START);
65. } else {
66. super.onBackPressed();
67. }
68. }
69.
70. @Override
71. public boolean onNavigationItemSelected( @NonNull MenuItem menuItem) {
72.
73. menuItem.setChecked( true);
74.
75. drawerLayout.closeDrawers();
76.
77. int id = menuItem.getItemId();
78. switch (id) {
79.
80. case R.id.listaObiective:
81. navController.navigate(R.id.listaFragment);
82. break;
83.
84. case R.id.galerie:
85. navController.navigate(R.id.galerieFragment);
86. break;
87.
88. case R.id.googleMaps:
89. navController.navigate(R.id.googleMapsFragment);
90. break;
91.
92. case R.id.facebook:
93. navController.navigate(R.id.facebookFragment);
94. break;
95.
96.
97. }
98. return true;
99.
100. }
101.
102. public void navigatetoDetailView( int position){
103. Bundle bundle = new Bundle();
104. bundle.putInt( "position" ,position);
105. navController.navigate(R.id.detailFragment,bundle);
106. }
107. }

Anexa 3 – activity _main .xml

63 1. <?xml version="1.0" encoding ="utf-8"?>
2.
3.
4.
5. <androidx.drawerlayout.widget.DrawerLayout
6. xmlns:android ="http://schemas.android.com/apk/res/android"
7. xmlns:app ="http://schemas.android.com/apk/res -auto"
8. xmlns:tools ="http://schemas.android.com/tools"
9. android:id ="@+id/drawer_layout"
10. android:layout_width ="match_parent"
11. android:layout_height ="match_parent"
12. tools:context =".MainActivity" >
13.
14. <LinearLayout
15. android:layout_width ="match_parent"
16. android:layout_height ="match_parent"
17. android:orientation ="vertical" >
18.
19.
20. <fragment
21. android:id ="@+id/nav_host_fragment"
22. android:name ="androidx.navigation.fragment.NavHostFragment"
23. android:layou t_width="match_parent"
24. android:layout_height ="match_parent"
25. app:defaultNavHost ="true"
26. app:navGraph ="@navigation/nav_graph" />
27.
28. </LinearLayout>
29.
30. <com.google.android.material.navigation.NavigationView
31. android:id ="@+id/navigationView"
32. android:layout_width ="wrap_content"
33. android:layout_height ="match_parent"
34. android:layout_gravity ="start"
35. android:fitsSystemWindows ="true"
36. app:headerLayout ="@layout/ghid_turistic_header"
37. app:menu ="@menu/ghid_turistic_menu" />
38.
39. </androidx.drawerlayout.widget.DrawerLayout>

Anexa 4 – ListaFragment.java

64 1. package com.example.ghidturistic;
2.
3. import android.os.Bundle;
4. import android.view.LayoutInflater;
5. import android.view.View;
6. import android.view.ViewGroup;
7. import android.widget.ArrayAdapter;
8. import android.widget.ListView;
9. import android.widget.SearchView;
10. import android.widget.Toast;
11.
12. import androidx.fragment.app.ListFragment;
13.
14.
15. public class ListaFragment extends ListFragment {
16. ListView listView;
17.
18. ArrayAdapter<String> arrayAdapter;
19.
20. String[] item;
21.
22. public ListaFragment() {
23. }
24.
25. @Override
26. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sav
edInstanceState) {
27. View view = inflater.inflate(R.layout.fragment_lista, container, false);
28. listView = (ListView) view.findViewById(android.R.id.list);
29.
30. item = ((MainActivity) getActivity()).item;
31. arrayAdapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout
.simple_list_item_1, item);
32. setListAdapter(arrayAdapter);
33.
34.
35. return view;
36.
37. }
38.
39.
40. @Override
41. public void onListItemClick(ListView l, View v, int position, long id) {
42. super.onListItemClick(l, v, position, id);
43.
44. ((MainActivity) getActivity()).navigatetoDetailView(position);
45.
46.
47. }
48. }

Anexa 5 – fragment_lista .xml

65 1. <?xml version="1.0" encoding ="utf-8"?>
2. <androidx.constraintlayout.widget.ConstraintLayout
3. xmlns:android ="http://schemas.android.com/apk/res/android"
4. xmlns:app ="http://schemas.android.com/apk/res -auto"
5. xmlns:tools ="http://schemas.android.com/tools"
6. android:layout_width ="match_parent"
7. android:layout_height ="match_parent"
8. android:orientation ="vertical"
9. >
10.
11. <ListView
12. android:id ="@android:id/list"
13. android:layout_width ="match_parent"
14. android:layout_height ="match_parent" >
15.
16. </ListView>
17. </androidx.constraintlayout.widget.ConstraintLayout>

Anexa 6 – DetailFragment.java
66 1. package com.example.ghidturistic;
2.
3.
4. import android.os.Bundle;
5.
6. import androidx.fragment.app.Fragment;
7.
8. import android.view.LayoutInflater;
9. import android.view.View;
10. import android.view.ViewGroup;
11. import android.widget.TextView;
12.
13.
14.
15. public class DetailFragment extends Fragment {
16.
17.
18. public DetailFragment() {
19.
20. }
21.
22. @Override
23. public View onCreateView(LayoutInflater inflater, ViewGroup container,
24. Bundle savedInstanceState) {
25.
26.
27. View detailsView = inflater.inflate(R.layout.fragment_detail, container, false);

28. TextView textView = (TextView) detailsView.findViewById(R.id.textView);
29.
30.
31. Bundle bundle = getArguments();
32. int p = bundle.getInt( "position" );
33. // textView.setText(String.valueOf(p));
34.
35. switch (p) {
36. case 0: textView.setText(getResources().getString(R.string.poz)); break;
37. case 1: textView.setText(getResources().getString(R.string.poz1)); break;
38. case 2: textView.setText(getResources().getString(R.string.poz2)); break;
39. case 3: textView.setText(getResources().getString(R.string.poz3)); break;
40. case 4: textView.setText(getResources().getString(R.string.poz4)); break;
41. case 5: textView.setText(getResources().getString(R.string.poz5)); break;
42. case 6: textView.setText(getResources().getString(R.string.poz6)); break;
43. case 7: textView.setText(getResources().getString(R.string.poz7)); break;
44. case 8: textView.setText(getResources().getString(R.string.poz8)); break;
45. case 9: textView.setText(getResources().getString(R.string.poz9)); break;
46. case 10: textView.setText(getResources().getString(R.string.poz10)); break;

47. case 11: textView.setText(getResources().getString(R.string.poz11)); break;

48. case 12: textView.setText(getResources().getString(R.string.poz12)); break;

49. case 13: textView.setText(getResources().getString(R.string.poz13)); break;

50.
51. }
52.
53. return detailsView;
54.
55. }
56. }

Anexa 7 – fagment _detail .xml

67 1. <?xml version="1.0" encoding ="utf-8"?>
2. <FrameLayout xmlns:android ="http://schemas.android.com/apk/res/android"
3. xmlns:tools ="http://schemas.android.com/tools"
4. android:layout_width ="match_parent"
5. android:layout_height ="match_parent"
6. tools:context =".DetailFragment" >
7.
8. <!– TODO: Update blank fragment layout –>
9. <TextView
10. android:id ="@+id/textView"
11. android:layout_width ="match_parent"
12. android:layout_height ="match_parent"
13. android:textSize ="16dp"
14. />
15.
16. </FrameLayout>

Anexa 8 – GoogleMaps Fragment.java

68 1. package com.example.ghidturistic;
2.
3. import android.os.Bundle;
4. import android.view.LayoutInflater;
5. import android.view.View;
6. import android.view.ViewGroup;
7.
8. import androidx.annotation.NonNull;
9. import androidx.annotation.Nullable;
10. import androidx.fragment.app.Fragment;
11.
12. import com.google.android.gms.maps.GoogleMap;
13.
14. import com.google.an droid.gms.maps.OnMapReadyCallback;
15. import com.google.android.gms.maps.SupportMapFragment;
16.
17. import com.google.android.gms.maps.model.LatLng;
18. import com.google.android.gms.maps.model.MarkerOptions;
19.
20.
21. public class GoogleMapsFragment extends Fragment implements OnMapReadyCallback{
22.
23. GoogleMap mGoogleMap;
24. View mView;
25.
26. public GoogleMapsFragment(){}
27.
28. @Override
29. public void onCreate(Bundle savedInstanceState)
30. {super.onCreate(savedInstanceState);}
31.
32. @Override
33. public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle
34. savedInstanceState){
35. mView = inflater.inflate(R.layout.fragment_google_ maps,container, false);
36. return mView;
37. }
38.
39. @Override
40. public void onViewCreated(@NonNull View view, @Nullable Bundle
41. savedInstanceState) {
42. super.onViewCreated(view, savedInstanceState);
43. SupportMapFragment mapFragment = (SupportMapFragment)
44. getChildFragmentManager().findFragmentById(R.id.map);
45. mapFragment.getMapAsync( this);
46. }
47.
48. @Override
49. public void onMapReady(GoogleMap googleMap) {
50. mGoogleMap = googleMap;

69 51. LatLng albaCarolina = new LatLng(46.0674191 ,23.5664645 );
52. googleMap.addMarker( new MarkerOptions().position(albaCarolina)
53.
54. .title("Cetatea Alba Carolina" ).snippet( "Cetate Alba Iulia"));
55.
56. LatLng Barsana = new LatLng(47.793255900000005 ,24.091809371340673 );
57. googleMap.addMarker( new MarkerOptions().position(Barsana)
58. .title("Manastirea Barsana" ).snippet( "Manastirea Barsana" ));
59.
60. LatLng Bran = new LatLng(45.5150774 ,25.367237292659574 );
61. googleMap.addMarker( new MarkerOptions().position(Bran).title( "Castelul Bran")
62. .snippet( "Castelul Bran"));
63.
64. LatLng Brasov = new LatLng(45.6523093 ,25.6102746 );
65. googleMap.addMarker( new MarkerOptions().position(Brasov).title( "Brasov" )
66. .snippet( "Brasov" ));
67.
68. LatLng Peles= new LatLng(45.36002715 ,25.54266688425395 );
69. googleMap.addMarker( new MarkerOptions().position(Peles).title( "Castelul Peles")
70. .snippet( "Castelul Peles"));
71.
72. LatLng Cluj = new LatLng(46.769379 , 23.5899542 );
73. googleMap.addMarker( new MarkerOptions().position(Cluj )
74. .title("Orasul Cluj-Napoca").snippet( "Orasul Cluj-Napoca"));
75.
76. LatLng Neamt = new LatLng(47.2632559 , 26.2086817 );
77. googleMap.addMarker( new MarkerOptions().position(Neamt).title( "Manastirea Neamt")
.snippet( "Manastirea Neamt"));
78.
79. LatLng Mocanita = new LatLng(47.7147472 ,24.4430182 );
80. googleMap.addMarker( new MarkerOptions().position(Mocanita).title( "Mocanita" )
81. .snippet( "Mocanita" ));
82.
83. LatLng Rasnov = new LatLng(47.7147472 ,24.4430182 );
84. googleMap.addMarker( new MarkerOptions().position(Rasnov).title( "Rasnov" )
85. .snippet( "Rasnov" ));
86.
87. LatLng Sapanta = new LatLng(47.9713649 ,23.694722063363862 );
88. googleMap.addMarker( new MarkerOptions().position(Sapanta).title( "Cimitirul Vesel-
Sapanta" ).snippet( "Cimitirul Vesel-Sapanta" ));
89.
90. LatLng Sibiu = new LatLng(45.7973912 ,24.1519202 );
91. googleMap.addMarker( new MarkerOptions().position(Sibiu).title( "Orasul Sibiu")
92. .snippet( "Orasul Sibiu"));
93.
94. LatLng Sighisoara = new LatLng(45.7973912 ,24.1519202 );
95. googleMap.addMarker( new MarkerOptions().position(Sighisoara).title( "Orasul
96. Sighisoara" ).snippet ("Orasul Sighisoara" ));
97.
98. LatLng Transfagarasan = new LatLng(45.608886 ,24.6160543 );
99. googleMap.addMarker( new MarkerOptions().position(Transfagarasan)
100. .title("Transfagarasan" ).snippet( "Transfagarasan" ));
101.
102. LatLng Vidraru = new LatLng(45.36630085 , 24.631485277106417 );
103. googleMap.addMarker( new MarkerOptions().position(Vidraru).
104. title("Barajul Vidraru" ).snippet( "Barajul Vidraru" ));
105.
106.
107. }
108.
109. }

Anexa 9 – fragment_google_maps.xml

70 1. <?xml version="1.0" encoding ="utf-8"?>
2. <androidx.constraintlayout.widget.ConstraintLayout
3. xmlns:android ="http://schemas.android.com/apk/res/android"
4. xmlns:tools ="http://schemas.android.com/tools"
5.
6. android:layout_width ="match_parent"
7. android:l ayout_height ="match_parent"
8. tools:context =".GoogleMapsFragment" >
9.
10. <fragment
11.
12. android:id ="@+id/map"
13. xmlns:android ="http://schemas.android.com/apk/res/android"
14. xmlns:tools ="http://schemas.android.com/tools"
15. android:layout_width ="match_parent"
16. android:layout_height ="match_parent"
17. android:name ="com.google.android.gms.maps.SupportMapFragment" />
18. </androidx.constraintlayout.widget.ConstraintLayout>

Anexa 10 – GalerieFragment.java
71 1. package com.example.ghidturistic;
2.
3. import android.os.Bundle;
4. import android.view.LayoutInflater;
5. import android.view.View;
6. import android.view.ViewGroup;
7. import android.widget.ImageView;
8. import androidx.fragment.app.Fragment;
9.
10.
11. public class GalerieFragment extends Fragment {
12.
13.
14. public View onCreateView( LayoutInflater inflater, ViewGroup container,
15. Bundle savedInstanceState) {
16.
17. View vw= inflater.inflate(R.layout.fragment_galerie, container, false);
18.
19. ImageView alba= (ImageView)vw.findViewById(R.id.alba);
20. alba.setImageResource(R.drawable.cetate_alba);
21.
22. ImageView barsana= (ImageView)vw.findViewById(R.id.barsana);
23. barsana.setImageResource(R.drawable.barsana);
24.
25. ImageView bran = (ImageView)vw.findViewById(R.id.bran);
26. bran.setImageResource(R.drawable.bran);
27.
28. ImageView brasov = (ImageView)vw.findViewById(R.id.brasov);
29. brasov.setImageResource(R.drawable.brasov);
30.
31. ImageView peles= (ImageView)vw.findViewById(R.id.peles);
32. peles.setImageResource(R.drawable.castelul_peles);
33.
34. ImageView cluj= (ImageView)vw.findViewById(R.id.cluj);
35. cluj.setImageResource(R.drawable.cluj_napoca);
36.
37. ImageView neamt= (ImageView)vw.findViewById(R.id.neamt);
38. neamt.setImageResource(R.drawable.manastirea_neamt);
39.
40. ImageView mocanita = (ImageView)vw.findViewById(R.id.mocanita);
41. mocanita.setImageResource(R.drawable.mocanita);
42.
43. ImageView rasnov = (ImageView)vw.findViewById(R .id.rasnov);
44. rasnov.setImageResource(R.drawable.rasnov);
45.
46. ImageView sapanta= (ImageView)vw.findViewById(R.id.sapanta);
47. sapanta.setImageResource(R.drawable.sapanta);
48.
49. ImageView sibiu= (ImageView)vw.findViewById(R.id.sibiu);
50. sibiu.setImageResource(R.drawable.sibiu);
51.
52. ImageView sighisoara= (ImageView)vw.findViewById(R.id.sighisoara);
53. sighisoara.setImageResource(R.drawable.sighishoar a);
54.
55. ImageView transfagarasan= (ImageView)vw.findViewById(R.id.transfagarasan);
56. transfagarasan.setImageResource(R.drawable.transfagarasan);
57.
58. ImageView vidraru= (ImageView)vw.findViewById(R.id.vidraru);
59. vidraru.se tImageResource(R.drawable.vidraru);
60.
61. return vw;
62. }
63. }

Anexa 11 – fragment_galerie.xml

72 1. <androidx.core.widget.NestedScrollView
2. xmlns:app ="http://schemas.android.com/apk/res -auto"
3. android:id ="@+id/scrollView"
4. android:layout_width ="wrap_content"
5. android:layout_height ="wrap_content"
6. xmlns:android ="http://schemas.android.com/apk/res/android" >
7. <GridLayout
8. android:id ="@+id/GridLayout"
9. android:layout_width ="match_parent"
10. android:layout_height ="match_parent"
11. android:columnCount ="2"
12. android:rowCount ="9">
13.
14. <ImageView
15. android:id ="@+id/alba"
16. android:layout_width ="200dp"
17. android:layout_height ="200dp"
18. android:src ="@drawable/cetate_alba" />
19.
20. <ImageView
21. android:id ="@+id/barsana"
22. android:layout_width ="200dp"
23. android:layout_height ="200dp"
24. android:src ="@drawable/barsana" />
25.
26. <ImageView
27. android:id ="@+id/bran"
28. android:layout_width ="200dp"
29. android:layout_height ="200dp"
30. android:src ="@drawable/bran" />
31.
32. <ImageView
33. android:id ="@+id/brasov"
34. android:layout_width ="200dp"
35. android:layout_height ="200dp"
36. android:src ="@drawable/brasov" />
37.
38. <ImageView
39. android:id ="@+id/peles"
40. android:layout_width ="200dp"
41. android:layout_height ="200dp"
42. android:src ="@drawable/castelul_peles" />
43.
44. <ImageView
45. android:id ="@+id/cluj"
46. android:layout_width ="200dp"
47. android:layout_height ="200dp"
48. android:src ="@drawable/cluj_napoca" />
49.
50. <ImageView
51. android:id ="@+id/neamt"
52. android:layout_width ="200dp"
53. android:layout_height ="200dp"
54. android:src ="@drawable/manastirea_neamt" />
55.
56. <ImageView
57. android:id ="@+id/mocanita"
58. android:layout_width ="200dp"
59. android:layout_height ="200dp"
60. android:src ="@drawable/mocanita" />

73 61. <ImageView
62. android:id ="@+id/rasnov"
63. android:layout_width ="200dp"
64. android:layout_height ="200dp"
65. android:src ="@drawable/rasnov" />
66.
67. <ImageView
68. android:id ="@+id/sapanta"
69. android:layout_width ="200dp"
70. android:layout_height ="200dp"
71. android:src ="@drawable/sapanta" />
72.
73. <ImageView
74. android:id ="@+id/sibiu"
75. android:layout_width ="200dp"
76. android:layout_height ="200dp"
77. android:src ="@drawable/sibiu" />
78.
79. <ImageView
80. android:id ="@+id/sighisoara"
81. android:layout_width ="200dp"
82. android:layout_height ="200dp"
83. android:src ="@drawable/sighishoara" />
84.
85. <ImageView
86. android:id ="@+id/transfagarasan"
87. android:layout_width ="200dp"
88. android:layout_height ="200dp"
89. android:src ="@drawable/transfagarasan" />
90.
91. <ImageView
92. android:id ="@+id/vidraru"
93. android:layout_width ="200dp"
94. android:layout_height ="200dp"
95. android:src ="@drawable/vidraru" />
96.
97. </GridLayout>
98. </androidx.core.widget.NestedScrollView>

Anexa 12 – FacebookFragment.java

74 1. package com.example.ghidturistic;
2.
3. import android.os.Bundle;
4. import android.view.LayoutInflater;
5. import android.view.View;
6. import android.view.ViewGroup;
7. import android.webkit.WebView;
8. import android.webkit.WebViewClient;
9. import androidx.fragment.app.Fragment;
10.
11.
12. public class FacebookFragment extends Fragment {
13.
14. public FacebookFragment(){}
15.
16.
17. public View onCreateView( LayoutInflater inflater, ViewGroup container,
18. Bundle savedInstanceState) {
19.
20. View view = inflater.inflate(R.layout.fragment_facebook, container, false);
21. WebView webView =(WebView)view.findViewById(R.id.webView);
22. webView.getSettings().setJavaScriptEnabled( true);
23. webView.setWebViewClient( new WebViewClient());
24. webView.loadUrl( "https://www.facebook.com/" );
25. return view;
26. }
27. }

Anexa 13 – fragment _facebook .xml

75 1. <?xml version="1.0" encoding ="utf-8"?>
2. <androidx.constraintlayout.widget.ConstraintLayout
3. xmlns:android ="http://schemas.android.com/apk/res/android"
4. xmlns:app ="http://schemas.android.com/apk/res -auto"
5. xmlns:tools ="http://schemas.android.com/tools"
6. android:layout_width ="match_parent"
7. android:layout_height ="match_parent" >
8.
9. <WebView
10. android:id ="@+id/webView"
11. android:layout_width ="match_parent"
12. android:layout_height ="match_parent" ></WebView>
13.
14. </androidx.constraintlayout.widget.ConstraintLayout>

Anexa 14 – DefaultFragment.java

76 1. package com.example.ghidturistic;
2.
3.
4. import android.content.Context;
5. import android.os.Bundle;
6. import android.view.LayoutInflater;
7. import android.view.View;
8. import android.view.ViewGroup;
9. import android.widget.ImageView;
10.
11. import androidx.annota tion.NonNull;
12. import androidx.annotation.Nullable;
13. import androidx.fragment.app.Fragment;
14.
15.
16. public class DefaultFragment extends Fragment {
17. @Override
18. public void onAttach(Context context) {
19. super.onAttach(context);
20. }
21.
22. @Nullable
23. @Override
24. public View onCreateView( @NonNull LayoutInflater inflater, @Nullable ViewGroup contai
ner, @Nullable Bundle savedInstanceState) {
25. View view = inflater.inflate(R.layout.fragment_default, container, false);
26.
27. return view;
28. }
29. }

Anexa 15 – fragment _default .xml

77 1. <?xml version="1.0" encoding ="utf-8"?>
2. <androidx.constraintlayout.widget.ConstraintLayout
3. xmlns:android ="http://schemas.android.com/apk/res/android"
4. xmlns:app ="http://schemas.android.com/apk/res -auto"
5. xmlns:tools ="http://schemas.android.com/tools"
6. android:layout_width ="match_parent"
7. android:layout_height ="match_parent"
8. android:background ="@drawable/background" >
9.
10.
11. </androidx.constraintlayout.widget.ConstraintLayout>

Anexa 16 – nav_graph.xml

78 1. <?xml version="1.0" encoding ="utf-8"?>
2. <navigation xmlns:android ="http://schemas.android.com/apk/res/android"
3. xmlns:app ="http://schemas.android.com/apk/res -auto"
4. xmlns:tools ="http://schemas.android.com/tools"
5. android:id ="@+id/nav_graph"
6. app:startDestination ="@id/defaultFragment" >
7.
8. <fragment
9. android:id ="@+id/listaFragment"
10. android:name ="com.example.ghidturistic.ListaFragment"
11. android:label ="Fragment Lista"
12. tools:layout ="@layout/fragment_lista"
13. />
14. <fragment
15. android:id ="@+id/googleMapsFragment"
16. android:name ="com.example.ghidturistic.GoogleMapsFragment"
17. android:label ="Fragment Google Maps"
18. tools:layout ="@layout/fragment_google_maps"
19.
20. />
21. <fragment
22. android:id ="@+id/galerieFragment"
23. android:name ="com.example.ghidturistic.GalerieFragment"
24. android:label ="Galerie Fragment"
25. tools:layout ="@layout/fragment_galerie" />
26.
27. <fragment
28. android:id ="@+id/facebookFragment"
29. android:name ="com.example.ghidturistic.FacebookFragment"
30. android:label =" Facebook Fragment"
31. tools:layout ="@layout/fragment_facebook" >
32. </fragment>
33.
34. <fragment
35. android:id ="@+id/defaultFragment"
36. android:name ="com.example.ghidturistic.DefaultFragment"
37. android:label ="Default Fragment"
38. tools:layout ="@layout/fragment_default" >
39. </fragment>
40. <fragment
41. android:id ="@+id/detailFragment"
42. android:name ="com.example.ghidturistic.DetailFragment"
43. android:label ="Detail Fragment"
44. tools:layout ="@layout/fragment_de tail"
45. />
46.
47. </navigation>

Anexa 17 – string s.xml

79 1. <resources>
2. <string name="app_name" >Ghid Turistic </string>
3. <!– TODO: Remove or change this placeholder text –>
4. <string name="hello_blank_fragment" >Hello blank fragment </string>
5. <string name="poz">Cetatea Alba Carolina, situată în inima Transilvaniei, respectiv
în orașul Alba Iulia, este cea mai mare cetate din România, având o vechime de peste 300
ani. Denumirea de Carolina provine de la numele împăratului Carol al VI-lea,
6. în vremea căruia a fost construită.
7. Fortăreața a fost edificată sub formă stelată, avand trei rânduri de ziduri și șapte
8. bastioane alternate cu șase raveline, prevazute de galerii boltite, delimitate de șanțuri
adânci. Enumerarea bastioanelor începe de la Poarta a IIIa, spre sud, în sensul acelor
9. de ceasornic. Bastioanele au primit denumiri legate de numele unor patroni laici sau
10. religioși. Ultima linie de ziduri este denumită contragardă.
11. In trecut, Cetatea a avut un rol militar, fiind atacată o singură dată de către maghiari,
fără să fie însă cucerită. În prezent, are în componență alte doua cetăți, reprezentând
nuclee de dezvoltare urbană ale orașului.
12. </string>
13. <string name="poz1">Mănăstirea Bârsana este situata in localitatea Barsana, din
14. judetul Maramures. Constructia a fost edificata la mijlocul secolului al
15. XVI-lea de catre domnii Dragosesti. Manastirea purta hramul Sfantului Nicolae, fiind
16. una dintre cele mai importante din tinutul Maramureșului.
17. In aceasta manastire si-a avut resedinta episcopul Gavril Bârsana. De asemenea,
18. la manastire veneau preotii din satele invecinate pentru a achizitiona cartile aduse din
19. Moldova si Țara Românească.
20. Dupa cel de-al doilea razboi mondial, locul a fost confiscat de la parohie, insa
21. dupa anul 1989, s-a intemeiat o noua manastire. Toate cladirile din incinta manastirii
22. sunt executate din lemn de stejar si pietre de rau. S-a stabilit ca mănăstirea să
23. aibă hramul Soborul Sfintilor 12 Apostoli. Astfel, la data de 30 iunie 1993,
24. s-a praznuit pentru prima data hramul noii mănăstiri.
25. </string>
26. <string name="poz2">Castelul Bran este situat în localitatea Bran, în sudul județului
27. Brașov, fiind unul dintre cele mai bine conservate și impresionante castele medievale
28. din țara noastră.
29. Construcția a fost ridicată în secolul al XIV-lea, inițial cu scopul de a fi o redută
30. împotriva invaziei turce,respectiv pentru a controla trecerea din Muntenia spre
31. Transilvania, prin valea râului Turcu.
32. Pentru edificarea castelului, s-au folosit ca materiale de construcție
33. bolovani de râu, caramidă și lemn.
34. Ulterior, Cetatea a suferit mai multe schimbări în ce privește structura sa, cele mai
35. importante fiind adăugarea turnului de sud, ridicarea unui turn dreptunghiular în aripa de
est și îmbrăcarea acoperișului cu țiglă.
36. În castelul Bran există multe obiecte de artă feudală, câteva amintind de domnia lui
37. Vlad Țepeș.
38. Familia regală a României a adus o contribuție benefică asupra castelului, prin dotarea a
cestuia cu electricitate, lift, conexiune telefonică și cu o bibliotecă ale cărei cărți au
o valoare inestimabilă. De asemenea, majoritatea pieselor de mobilier și
39. ceramică amintesc de perioada ăn care regina Maria a locuit în el.
40. </string>

80 41. <string name="poz3">Orasul Brasov este considerat inima Roâniei, fiind situat pe unul
42. din cele mai vechi drumuri comerciale, unde avea loc schimbul de mărfuri între Țara
43. Românească, Moldova și Transilvania.
44. Printre cele mai importante obiective turistice se numără:
45. – Biserica Neagră, fiind unul dintre cele mai reprezentative monumente de arhitectură
46. gotică din România;
47. – Turnul Negru, ridicat în secolul al XIV -lea, cu scopul de a împiedica apropierea
dușmanilor de zidurile orașului. Aceasta denumire se datorează
48. zidurilor înnegrite de incendiul din 1689;
49. -Turnul Alb, aflat la 59 m depărtare de zidul cetății, comunică cu aceasta
50. printr un pod mobil ce făcea legătura între turn și Bastionul Graf;
51. – Bastionul Graft a fost ridicat în secolul al XVlea de către breasla șelarilor,
52. pentru realizarea legăturii între oștenii din cetate și Turnul Alb, iar în secolul al
53. XVI-lea s-a edificat zidul de apărare cu opt turnuri,fiind sapat și canalul Graft
54. pentru drenarea apelor;
55. -Bastionul Țesătorilor a fost construit de breasla țesătorilor, pe patru nivele,
56. și are o arhitectură unică în sud-estul Europei, fiind cea mai bine
57. păstrată fortificație a orașului.
58. – Poarta Ecaterinei, situată la capătul străzii Caterinei, a preluat numele de la
59. mănăstirea de călugărițe ce fusese acolo. În anul 1559 a fost ridicat și
60. turnul porții. Poarta a fost construită pe trei nivele, de formă pătrată,
61. având în partea superioară patru turnulețe ce simbolizau „Jus Gladii”, un privilegiu
62. medieval care dădea conducătorilor brașoveni dreptul de a aplica pedeapsa supremă. Bolta
turnului are o arhitectură unică în lume.
63. – Strada Sforii are 1,32 m lățime și 83 m lungime și este cea mai îngustă strada din
64. estul Europei. Datează din secolul al XIII-lea, fiind singura stradă din oraș ai carei
65. pereți pot fi atinși cu ambele brațe.
66. </string>
67. <string name="poz4"> Castelul Peleș este situat în Sinaia. A fost edificat la inițiativa
regelui Carol I, în perioada1873 -1914, fiind considerat unul dintre cele
68. mai frumoase din România și unul din cele mai importante monumente de acest fel din
69. Europa. A fost primul castel electrificat din Europa.
70. Arhitectura exterioară a Castelului Peleș este specifică stilului neorenașterii germane,
având profiluri ascuțite, verticale zvelte, forme neregulate, asimetria corpurilor,
71. abundența lemnului sculptat și a elementelor decorati ve.
72. Turnul central are o înalțime de 66 de metri. Terasele castelului, în stilul
73. neorenașterii italiene, sunt decorate cu statui, coloane, fântâni.
74. Castelul are aproximativ 170 de camere, mai multe intrări și scări interioare.
75. Printre cele mai representative săli și camere se numără: holul de onoare,
76. salonul de recepție, sala oglinzilor, marea sală de arme, sala deconcerte, apartamentul
77. imperial, sala Maura, salonul turcesc, sala de teatru. Și în interior se întâlnesc
78. elemente ale neorenașterii germane, dar există și încăperi în diverse alte stiluri,
79. reluări ale renașterii italiene , engleze, barocului german, stilului hispano-maur.
80. </string>
81. <string name="poz5">Orasul Cluj-Napoca este situat în zona centrală a Transilvaniei,
82. respectiv zona de legătură dintre Munții Apuseni, Podișul Someșan și Câmpia Transilvani.

83. In secolul al XIII-lea au fost ridicate primele ziduri de aparare
84. ale cetății Clujului prevazute cu turnuri de observație. Cetatea se află pe malul
85. drept al Somesului și ocupă 7 hectare. In secolul al XV-lea au fost
86. construite, cu sprijinul meșteșugarilor, alte ziduri din piatră, cu porți de intrare și
87. bastioane menite să protejeze vechea fortifica ție.
88. Fragmentele de fortificatie care s-au pastrat până azi sunt Turnul Pompierilor și
89. Bastionul Croitorilor, care au rezistat in timp păstrându-și forma original ă. Gradina
90. Botanica din Cluj-Napoca este renumită în Europa,fiind un valoros muzeu botanic
91. </string>

81 1. <string name="poz6"> Mănăstirea Neamț se află în comuna Vânători, la 14 km de orașul
2. Târgul Neamț, pe valea Nemțișorului. A fost construită de Petru Mușat între anii
3. 1375-1391. Biserica a fost reconstruită de Ștefan cel Mare, cu hramul ”Înălțarea
4. Domnului” și a fost sfințită la data de 14 noiembrie 1497.
5. În timpul Sfântului Paisie Velicikovschi, mănăstirea număra 1.000 de călugari, fiind
6. numită “Ierusalimul Românesc”. Odată cu restaurarea clădirii celui mai vechi și mai mare
7. așezământ monahal din Moldova, expoziția are în dotare o valoroasă colecție
8. de vase liturgice, broderii și icoane, împreună cu tiparnița de la
9. Neamț. Tot la Mănăstirea Neamț se află și cea mai veche bibliotecă mănăstirească cu
10. 18.000 de volume, având o deosebită contribuție la dezvoltarea culturii și
11. artei românești medievale.
12. </string>
13. <string name="poz7">Mocănița În perioada 1924-1932 s-a construit calea ferată forestieră
14. după ecartamentul austro-ungar de 760 mm. Pornind de la Vișeu de Sus,
15. dintr-o stație veche a Căilor Ferate Feroviare, linia se termină la Comanu și
16. are un parcurs de-a lungul râului Vaser, peste poduri și prin tunele.
17. Calea ferată traversează o zonă împădurită, unde nu există drumuri sau sate, fiind
18. locuită doar de animalele sălbatice. Singura cale ferată forestieră care
19. mai funcționează este Mocănița, care cu puțin timp înainte, era folosită pentru
20. transportul materialului lemnos.
21. În prezent, Mocănița e disponibilă transportului turistic începând din aprilie și până
22. pe 20 octombrie, când face ultimul drum, înainte de căderea zăpezii. </string>
23. <string name="poz8">Cetatea Râșnov este o construcție fortificată situată pe dealul
calcaros din sudul orașului Râșnov, ce leagă Transilvania de Țara Românească.
24. Prin poziția sa strategică, cetatea controla accesul în Transilvania, pe drumul
25. Branului. Ea este formată dintr-o incintă exterioară amplasată în fața zidului estic,
26. mărginită de un zid fortificat și dotat cu un turn pătrat și o incintă interioară
27. înconjurată de zidurile și turnurile cetății, înălțimea zidurilor având 5 metri,
28. iar lățimea cea mai mare având-o zidul sudic, de aproximativ un metru și jumătate.
29. Pentru edificarea construcției au fost folosite ca materiale piatră și cărămidă,
30. având un stil arhitectonic simplu, asemănător cu cel al caselor din zonă,
31. adaptat pentru o fortificație. În perioada 1623 -1640, datorită lipsei unui
32. izvor de alimentare cu apă, a fost săpată direct în stâncă, în centrul fortificației,
33. o fântână adâncă de 98 m.
34. In interiorul Cetății Râșnov, se regăsesc obiecte de artă feudală, cum ar fi armuri,
35. arme, galerii, mobilier de epocă, precum și o mască de tortură și un
36. jug pentru transportarea prizonierilor. </string>
37. <string name="poz9">Cimitirul Vesel se află în satul Săpânța, din Maramureș,
38. aproape de granița României cu Ucraina. Numele cimitirului vine de la multitudinea
39. de cruci multicolore si de la poeziile satirice și epitafel e inscripționate.Fiecare cruce
40. are o poezie scurtă, câteva rime simple, cu maxim 17 versuri și conține numele
41. celui decedat. Primul epitaf din Cimitirul Vesel datează din anul 1935. În partea de
42. sus a fiecarei cruci există un basorelief cu o scenă din viața celui decedat.
43. Scenele sunt simple, prezentând un aspect relevant din viața acestora. Ele prezinta
44. femei torcând, tesând sau făcând pâine, bărbați care taie lemne sau ară pământul,
45. păstori cu turmele, lăutari și multe alte ocupații.
46. Până în prezent s-au adunat circa 800 de cruci decorate.
47. Totul este realizat manual, fiind aplicată culoarea de fundal
48. cunoscută sub denumirea de albastru de Săpânța. Scenele din
49. viața defunctului sunt pictate folosindu -se culorile galben, roșu, alb și verde.
50. </string>

82 1. <string name="poz10">Orașul Sibiu este situat în partea sudică a Transilvaniei, pe râul
2. Cibin. Printre cele mai atractive obiective turistice se numără:
3. – Muzeul Astra, unul dintre puținele locuri unde se mai găsesc gospodăriile specifice
4. fiecarei zone rurale, așa cum au fost ele construite odinioară.
5. Întregul ansamblu este o reprezentare a vieții satului românesc;
6. – Muzeul Brukenthal este situat în Piața Mare și reunește galerii de artă, cum ar fi:
7. Casa Albastră, Muzeul de Istorie, Muzeul Farmaciei sau Muzeul de vânătoare,
8. – Pasajul Scărilor face parte din centura de fortificații și leagă Orașul de Jos cu
9. Orașul de Sus. Construit în secolul al XIV-lea, este una dintre cele
mai frumoase zone din Sibiu;
10. – Piața Huet. Atracția principală a pieței este Catedrala Evanghelică,
11. construită în perioada 1371-1520, în stil gotic. </string>
12. <string name="poz11">Sighișoara este situată în sudul județului Mureș, pe cursul Târn
avei Mari. Fondat în secolul al XII-lea de către sași, este unul dintre puținele
13. orașe medievale locuite din Europa. Are diferite fortificații specifice orașelor
14. medievale din Transilvania, cum ar fi turnurile meșteșugarilor organizați în bresle, care
administrau câte un turn de apărare. Lungimea zidurilor de apărare este de 960 metri,
15. iar din cele 14 turnuri s-au mai păstrat doar 9 la marginile zidurilor cetății,
16. în afara celui cu ceas aflat în centrul cetății, care a avut rol de punct de observare.
17. Turnul cu Ceas este principalul punct de intrare în cetate, în cadrul căruia se află
18. Muzeul de Istorie al orașului, fiind primul muzeu din România ce redă evoluția
19. meșteșugarilor. Turnul cu Ceas are 64 m înalțime și este prevăzut cu patru niveluri,
20. un balcon și 2 cadrane uriașe de 2,4 m, orientate spre cele două platouri ale
21. cetății Sighișoara. Figurinele din turn semnalează faptul că urmează o nouă zi,
22. fiind un simbol al speranței pentru vremurile mai bune ce vor veni.
23. Printre celelalte obiective ce trebuie avute în vedere se numără: Turnul Cositorilor;
24. Turnul Măcelarilor; Turnul Cizmarilor; Turnul Croitorilor; Turnul Cojocarilor;
25. Turnul Fierarilor; Turnul Frânghierilor; Turnul Tăbăcarilor; Biserica Mănăstirii,
26. Biserica din Deal.
27. Un moment important din istoria orașului îl constituie șederea lui Vlad Dracul, fiul lui
Mircea cel Bătrân, între anii 1431 – 1435.
28. Vlad Dracul fusese încoronat drept domn al Țării Românești și deținea feude întinse pe
29. Olt, în Țara Făgărașului și Almașului. De la Sighișoara, el își exercita de fapt
30. autoritatea asupra sudului Transilvaniei, însă aștepta momentul prielnic să preia puterea
la sud de Carpați. Se presupune că, în perioada șederii în Sighișoara,
31. s-ar fi născut fiul său Vlad Țepeș. </string>
32. <string name="poz12">Transfăgărășanul are un traseu dintre cele mai populare din
33. România, inclusiv din Europa, datorită înălțimii la care a fost construit, a peisajelor
superbe și a numeroaselor serpentine. Transfăgărășanul a fost construit între anii
34. 1970 – 1974. Drumul este spectaculos pentru că străbate munții Făgăraș, cei mai înalți
35. din țară. Atinge o altitudine de 2.042 metri, fiind al doilea drum din România ca
36. altitudine, după Transalpina. Drumul DN7C – Transfăgărașan începe în comuna Bâscov, de
37. lângă Pitești, în direcția Curtea de Argeș și se termină la intersecția cu DN1 între
38. Sibiu și Brașov, în apropierea comunei Cârțișoara, având o lungime totală de 151 km.
39. Transfăgărășanul are în total peste 830 podețe și 27 viaducte.
40. Prima porțiune a Transfăgărășanului trece prin fața hidrocentralei de la Vidraru
41. amplasată subteran în masivul Cetățuia, iar de aici, în apropierea Cetății Poenari,
42. drumul urcă pe serpentine și viaducte, trecând prin trei tunele mai scurte și ajunge
43. la Barajul Vidraru.
44. După baraj, drumul continuă în partea dreaptă de-a lungul lacului Vidraru și apoi începe
45. să urce în serpentine, trecând pe la Cascada Capra, până la Tunelul Bâlea de 887 metri,
cel mai lung din țară, cu o înălțime de 4,4 m, 6 m lățime și un trotuar cu o lățime de
46. 1 m, iluminat, care străbate muntele Paltinului.
47. După Tunelul Bâlea, Transfăgărășanul trece prin rezervația naturală Golul Alpin și Lacul
Bâlea, pe la lacul glaciar Bâlea urmat de o coborâre abruptă în serpentine, prin
48. apropierea cascadei Bâlea
49. La cota 1200, se înalță „Poarta Geniștilor”,iar la cota 1600 se găsește „Poarta
Întâlnirii”. </string>

83 1. <string name="poz13">Barajul Vidraru a fost edificat în perioada 1960 – 1966, pe râul A
rgeș, la 40 de kilometri de Curtea de Argeș, între versanții Pleașa și Vidraru, fiind
2. primul baraj în arc construit în România. Are o înălțime de 166,60 m, iar lungimea
3. coronamentului este de 305 m. Grosimea barajului la bază este 25 m, iar la coronament
4. 6 m.
5. Suprafața lacului este de 893 ha, lungimea de 10,3 km, lățimea maximă este de 2,2 km în
6. zona Valea Lupului – Călugărița și are o circumferință de 28 km, iar adâncimea apei este
de 155 m lângă barajul curbat înalt de 166 m, cu o lungime la coronament de 307 metri.
7. Pe linia barajului, în vârful unui turn prismatic se află monumentul electricității.
8. Apa lacului se folosește pentru producerea de energie electrică.
9. Uzina de energie hidroelectrică Vidraru amplasată subteran la 104 metri adâncime, poate
10. produce într-un an hidrologic mediu, energie electrică
11. de aproximativ 400 GWh, având o capacitate instalată de 220 MW.
12. Venind dinspre Curtea de Argeș spre comuna Cârțișoara, pe drumul ce trece prin fața
13. uzinei hidroenergetice Vidraru, prin dreapta lacului Vidraru se vede Transfăgărășanul,
14. iar noaptea, conturul barajului se poate vedea din avion, fiind luminat electric.
15. </string>
16. </resources>

Anexa 18 – ghid _turistic_menu.xml

84 1. <?xml version="1.0" encoding ="utf-8"?>
2. <menu xmlns:android ="http://schemas.android.com/apk/res/android" >
3.
4. <item android:id ="@+id/listaObiective"
5. android:title ="Lista obiective turistice"
6. android:icon ="@drawable/ic_lista_obiective" />
7.
8.
9. <item android:id ="@+id/galerie"
10. android:title ="Galerie"
11. android:icon ="@drawable/ic_galerie" />
12.
13.
14. <item android:id ="@+id/googleMaps"
15. android:title ="Google Maps"
16. android:icon ="@drawable/ic_google_maps" />
17.
18.
19. <item android:id ="@+id/facebook"
20. android:title ="Facebook"
21. android:icon ="@drawable/ic_facebook" />
22.
23.
24.
25. </menu>

Similar Posts