Aplicație Android tip Ghid turistic [617171]

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ță Tehnologii și Sisteme de Telecomunicații

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

2019

C U P R I N S

Lista figurilor…………………………………………………………………………………………………….. ……………….. 1

Introducere …………………………………………………………………………………………………………….. …………..3

Capitolul 1 – Noțiuni teoretice referitoare la sistemul de operare Android ………………………….. ……… 5

1.1. Exemple de aplicații Android utilizate pentru identificarea obiectivelor turistice ………..5

1.2. Noțiuni generale …………………………………………………………………………………………. ……. 13

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

2.1 Structura aplicației………………………………………………………………………………………. ……. 15

2.2. Arhite ctura aplicației ………………………………………………………………………………….. …… 21

Capitolul 3 – Implementare aplicație …………………………………………………………………………. …….25

3.1 Activități………………………………………………………………………………………………… ………..25

3.1.1 AndroidManifest.xml …………………………………………………………………….. ……..26

3.1.2 MainActivity.java ………………………………….. ……………………………………… ……..27

3.1.3 activity_main.xml ……………………………………………………………………………. …….29

3.2 Fragment e…………………………………………………………………………………………………… …….30

3.2.1 ListaFragment.java …………………………………………………………………………. …….31

3.2.2 fragment_lista.xml ………………………………………………………………………… …….32

3.3. DetailFragment.java …………………………………………………………………………………….. ……32

3.3.1 fragment_ detail .xml………………………………………………………………………… ……33

3.4 GoogleMapsfragment.java …………………………………………………………………………….. ……34

3.5 GalerieFragment.java …………………………………………………………………………………….. …..35

3.5.1 fragment_galerie.xml ………………………………………………….. ……………………. ….35

3.6 FacebookFragment.java …………………………………………………………………………………. …..35

3.6.1 fragment_facebook.xml ……………………………………………………………………. …..36

3.7 nav_graph.xml ……………………………………………………………………………………………… …..36

3.8 strings.xml …………………………………………………………………………………………………. …36

3.9 ghid _turistic_menu.xml ………………………………………………………………………………… …37

3.10 build.gradle …………………………………………………………………………………………………. ..37

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

Concluzii…………………………………………………………………………………………………….. …………….. …..41

Bibliografie…………………………………………………………………. ……………………………………………… …. 43

Anexa 1………………………………………………………………………………………………………. …………………. .44

Anexa 2……………………………. ……………………………………………………………………………………………. . 45

Anexa 3……………………………………………………………………………………………………………. …………….. 47

Anexa 4………………………………………………………………………………………… ………………………………….48

Anexa 5………………………………………………………………………………………………………. ……………………49

Anexa 6……………………………………………. ………………………………………………………………………………50

Anexa 7………………………………………………………………………………………………………. ……………………51

Anexa 8.. …………………………………………………………………………………………………………….. ……………52

Anexa 9…………………………………………………………………………………………… ……………………………….54

Anexa 10……………………………………………………………………………………………………… …………………..55

Anexa 11………………………………………………. ………………………………………………………………………….56

Anexa 12……………………………………………………………………………………………………… …………………..57

Anexa 13……. …………………………………………………………………………………………………………….. ……..58

Anexa 14………………………………………………………………………………………………… ………………………..59

Anexa 15……………………………………………………………………………………………………… …………………..60

Anexa 16……………………………………………………… …………………………………………………………………..61

Anexa 17…………………………………………………………………………………………………………… ……………..62

Anexa 18………………………………………………………………………………………… ………………………………..6 7

Lista figurilor

Figura 1.1 Iconița aplicației Amazing România …………………………………………………………………….. 3
Figura 1. 2 Listarea obiectivelor turistice ………………………………………………………………………………. . 4
Figura 1. 3 Detaliere obiectiv turi stic………………………………………………………………………………………..4
Figura 1. 4 Indicarea pe hartă a locațiilor……………………………………………………………………………… .. 5
Figura 1. 5 Setările aplicației……………………………………………………………………………………………. …… 5
Figura 1. 6 Politica de confidențialitate a aplicației România Uimitoare ……………………………………… 6
Figura 1. 7 Modalitățile de logare în aplicație…………………………………………………………………………… 6
Figura 1. 8 Afișarea unui obiectiv turistic…………………………………………………………………… ………….. 7
Figura 1. 9 Detalierea locației………………………………………………………………………………………….. ……. 7
Figura 1.1 0 Adăugare locație ……………………………………………………….. ……………………………………… 8
Figura 1.11 Meniu aplicație PocketGuide ………………………………………………………………………………. 9
Figura 1.1 2 Exemplu de obiectiv turistic ……………………………………………………………………………… 10
Figura 1.1 3 Listarea obiectivelor turistice audio…………………………………………………………………….. 10
Figura 1.1 4 Exemplu de locați e din apropierea utilizatorului…………………………………………………… 11
Figura 2.1 Navigarea între fragmentele aplicației Ghid turistic………………………………………………….13
Figura 2.2 Iconița aplicației Ghid tu ristic România …………………………………………………………………13
Figura 2.3 Meniul aplicației …………………………………………………………………………………… …………. .14
Figura 2.4 Lista obiectivelor turistice ………………………………………………………………………………….. .15
Figura 2.5 Galeria plicației ……………………………………………………………………………………………. …….16
Figura 2.6 Indicarea locațiilor obiectivelor……………………………………………………………………… …….17
Figura 2.7 Fereastra Facebook………………………………………………………………………. …………………… .18
Figura 2.8 Arhitectura Android………………………………………………………………………………….. ………. .19
Figura 2.9 Gruparea logică a modulelor aplicației ………………………………… ……………………………… .20
Figura 2.10 Structura de pe discul fizic al proiectului ……………………………………………………………. .21
Figura 3.1 Obiectele grafice ale fragmentului………………………………….. …………………………………… .29

1

2

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

Am ales această temă 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 p rimul capitol conține noțiuni teoretice
referitoare la sistemul de operare Android.
Al doilea capitol constă în prezentarea generală a arhitecturii specific e sistemul ui.
Al treilea capitol prezintă detal ii privind implementarea aplicației.
Al patrulea capitol prezintă testarea aplicației și ideile de îmbunătățire din perspectiv a
dezvolt ării ulterioar e 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, folosind mediul de dezvoltare Android Studio.

3

4

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 And roid, 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 necesită versiunea minimă de Android 4.1 (Jelly Bean ), versiunea actuală a aplicației fiind
1.1.3.
Ca dimensiune, aplicația este una robustă, ocupând un spațiu de memorie de 3,9 MB.
Această aplicație solicită permisiunea de a avea acces la:
• accesarea fotografiilor din spațiul de stocare;
• citirea informațiilor din spațiul de stocare;
• modificarea sau ștergerea informațiilor din USB;
• accesarea locației folosind WiFi sau rețelele de telefonie mobilă pentru a determina
locația dispozitivului, iar pentru determinarea cât mai precisă a locației folosindu -se
GPS-ul
• verificarea conexiunii la INTERNET, precum și utilizarea acestuia

Odată ce aplicația a fost instalată pe dispozitivul mobil, pe ecranul utilizatorului va apărea
iconița de mai jos, 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, activități în aer liber, cum ar fi ciclism și evenimente
culturale: festivaluri de muzică, piese de teatru.
5

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 turistic e în funcție de noutate, de distanța măsurată în Km față de locația
curentă, precum și afișarea în ordine alfabetică a obiectivelor turistice.
Utilizatorul are posibilitatea să seteze distanțele, precum și tipul de destinație căutată:
alpinism, ciclism, p ârtii de schi, cascade și lacuri, fortificații, orașe.
Dacă utilizatorul apasă pe , acesta are posibilitatea să caute respectivul obiectiv turistic
în funcție de denumirea acestuia.

6

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;
7

Altele
• acces fără restricții la rețea;
• vizualizare conexiuni la rețea;
• împiedică telefonul să intre în repaus;
• vizualizare conexiuni Wi -Fi;
• serviciul de facturare GooglePlay;
• primirea datelor prin INTERNET.
Odată ce aplicația a fost instalată pe dispozitivul mobil, pe ecranul utilizatorului va apărea
iconița , ce conține numele aplicației.
În momentul deschiderii aplicației prima dată, se va cere acordul utilizatorului referitor la
termenii și condițiile de confidențialitate, precum și la politica de confidențialitate. În cazul refuzului,
aplicația se va închide.

Figura 1. 7 Modalitățile de logare în aplicație

Figura 1. 6 Politica de confidențialitate a aplicației România Uimitoare

8

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 curent e sau se pot alege alte poziți i cu ajutorul hărții Google Maps .

9

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 pentru iOS .
Aplicația prezintă detalii pentru mai mult de 150 destinații turistice. Ea folosește GPS -ul și
vocea pentru a oferi turiștilor un tur virtual.
Turiștii pot s electa limba dorită pentru a putea asculta informațiile și îndrumările despre cele
mai apropiate restaurante și cafenele. Recomandările audio pot fi descărcate pe dispozitivul mobil și
10

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 necesită versiunea minimă de Android 4.1 (Jelly Bean), versiunea actuală a aplicației fiind
4.6.10. Este cotată cu PEGI 3, putând fi folo sită 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
11

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.

12

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 Android.
Sistemul de operare este bazat pe nucleul Linux care oferă software -ul necesar pentru a
coordona atât partea hardware, cât și apli cația de tip Ghid turistic .
Aplicația este scrisă în limbajul de programare Java , fiind un limbaj orientat spre obiecte,
portabil, cu posibilități reduse de erori. De asemenea, oferă simplitate, neutralitate arhitecturală.
Având în vedere că este un limbaj independent de platforma de lucru, aplicația rulează fără nicio
modificare și fără a necesita compilarea ei pe sistemul de operare Linux.
Programul în Java este alcătuit dintr -o listă de definiții de clase și interfețe, în clase fiind
definite datele și comportamentul obiectelor, iar în interfețe, serviciile.
Studiul calității este esențial pentru dezvoltarea aplicațiilor mobile.
Caracteristicile de calitate din punct de veder e tehnic vizează :
➢ capacitatea aplicației de a funcționa fără a genera erori de prelucrare sau întreruperi
necontrolate;

13

➢ 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 o ferite î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ătuit din
cuvinte recunoscute și la alte aplicații , care să îl ghideze pe utilizator în așa fel încât, printr -un număr
cât mai mic de pași, să obțină rezultatele dorite ;
➢ necesitatea de a funcționa 24/24 , ceea ce presupune asigurarea unui nivel de
calitate, astfel încât în orice punct al prelucrărilor, să fie asigurată continuare a 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 concluziilo r să fie realizată cu factor de maximă necesitate;
➢ nivelul de accesibilitate la noile versiuni ale aplicațiilor. La proiectarea și
dezvoltarea aplicațiilor mobile, procesele de mentenanță au un caracter continuu. Este indicat de
utilizatorii să beneficieze de ultimele versiuni, pentru ca aceștia să beneficieze de toate opțiunile și
facilitățile nou implementate. Efectele sociale aduse de ultimele versiuni, se caracterizează prin
includerea de noi parametri, prin creșterea nivelului de agregare a criteriilor de selecție și prin modul
de prezentare a variantelor;
Caracteristicile de calitate ale aplicațiilor mobile:
➢ portabilitatea unei aplicații mobile se realizează fie folosind instrumente care
realizează conversii, fie emulatoare;
➢ fiabili tatea este acea caracteristică care asigură funcționalitatea permanentă a
aplicației, permițând accesul la toate resursele necesare utilizatorului de a -și rezolva problemele.
➢ generabilitatea este caracteristica de calitate care permite utilizatorilor să le
răspundă așteptărilor, chiar dacă aplicația mobilă are un caracter bine delimitat;
➢ mentenabilitatea este caracteristica prin care aplicațiile mobile se mențin în
actualita te, 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.

14

CAPITOLUL 2
Prezentarea generală a arhitecturii specifice sistemului

2.1 Structura aplicației

În cadrul acestui capitol , vor fi prezentate funcționalitățile și detaliile de implementare ale
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
15

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

16

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 .

Figura 2. 4 Lista obiectivelo r turistice

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

17

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

Figura 2. 5 Galeria aplicației

18

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.

Figura 2. 6 Indicarea locațiilor obiectivelor

19

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.

Figura 2.7 Fereastra Facebook

20

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.

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

21

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, tasta tură, USB. Totodată, utilizează mediul
integrat Android Studio, care necesită pachetul Android SDK pentru compilarea și rularea aplicației.
Android SDK include un emulator Pixel 2 XL API 29 pentru rularea și testarea aplicației.
Mediul integrat Android Studio, fiind bazat pe Intellij IDEA, prezintă câteva particularități.
Punctul de start este reprezentat de un proiect (rădăcina arborelui) care conține toate resursele,
respectiv: fișiere de sursă, layout -uri, biblioteci.
La crearea proiectului, modulul implicit generat este app, iar la rădăcina proiectului se află
fișierul AndroidManifest.xml
Fișierul Java cuprinde fișierele cod sursă Java, inclusiv codul de test JUnit ., iar în di rectorul
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 pro iectului poate fi vizualizată din două perspective , și anume:
➢ Gruparea logică a modulelor aplicației

Figura 2.9 Gruparea logică a modulelor aplicației

22

➢ 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 acti vitate ce se repetă sau sunt specifice unei anumite configurații în cadrul
activității, asigurând flexibilitate în dezvoltarea aplicației
– Serviciul înglobează procese mai complexe, permițând derularea unor acțiuni în fundal .
Acesta nu prezintă interfață grafică.
23

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

24

CAPITOLUL 3
Detalii implementare

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 activității nu pr esupune ș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
utilizatorul nu poate interacționa cu aceast a; poate fi urmată de metoda onResume() sau de metoda
onStop(). Este singura metodă care este apelată în mod garantat înainte de a elibera memoria utilizată
de activitate;
➢ onStop() – apelată în momentul în care activitatea este ascunsă ; poate fi urmată de metoda
onRestart(), dacă activitatea urmează să devină din nou vizibilă sau de metoda onDestroy() dacă
activitatea urmează să fie terminată și eliminată din memorie;
➢ onRestart() – apelată după ce activitatea revine în prim -plan; poate fi urmată de metoda
onStart();
➢ onDestroy() – apelată la terminarea activit ății și înainte ca să fie eliminată din memorie.
Fiecare dintre metodele 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 .
25

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.
Metalim bajul XML este derivat din HTML și prezintă o serie de avantaje, precum:
extensibilitatea, validitatea, independența și simplitatea.
Proprietățile aplicației sunt specificate în format XML .
În cadrul fișierului AndroidManifest.xml se regăsesc setările la nivelul aplicației, descrierea
activităților și serviciilor, a permisiunilor, fiind definit pachetul unde se află sursele, versiunea codului
și denumirea versiunii.
AndroidManifest.xml este un fișier XML, cu prima componentă a aplicației <manifest>, în
care sunt incluse etichetele < uses-permission />; < application/> .
Elementul <manifest> include domeniul de nume Android și atributul package corespunzător
numelui pachetului aplicației:

<manifest xmlns:android ="http://schemas.android.com/apk/res/android"
package ="com.example.ghidturistic" >

Eticheta < uses-permission/> specifică permisiunile necesare aplicației.

<uses -permission android:name ="android.permission.ACCESS_FINE_LOCATION" />
<uses -permission android:name ="android.permission.ACCESS_COARSE_LOCATION" />
<uses -permission android:name ="android.permission.INTERNET" />

Pentru ca aplicația să acceseze locația utilizatorului, trebuie 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ă utilizat orul 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ă .

android:allowBackup ="true"
android:icon ="@mipmap/ic_launcher"
android:label ="@string/app_name"
26

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ție i. Acest filtru este necesar pentru ca activitatea să poată fi rulată folosind
intenții implicite .

<activity android:name =”.MainActivity ”>
<intent -filter>
<action android:name =”android.intent.action.MAIN ” />
<category android:name =”android.intent.category.LAUNCHER ” />
</intent -filter>

Cheia prin 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 include codul Java propriu -zis.
Clasa MainActivity extinde clasa AppCompatActivity, care la r ândul ei , extinde clasa
FragmentActivity .
Se declar ă un vector de tip string , în care se enumer ă toate elementele listei.

public String [] item = {" Alba Iulia" ,"Mănăstirea B ârsana" ,"Castelul Bran" ,"Brașov", "Castelul
Peleș","Cluj -Napoca" ,"Mănăstirea Neam ț","Moc ănița","Cetatea R âșnov" ,"Cimitirul Vesel" ,"Sibiu" ,
"Sighi șoara" ,"Transf ăgărăș an","Barajul Vidraru ”};

Suprascrierea metodei onCreate() apelează metoda părinte . Pentru fiecare activitate, se descrie
interfața grafică în cadrul unui fișier .xml , încărcat manual, în cadrul metodei onCreate(), printr -un
apel al metodei setContentView(). Acest fișier este plasat în directorul res/layout și conține referințe
către toate obiectele care vor fi afișate în cadrul ferestrei.

27

@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupNavigation(); }

Metoda onNavigationItemSelected se apelează atunci când un element din listă este selectat.
Ea returnează adevărat sau fals.
Structura switch(id) selecteaz ă unul din cele 4 cazuri , în func ție de valoarea id -lui și execut ă
instruc țiunea specific ă acelui caz, respectiv navigheaz ă cu ajutorul metodei navigate() către unul din
cele 4 fragmente.

@Override
public boolean onNavigationItemSelected( @NonNull MenuItem menuItem) {
menuItem.setChecked( true);
drawerLayout.closeDrawers();
int id = menuItem.getItemId();
switch (id) {
case R.id.listaObiective:
navController.navigate(R.id.listaFragment);
break ;
case R.id.galerie:
navController.navigate(R.id.galerieFragment);
break ;
case R.id.googleMaps:
navController.navigate(R.id.googleMapsFragment);

break ;
case R.id.facebook:
navController.navigate(R.id.facebookFragment);
break ; }
return true; }

Apelarea metodei navigatetoDetailView care prime ște ca parametru poziția și care face
trimiterea către fragmentul detailFragment .

public void navigatetoDetailView(int position){
Bundle bundle = new Bundle();
bundle.putInt("position",position);
navController.navigate(R.id.detailFragment,bundle);
}
Fragmentul detailFragment se regasește in fisierul nav_graph.xml din directorul navigation
și este utilizat pentru a afișa detaliile din lista cu obiectivele turistice .

28

<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ă.
29

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

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 Obiectele 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 cu u șurință adăugate, eliminate sau
modificate ca răspuns la acțiunile utilizatorului .

3.2.1 ListaFragment.java
Clasa ListFragment extinde clasa de bază Fragment și reprezintă un fragment care afișează o
listă de elemente din care utilizatorul poate selecta una sau mai multe intrări.

public class ListaFragment extends ListFragment

Accesul la o componentă vizuală definită în cadrul unui fragment, se realizează cu metoda
onCreateView() din clasa asociată fragmentului și se apelează metoda findViewById() cu
identificatorul componentei. Metoda este apelată de obiectul de tip View instan țiat din resurse .
Clasa ArrayAdapter se bazează pe colecții de date simple, cum ar fi Array sau 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ă.
31

@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 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} 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 .
32

Pentru afi șarea textului se utilizează metoda setText() care prime ște ca parametru o resurs ă de
tip string .

@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 , componentele sunt poziționate implicit la aceleași
coordonate . Containerul este proiectat să afișeze un singur control, prin adăugarea altor controale,
acestea se vor suprapune, componentele fiind poziționate pe axa z ca într -o stivă.
<FrameLayout xmlns:android ="http://schemas.android.com/apk/res/android"
xmlns:tools ="http://schemas.android.com/tools"
android:layout_width ="match_parent"
android:layout_height ="match_parent"
tools:context =".DetailFragment" >
În fișierul fragment_default.xml , pe lângă proprietățile componentelor vizuale , se introduce
și atributul background, care setează imaginea de fund
android:background ="@drawable/background

33

3.4 GoogleMapsfragment.java
În cadrul hărților Google pot fi adăugate marcaje pentru a semnala anumite locații. Clasa
corespunzătoare acestora se numește MarkerOptions.
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() 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() .
ImageView alba= (ImageView)vw.findViewById(R.id.alba);
alba.setImageResource(R.drawable.cetate_alba);

34

3.5.1 fragment_galerie.xml

În fișierul fragment_galerie este definit un NestedScrollView , care conține un container de tip
GridLayot , înălți mea și lățimea acestuia fiind date de dimensiunile componentei NestedScrollView .

</GridLayout>
</androidx.core.widget.NestedScrollView>

Containerul are în alcătuirea sa 14 elemente de tip Imageview, fiecare dintre ele având definit
un id diferit și atribuit ă o altă resurs ă din folder -ul drawable .
Înălțimea și lățimea fiecărei componente de tip ImageView este de 200 dp (pixel independent
de rezolu ție).
Interfa ța grafic ă se bazeaz ă pe clase derivate din clasa View.
Containerul GridLayot oferă un control mai bun pentru poziționarea componentelor față de
containerul TableLayout. Pe cale de consecință, se poate specifica numărul de coloane prin
proprietatea android:columnCount .

<GridLayout
android:id ="@+id/GridLayout"
android:layout_width ="match_parent"
android:layout_height ="match_parent"
android:columnCount ="2"
android:rowCount ="9">

3.6 FacebookFragment.java

Pentru afișarea conținutului HTML și a paginilor Web în cadrul activităților, se utilizează
controlul WebView , derivat din clasa View . Pentru accesul la rețea este necesară includerea
permisiunii android.permission.INTERNET în fișierul AndroidManihfest.xml.
Adresa de unde va fi preluat conținutul este inițializată cu metoda loadUrl().

Proprietățile navigatorului, precum agentul, dimensiunea textului, suportul pentru JavaScript,
salvarea parolelor și datelor din formulare, încărcarea automată a imaginilor, accesul la coordonatele
geografice,etc. sunt controlate prin intermediu l unui obiect de tipul WebSettings obținut prin apelul
metodei getSettings (). Controlul suportă JavaScript , dar acesta nu este implicit activat. Pentru
activare, se va apela metoda setJavaScriptEnabled() din clasa WebSettings .

WebView webView =(WebView)view.findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled( true);
webView.setWebViewClient( new WebViewClient());
webView.loadUrl( "https://www.facebook.com/" );

35

3.6.1 fragment_facebook.xml

În cadrul interfeței grafice este definită o componentă de tip WebView , ce are ca atribut
id-ul webView , iar dimensiunile acesteia sunt aceleași cu dimensiunile containerului.

<WebView
android:id ="@+id/webView"
android:layout_width ="match_parent"
android:layout_height ="match_parent" >
</WebView>

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.

36

3.9 ghid _turistic_menu.xml

Pentru definirea meniului, se creează un fișier xml în directorul res.
Un element de tip <menu> conține unul sau mai multe elemente de tip <item>, cu următoarele
atribute:
– android:id – identificatorul opțiunii de meniu;
– android:title – eticheta opțiunii;
– android:icon – pictograma asociată opțiunii de meniu
Fiecare dintre itemii meniului au un id diferit și câte o imagine atribuită din folderul drawable.
<menu xmlns:android ="http://schemas.android.com/apk/res/android" >
<item android:id ="@+id/listaObiective"
android:title ="Lista obiective turistice"
android:icon ="@drawable/ic_lista_obiective" />

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
-compileSd kVersion – 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 aplic aț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"
}
37

➢ dependencies – reprezintă bibliotecile de care depinde aplicația pentru a putea fi rulată
dependencies {
implementation fileTree( dir: 'libs' , include : ['*.jar' ])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy -support -v4:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso -core:3.2.0'
implementation 'com.google.android.gms:play -services -maps:17.0.0'
}

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

38

CAPITOLUL 4
Teste și analiza rezultatelor obținute

Testarea unei aplicații reprezintă etapa cea mai complexă din ciclul de dezvoltare software,
deoarece se are în vedere validarea funcționalităților noi și a celor care au fost dezvoltate anterior .
Aplicațiile dezvoltate în Android urmează aceleași principii ca toate aplicațiile software.

Testele care se scriu pentru o aplicație sunt împărțite în trei categorii, după impactul pe care
îl au asupra codului :

➢ teste mici („small tests”) ;
➢ teste medii („medium tests”) ;
➢ teste mari („large tests”)

Aplicația dispune de o interfață intuitivă ce permite utilizatorului să selecteze din meniu o
anumită opțiune.

Îmbunătățirile ce pot fi aduse aplicației constau în :
– adăugarea în serviciul Google M aps a locației utilizatorului și măsurarea distanței în Km până
la unul din obiectivele turistice selectate;
– adăugarea unui buton de căutare în fereastra listei , ce permite găsirea unui element din listă
în funcție de nume ;
– personalizarea marker -ului ce indică locația unui obiectiv turistic;
– posibilitatea de a selecta o anumită imagine din Galerie și navigarea între diferitele imagini
din cadrul Galeriei;
– extinderea obiectivelor turistice accesibile utilizatorului.

39

40

CONCLUZII

Prezenta lucrare are rolul de a oferi turiștilor posibilitatea de a vizualiza detalii despre
principalele obiective turistice din țara noastră , cum ar fi: Cetatea Alba Carolina , Castelul Bran ,
Castelul Peleș , Brașov, Cluj-Napoca , Sibiu, Sighișoara , Mănăstirea Bârsana , Mănăstirea Neamț ,
Mocăni ța, Cetatea Râșnov , Cimitirul Vesel , Transfăgărășanul , Barajul Vidraru .
Funcționarea aplicației permite utilizatorului să acceseze resursele acesteia din orice loc, în
orice moment. Corectitudinea prelucrărilor este astfel percepută, încât utilizatorul află cu exactitate
locația. Prin urmare, nivelul de corectitudine este în a șa fel definit, încât se vede cu claritate că
succesiunea de opțiuni care a dus la un anumit rezultat aparține exclusiv utilizatorului.
Caracteristicile economice avute în vedere, se referă la:
➢ necesarul de resurse pentru a lansa în execuție aplicația, cee a 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 pent ru efectuarea de variante construite
de către utilizator;
➢ schimbarea structurii fondului de timp la nivelul utilizatorului în condițiile creșterii
încrederii în fluxurile construite după implementarea aplicației. Împrejurarea că pe telefonul mobil
este în cercată 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 îm bună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 d e 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.

41

42

BIBLIOGRAFIE

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

2. Liviu Șerbănescu , Dezvoltarea Aplicațiilor Pentru Dispozitivele Mobile , Universitatea
Hyperion

3. Lucrarea 5 Aplicații Android (în format electronic la adresa
http://ares.utcluj.ro/cm_2018_files/l5.pd , accesat la data de 05.08.2019

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

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

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

43

Anexa 1 – AndroidManifest.xml

44 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
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.NavigationUI;
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. setupWithNavC ontroller(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. }

46

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

47 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:layout_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

48 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.fragm ent.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 – Lista_fragment.xml

49 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

50 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 – Detail_fagment.xml

51 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 – GoogleMapsfragment.java

52 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.android.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 OnMapReadyCallbac k{
22.
23. GoogleMap mGoogleMap;
24. View mView;
25.
26. public GoogleMapsFragment(){}
27.
28. @Override
29. public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceSt
ate);}
30.
31. @Override
32. public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle s
avedInstanceState){
33. mView = inflater.inflate(R.layout.fragment_google_maps,container, false);
34. return mView;
35. }
36.
37. @Override
38. public void onViewCreated( @NonNull View view, @Nullable Bundle savedInstanceSta
te) {
39. super.onViewCreated(view, savedInstanceState);
40. SupportMapFragment mapFragment = (SupportMapFragment)getChildFragmentManager().
findFragmentById(R.id.map);
41. mapFragment.getMa pAsync(this);
42. }
43.

53 42. LatLng albaCarolina = new LatLng(46.0674191 ,23.5664645 );
43. googleMap.addMarker( new MarkerOptions().position(albaCarolina).title( "Cetatea Alb
a Carolina" ).snippet( "Cetate Alba Iulia"));
44.
45. LatLng Barsana = new LatLng(47.793255900000005 ,24.091809371340673 );
46. googleMap.addMarker( new MarkerOptions().position(Barsana).title( "Manastirea Barsa
na").snippet( "Manastirea Barsana" ));
47.
48. LatLng Bran = new LatLng(45.5150774 ,25.367237292659574 );
49. googleMap.addMarker( new MarkerOptions().position(Bran).title( "Castelul Bran").sni
ppet("Castelul Bran"));
50.
51. LatLng Brasov = new LatLng(45.6523093 ,25.6102746 );
52. googleMap.addMarker( new MarkerOptions().position(Brasov).title( "Brasov" ).snippet(
"Brasov" ));
53.
54. LatLng Peles= new LatLng(45.36002715 ,25.54266688425395 );
55. googleMap.addMarker( new MarkerOptions().position(Peles).title( "Castelul Peles").s
nippet("Castelul Peles"));
56.
57. LatLng Cluj = new LatLng(46.769379 , 23.5899542 );
58. googleMap.addMarker( new MarkerOptions().position(Cluj).title( "Orasul Cluj-
Napoca").snippet( "Orasul Cluj-Napoca"));
59.
60. LatLng Neamt = new LatLng(47.2632559 , 26.2086817 );
61. googleMap.addMarker( new MarkerOptions().position(Neamt).tit le("Manastirea Neamt")
.snippet( "Manastirea Neamt"));
62.
63. LatLng Mocanita = new LatLng(47.7147472 ,24.4430182 );
64. googleMap.addMarker( new MarkerOptions().position(Mocanita).title( "Mocanita" ).snip
pet("Mocanita" ));
65.
66. LatLng Rasnov = new LatLng(47.7147472 ,24.4430182 );
67. googleMap.addMarker( new MarkerOptions().position(Rasnov).title( "Rasnov" ).snippet(
"Rasnov" ));
68.
69. LatLng Sapanta = new LatLng(47.9713649 ,23.694722063363862 );
70. googleMap.a ddMarker( new MarkerOptions().position(Sapanta).title( "Cimitirul Vesel-
Sapanta" ).snippet( "Cimitirul Vesel-Sapanta" ));
71.
72. LatLng Sibiu = new LatLng(45.7973912 ,24.1519202 );
73. googleMap.addMarker( new MarkerOptions().position(Sibiu).title( "Orasul Sibiu").sni
ppet("Orasul Sibiu"));
74.
75. LatLng Sighisoara = new LatLng(45.7973912 ,24.1519202 );
76. googleMap.addMarker( new MarkerOptions().position(Sighisoara).title( "Orasul Sighis
oara").snippet( "Orasul Sighisoara" ));
77.
78. LatLng Transfagarasan = new LatLng(45.608886 ,24.6160543 );
79. googleMap.addMarker( new MarkerOptions().position(Transfagarasan).title( "Transfaga
rasan").snippet( "Transfagarasan" ));
80.
81. LatLng Vidraru = new LatLng(45.36630085 , 24.631485277106417 );
82. googleMap.addMarker( new MarkerOptions().position(Vidraru).title( "Barajul Vidraru"
).snippet( "Barajul Vidraru" ));
83.
84.
85. }
86.
87. }

Anexa 9 – fragment_google_maps.xml

54 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:layout_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

55 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, Bundle sa
vedInstanceState) {
15.
16. View vw= inflater.inflate(R.layout.fragment_galerie, container, false);
17.
18. ImageView alba= (ImageView)vw.findViewById(R.id.alba);
19. alba.setImageResource(R.drawable.cetate_alba);
20.
21. ImageView barsana= (ImageView)vw.findViewById(R.id.barsana);
22. barsana.setImageResource(R.drawable.barsana);
23.
24. ImageView bran = (ImageView)vw.findViewById(R.id.bran);
25. bran.setImageResource(R.drawable.bran);
26.
27. ImageView brasov = (ImageView)vw.findViewById(R.id.brasov);
28. brasov.setImageResource(R.drawable.brasov);
29.
30. ImageView peles= (ImageView)vw.findViewById(R.id.peles);
31. peles.setImageResource(R.drawable.castelul_peles);
32.
33. ImageView cluj= (ImageView)vw.findViewById(R.id.cluj);
34. cluj.setImageResource(R.drawable.cluj_napoca);
35.
36. ImageView neamt= (ImageView)vw.findViewById(R.id.neamt);
37. neamt.setImageResource(R.drawable.manastirea_neamt);
38.
39. ImageView mocanita = (ImageView)vw.findViewById(R.id.mocanita);
40. mocanita.setImageResource(R.drawable.mocanita);
41.
42. ImageView rasnov = (ImageView)vw.findViewById(R.id.rasnov);
43. rasnov.setImageResource(R.drawable.rasnov );
44.
45. ImageView sapanta= (ImageView)vw.findViewById(R.id.sapanta);
46. sapanta.setImageResource(R.drawable.sapanta);
47.
48. ImageView sibiu= (ImageView)vw.findViewById(R.id.sibiu);
49. sibiu.setImageResource(R.drawable.sibiu);
50.
51. ImageView sighisoara= (ImageView)vw.findViewById(R.id.sighisoara);
52. sighisoara.setImageResource(R.drawable.sighishoara);
53.
54. ImageView transfagarasan= (ImageView)vw.findViewById(R.id.transfagarasan);
55. transfagarasan.setImageResource(R.drawable.transfagarasan);
56.
57. ImageView vidraru= (ImageView)vw.findViewById(R.id.vidraru);
58. vidraru.setImageRes ource(R.drawable.vidraru);
59.
60. return vw; }}
61. }
62. }

Anexa 11 – fragment_galerie.xml

56 1. <ImageView
2. android:id ="@+id/neamt"
3. android:layout_width ="200dp"
4. android:layout_height ="200dp"
5. android:src ="@drawable/manastirea_neamt"
6. />
7.
8. <ImageView
9. android:id ="@+id/mocanita"
10. android:layout_width ="200dp"
11. android:layout_height ="200dp"
12. android:src ="@drawable/mocanita" />
13.
14. <ImageView
15. android:id ="@+id/rasnov"
16. android:layout_width ="200dp"
17. android:layout_height ="200dp"
18. android:src ="@drawable/rasnov" />
19.
20. <ImageView
21. android:id ="@+id/sapanta"
22. android:layout_width ="200dp"
23. android:layout_height ="200dp"
24. android:src ="@drawable/sapanta" />
25.
26.
27. <ImageView
28. android:id ="@+id/sibiu"
29. android:layout_width ="200dp"
30. android:layout_height ="200dp"
31. android:src ="@drawable/sibiu"
32. />
33. <ImageView
34. android:id ="@+id/sighisoara"
35. android:layout_width ="200dp"
36. android:layout_height ="200dp"
37. android:src ="@drawable/sighishoara"
38. />
39. <ImageView
40. android:id ="@+id/transfagarasan"
41. android:layout_width ="200dp"
42. android:layout_height ="200dp"
43. android:src ="@drawable/transfagarasan"
44. />
45. <ImageView
46. android:id ="@+id/vidraru"
47. android:layout_width ="200dp"
48. android:layout_height ="200dp"
49. android:src ="@drawable/vidraru" />
50.
51. </GridLayout>
52. </androidx.core.widget.NestedScrollView>

Anexa 12 – FacebookFragment.java

57 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, Bundl
e savedInstanceState) {
18.
19. View view = inflater.inflate(R.layout.fragment_facebook, container, false);
20. WebView webView =(WebView)view.findViewById(R.id.webView);
21. webView.getSe ttings().setJavaScriptEnabled( true);
22. webView.setWebViewClient( new WebViewClient());
23. webView.loadUrl( "https://www.facebook.com/" );
24. return view;
25. }
26. }

Anexa 13 – fragment _facebook .xml

58 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

59 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.annotation.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

60 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

61 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.xml

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

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

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

65 111. <string name ="poz10" >Orașul Sibiu este situat în partea sudică a Transilvaniei, pe râul Cibin.
112. Printre cele mai atractive obiective turistice se numără:
113. – Muzeul Astra, unul dintre puținele locuri unde se mai găsesc gospodăriile specifice fiecarei zone rurale, așa cu
m au fost ele construite odinioară. Întregul ansamblu este o reprezentare a vieții satului românesc;
114. – Muzeul Brukenthal este situat în Piaț a Mare și reunește galerii de artă, cum ar fi: Casa Albastră, Muzeul de
115. Istorie, Muzeul Farmaciei sau Muzeul de vânătoare,
116. – Pasajul Scărilor face parte din centura de fortificații și leagă Orașul de Jos cu Orașul de Sus. Construit în
117. secolul al XIV-lea, este una dintre cele mai frumoase zone din Sibiu;
118. – Piața Huet. Atracția principală a pieței este Catedrala Evanghelică, construită în perioada
119. 1371 -1520, în stil gotic.
120. </string>
121. <string name ="poz11" >Sighișoara este situată în sudul județului Mureș, pe cursul Târnavei Mari. Fondat în
122. secolul al XII-lea de către sași, este unul dintre puținele orașe medievale locuite din Europa.
123. Are diferite fortificații specifice orașelor medievale din Transilvania, cum ar fi turnurile meșteșugarilor
124. organizați în bresle, care administrau câte un turn de apărare. Lungimea zidurilor de apărare este de 960 metri,
iar din cele 14 turnuri s-au mai păstrat doar 9 la marginile zidurilor cetății, în afara celui cu ceas aflat în
125. centrul cetății, care a avut rol de punct de observare.
126. Turnul cu Ceas este principalul punct de intrare în cetate, în cadrul căruia se află Muzeul de Istorie al orașului,
127. fiind primul muzeu din România ce redă evoluția meșteșugarilor. Turnul cu Ceas are 64 m înalțime și este
128. prevăzut cu patru niveluri, un balcon și 2 cadrane uriașe de 2,4 m, orientate spre cele două platouri ale cetății
129. Sighișoara. Figurinele din turn semnalează faptul că urmează o nouă zi, fiind un simbol al speranței pentru
130. vremurile mai bune ce vor veni.
131. Printre celelalte obiective ce trebuie avute în vedere se numără: Turnul Cositorilor; Turnul Măcelarilor;
132. Turnu l Cizmarilor; Turnul Croitorilor; Turnul Cojocarilor; Turnul Fierarilor; Turnul Frânghierilor;
133. Turnul Tăbăcarilor; Biserica Mănăstirii, Biserica din Deal.
134. Un moment important din istoria orașului îl constituie șederea lui Vlad Dracul, fiul lui Mircea cel Bătrân, între
135. anii 1431 – 1435. Vlad Dracul fusese încoronat drept domn al Țării Românești și deținea feude întinse pe Olt,
136. în Țara Făgărașului și Almașul ui. De la Sighișoara, el își exercita de fapt autoritatea asupra sudului
137. Transilvaniei, însă aștepta momentul prielnic să preia puterea la sud de Carpați. Se presupune că, în perioada
138. șederii în Sighișoara, s-ar fi născut fiul său Vlad Țepeș.
139.
140. </stri ng>

66 141. <string name ="poz12" >Transfăgărășanul are un traseu dintre cele mai populare din România, inclusiv din
142. Europa, datorită înălțimii la care a fost construit, a peisajelor superbe și a numeroaselor serpentine.
143. Transfăgărășanul a fost construit între anii 1970 – 1974. Drumul este spectaculos pentru că străbate munții
144. Făgăraș, cei mai înalți din țară. Atinge o altitudine de 2.042 metri, fiind al doilea drum din România ca
145. altitudine, după Transalpina. Drumul DN7C – Transfăgărașan începe în comuna Bâscov, de lângă Pitești,
146. în direcția Curtea de Argeș și se termină la intersecția cu DN1 între Sibiu și Brașov, în apropierea comunei
147. Cârțișoara, având o lungime totală de 151 km. Transfăgărășanul are în total peste 830 podețe și 27 viaducte.
148. Prima porțiune a Transfăgărășanului trece prin fața hidrocentralei de la Vidraru amplasată subteran în masivul
Cetățuia, iar de aici, în apropierea Cetății Poenari, drumul urcă pe serpentine și viaducte, trecând prin trei tunele
mai scurte și ajunge la Barajul Vidraru.
149. După baraj, drumul continuă în partea dreaptă de-a lungul lacului Vidraru și apoi începe să urce în serpentine,
150. 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,
151. 6 m lățime și un trotuar cu o lățime de 1 m, iluminat, care străbate muntele Paltinului.
152. După Tunelul Bâlea, Transfăgărășanul trece prin rezervația naturală Golul Alpin și Lacul Bâlea, pe la lacul
153. glaciar Bâlea urmat de o coborâre abruptă în serpentine, prin apropier ea cascadei Bâlea
154. La cota 1200, se înalță „Poarta Geniștilor”, iar la cota 1600 se găsește „Poarta Întâlnirii”.
155. </string>
156. <string name ="poz13" >Barajul Vidraru a fost edificat în perioada 1960 – 1966, pe râul Argeș, la 40 de
157. kilometri de Curtea de Argeș, între versanții Pleașa și Vidraru, fiind primul baraj în arc construit în România.
158. Are o înălțime de 166,60 m, iar lungimea coronamentului este de 305 m. Grosimea barajului la bază este 25 m,
159. iar la coronament 6 m.
160. Suprafața lacului este de 893 ha, lungimea de 10,3 km, lățimea maximă este de 2,2 km în zona Valea Lupului –
161. Călugărița și are o circumferință de 28 km, iar adâncimea apei este de 155 m lângă barajul curbat înalt
162. de 166 m, cu o lungime la coronament de 307 met ri. Pe linia barajului, în vârful unui turn prismatic se află
163. monumentul electricității. Apa lacului se folosește pentru producerea de energie electrică.
164. Uzina de energie hidroelectrică Vidraru amplasată subteran la 104 metri adâncime, poate produce
165. într-un an hidrologic mediu, energie electrică de aproximativ 400 GWh, având o capacitate instalată
166. de 220 MW. Venind dinspre Curtea de Argeș spre comuna Cârțișoara, pe drumul ce trece prin fața uzinei
167. hidroenergetice Vidraru, prin dreapta lacului Vidraru se vede Transfăgărășanul, iar noaptea, conturul barajului
168. se poate vedea din avion, fiind luminat electric.
169. </string>
170. </resources>

Anexa 18- ghid _turistic_menu.xml

67 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