aplikacija s geoprostornom - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja...

44
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 4660 APLIKACIJA S GEOPROSTORNOM OGRADOM ZA UREĐAJE S OPERACIJSKIM SUSTAVOM ANDROID Josip Bago Zagreb, lipanj 2016.

Upload: buithu

Post on 29-Aug-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

ZAVRŠNI RAD br. 4660

APLIKACIJA S GEOPROSTORNOM OGRADOM ZA UREĐAJE S OPERACIJSKIM

SUSTAVOM ANDROID

Josip Bago

Zagreb, lipanj 2016.

Page 2: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,
Page 3: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,
Page 4: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

Sadržaj

1. Uvod.....................................................................................................................1

2. Struktura i razvoj Android aplikacije .....................................................................2

2.1 Razvoj aplikacije u razvojnom okruženju Android Studio ...............................2

2.2 Struktura i rad Android aplikacije ....................................................................3

2.2.1 Aktivnost ...................................................................................................5

2.2.2 Usluga ......................................................................................................6

2.2.3 Primatelj namjera......................................................................................6

2.2.4 Pružatelj usluga........................................................................................7

2.2.5 Namjera ....................................................................................................7

3. Google karte i lokacijski servisi dostupni putem Android SDK.............................8

3.1 Google karte ...................................................................................................8

3.2 Geoprostorne ograde....................................................................................12

4. Androidova aplikacija GeoFER ..........................................................................15

4.1 Opis Androidove aplikacije GeoFER ............................................................15

4.2 Implementacija usluga Google Play servisa .................................................20

4.2.1 Ugrađivanje Google Play Services knjižnice u aplikaciju .......................20

4.2.2 Ostvarivanje pristupa na Google Play servis..........................................21

4.2.3 Provjera dostupnosti Google Play servisa..............................................23

4.3 Implementacija Google karte ........................................................................24

4.3.1 Izrada API ključa za implementaciju Google karata ...............................24

4.3.2 Stvaranje mape, markera i krugova........................................................26

4.4 Izvedba GeoFER aplikacije ..........................................................................27

4.4.1 Implementacija geoprostornih ograda ....................................................30

4.4.1.1 Stvaranje geoprostorne ograde........................................................30

4.4.1.2 Brisanje geoprostorne ograde..........................................................33

Page 5: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

5. Zaključak ............................................................................................................35

Literatura ................................................................................................................36

Sažetak ..................................................................................................................37

Abstract ..................................................................................................................38

Skraćenice .............................................................................................................39

Page 6: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

1

1. Uvod

Pojava pametnih telefona sa zaslonima osjetljivima na dodir otvorila je vrata

mobilnim aplikacijama. 2008. godine na tržištu se pojavio prvi pametni telefon sa

operacijskim sustavom Android zajedno sa prvom verzijom Android SDK alata za

razvoj mobilnih aplikacija, a Google je četiri godine nakon toga službeno otvorio

Play Store trgovinu sa mobilnim aplikacijama koja omogućuje korisnicima skidanje

mobilnih aplikacija. Kroz cijelo to vrijeme do danas, mobilne aplikacije stvorile su

tržište vrijedno 160 milijardi dolara prema današnjim pokazateljima, a Google je

izdao preko dvadeset verzija SDK alata i raznoraznih API-ja koji su razvojnim

programerima omogućile stvaranje mobilnih aplikacija za raznorazne namjene.

Android SDK je skup alata za razvoj mobilnih aplikacija za Android operativni

sustav koje razvojni programer koristi za pristup raznim servisima, te omogućuje

izradu aplikacije sa različitim kompomentama i funkcionalnostima. Jedan od API-ja

koje Google nudi kroz svoje SDK alate jest i Location API koji pruža geolokacijske

usluge. Geolokacijske usluge koje pružaju mobilni uređaji i operativni sustavi koji

ih podržavaju danas su sastavni dio velikog broja mobilnih aplikacija na tržištu.

Tako primjerice Facebook mobilna aplikacija omogućuje "check in" funkcionalnost

kojom korisnik može svoju lokaciju podijeliti sa svojim prijateljima na mreži, dok

aplikacija Yik Yak koristi geoprostorne ograde kojima zabranjuje upotrebu

aplikacije na određenim područjima.

Ovaj rad se bavi izradom mobilne aplikacije za operativni sustav Android s

geoprostornim ogradama. U skladu s time, opisana je struktura i način rada

mobilne aplikacije za operacijski sustav Android, te su opisani SDK alati vezani za

geolokacijske usluge i prikaz Google karata. U sklopu ovog rada izrađena je

mobilna aplikacija „GeoFER“, te je opisana njezina izrada. Aplikacija „GeoFER“

omogućava korisniku stvaranje, uređivanje i brisanje geoprostornih ograda na

interaktivnoj Google karti. Geoprostorne ograde imaju funkciju okidača koji se

aktivira kada korisnik uđe u određeno područje, čime korisnik dobije „push

notifikaciju“. Aplikacija „GeoFER“ je besplatna i dostupna na Google Play store-u

te se može preuzeti putem ovog linka -

https://play.google.com/store/apps/details?id=geofer.com.geofer .

Page 7: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

2

2. Struktura i razvoj aplikacije za Android

Aplikacije za Android pišu se u programskim jezicima Java i XML. Kompilirani kod

se arhivira u Android paketima, označenima sufiksom.apk, zajedno sa svim

podacima i datotekama nužnima za aplikaciju. U takvom obliku se aplikacija

distribuira i instalira na pokretne uređaje. Mobilna aplikacija za operacijski sustav

Android izrađuje se u razvojnom okruženju koje se zove Android Studio.

Svaka aplikacija radi u vlastitom Linux procesu koji operacijski sustav Android

pokreće kada se treba izvršiti bilo koji dio koda aplikacije, a zaustavlja ga kada

više nije potreban. Aplikacije se izvršavaju neovisno jedna o drugoj i svaka ima

svoj Linux identifikator (ID).

2.1 Razvoj aplikacije u razvojnom okruženju Android Studio

Do prije par godina veliki broj programera je razvijao mobilne aplikacije putem

ostalih razvojnih okruženja kao što je primjerice Eclipse. No, Google je izradio

Android Studio u cilju objedinjenja svih usluga u jednom razvojnom okruženju nad

kojim Google ima kontrolu i može graditi sve bolje usluge koje olakšavaju izradu

aplikacija. Prema tome, koristeći Android Studio razvojni programer može sa

lakoćom pristupati SDK alatima i Googleovim API-jima, a na gotovo tjednoj bazi

Android Studio se nadograđuje i postaje sve brži i efikasniji u svome radu.

Neke od usluga koje Android Studio nudi su:

Sustav Gradle koji omogućuje jednostavno dodavanje programskih

knjižnica u projekt jednom linijom koda kojom se deklarira željena knjižnica i

njezina verzija. Android Studio kod pokretanja prevođenja koda sam skida i

ugrađuje programske knjižnice u projekt

Brz i bogat funkcionalnostima emulator koji omogućava razvojnom

programeru da emulira mobilni uređaj sa operativnim sustavom Android

Page 8: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

3

Okruženje koje omogućuje razvoj aplikacija za sve platforme (mobitele,

tablete, Android sat itd.)

„Instant Run“ funkcionalnost koja omogućava direktno ubacivanje promjena

u kodu .apk datoteku bez potrebe za ponovnom kompilacijom koda, te time

skraćuje vrijeme potrebno za rad razvojnom programeru

Gotovi predlošci koda za različite namjene

Veliki spektar alata za testiranje i otklanjanje pogrešaka, te alati za praćenje

rada aplikacije na testnom uređaju

2.2 Struktura i rad aplikacije za Android

Aplikacija za Android je strukturirana u stablo direktorija u kojemu se nalaze

glavne komponente koje razvojni programer modificira prilikom izrade aplikacije

kreirajući pritom grafičko sučelje, te funkcionalnosti i interakciju između pojedinih

ekrana:

src/ - sadrži pakete sa Java datotekama s izvornim kodom

res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova,

definicije korisničkih sučelja pohranjene u obliku XML datoteka, te

vrijednosti parametera koje definiraju generalni izgled alatnih traka i boja

unutar aplikacije

manifests/ - sadrži AndroidManifest.xml datoteku. U ovoj datoteci aplikacija

deklarira svoje komponente kako bi Android sustav znao da one postoje. Te

komponente su primjerice različite klase koje su vezane za ekrane u

aplikaciji, biblioteke koje se koriste u aplikaciji i dozvole koje aplikacija

zahtjeva za svoj normalan rad.

Gradle direktoriji – u ovim direktorijima razvojni programer deklarira

programske knjižnice koje aplikacija koristi, te definira neke osnovne

značajke aplikacije kao što je primjerice verzija aplikacije

Page 9: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

4

Svaka aplikacija radi na način da koristi četiri vrste komponenata:

Aktivnost (activity)

Usluga (service)

Primatelj namjera (broadcast receiver)

Pružatelj sadržaja (content provider)

Ove komponente sastavni su dio aplikacije te razvojni programer može putem njih

obavljati sve operacije koje su potrebne za ostvarenje određenih funkcionalnosti.

Poznavanje načina rada ovih komponenti je bitno kod razvoja aplikacije kako bi se

ispravno mogle implementirati funkcionalnosti i različiti ekrani u aplikaciji.

Isto tako ove komponente omogućavaju jednu bitnu značajku rada Android

aplikacije, a to je da Android aplikacija može koristit elemente druge aplikacije

(ako se definiraju dozvole od strane prve aplikacije). Ova značajka je ostvarena

putem komponenti na način da ne postoji samo jedna točka ulaska u aplikaciju –

ne postoji main() metoda. Svaka je aplikacija napravljena od osnovnih

komponenti koje sustav može instancirati i pokrenuti po potrebi. Ovom značajkom

se smanjuje potreba za pisanjem istih dijelova koda u različitim aplikacijama.

Primjer korištenja ove značajke prisutan je u aplikaciji koja je razvijena u sklopu

ovoga rada. Ta aplikacija komunicira sa aplikacijom Google Play Services koja je

instalirana na svakom uređaju koji pokreće operacijski sustav Android i koja sadrži

pojedinačne Googleove usluge i radi kao pozadinski servis na operativnom

sustavu Android. Aplikacija se koristi programskom knjižnicom usluga Google Play

i preko nje je u međudjelovanju sa pozadinskom uslugom Google Play Services

aplikacije koja provodi potrebne operacije prema Googleovim API-jima.

Komponente se u Android-u aktiviraju objektom klase Intent u kojem se

specificira radnja koja se treba izvršiti i predaje se metodi koja aktivira određenu

komponentu.

Page 10: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

5

2.2.1 Aktivnost

Aktivnost predstavlja grafičko korisničko sučelje, ekran koji korisnik u tom trenutku

vidi. Koliko će aplikacija imati aktivnosti ili bilo kojih drugih osnovnih komponenti i

kako će one surađivati, stvar je dizajna i namjene aplikacije. No, svaka aplikacija

mora imati početnu aktivnost koja se prikazuje korisniku kada pokrene aplikaciju.

Postoje tri stanja u kojima se aktivnost može naći:

stanje izvođenja - ekran određene aktivnosti je prikazan na ekranu

pauzirano stanje - ekran je vidljiv korisniku ali ga korisnik trenutno ne koristi.

zaustavljeno stanje – ekran druge aktivnosti je aktivan i nalazi se iznad

pauzirane aktivnosti

Prilikom stvaranja aktivnosti kod paljenja ekrana vezanog za aktivnost, te prilikom

životnog ciklusa aktivnosti koji se može odvijati u prethodno navedena tri stanja,

izvršavaju se metode Activity klase. Te su metode vidljive na Slici 1.1 koja

ujedno i prikazuje životni ciklus aktivnosti. Poznavanje životnog ciklusa aktivnosti

je iznimno bitno kod implementacije ekrana i same aplikacije. Nadjačavanjem ovih

metoda moguće je izvršavati određene zadatke unutar same aktivnosti u ovisnosti

o trenutnom stanju ekrana.

Slika 1.1 – prikaz životnog ciklusa komponente aktivnost

Page 11: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

6

Aktivnost se stvara metodom onCreate(), a pokreće metodom onStart().

Tada aktivnost radi, tj. u aktivnom je stanju. Metodom onPause() prelazi u

pauzirano stanje iz kojega se u aktivno može vratiti pozivom metode

onResume(). Isto tako, ako se aktivnost zaustavi radi primjerice prelaska

korisnika na novi ekran poziva se metoda onStop(). Da bi se vratio u prvi plan iz

stanja kada se ne vidi na ekranu, mora se pozvati metoda onRestart().

Zaustavlja se metodom onDestroy().

2.2.2 Usluga

Ova komponenta nema grafičko sučelje i radi u pozadini. Njen životni ciklus nije

ograničen trenutnim prikazom sučelja na ekranu kao kod aktivnosti, usluga radi u

neodređenom vremenskom razdoblju. Koristi se za zadatke koji se mogu izvoditi u

pozadini.

Usluga se koristi u aplikaciji razvijenoj u sklopu ovog rada s namjenom da dok radi

u pozadini, isporuči obavijest korisniku kada prijeđe granicu geoprostorne ograde.

2.2.3 Primatelj namjera

Zadatak komponenti ovog tipa je da primaju obavijesti o višeodredišnom

razašiljanju (engl. broadcast) i reagiraju na njih. U radu aplikacija i sustava

pojavljuje se mnogo takvih obavijesti, npr. obavijest da ponestaje baterije u

mobilnom uređaju ili primjerice da su aplikacijama koje ih trebaju dostupni podaci

prikupljeni s Interneta. Aplikacija može imati bilo koji broj primatelja namjera koji

mogu odgovarati na sve informacije koje se smatraju važnima.

Ove komponente također nemaju grafičko sučelje, ali mogu pokrenuti određenu

aktivnost kao odgovor na informaciju koju su dobili ili umjesto toga mogu koristiti

upravitelja obavijesti.

Page 12: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

7

2.2.4 Pružatelj usluga

Ova komponenta se koristi za isporuku skupa podataka aplikacije drugim

aplikacijama. Ti podaci mogu se pohraniti u datotečni sustav kao datoteka ili

u obliku SQLite baze podataka. Osnovna klasa je ContentProvider koja sadrži

standardni skup metoda koje omogućuju aplikacijama preuzimanje ili pohranu

tipova podataka s kojima rade. Aplikacije ne pozivaju te metode izravno, nego

pomoću objekta ContentResolver. Operacijski sustav se brine o pokrenutosti

procesa u slučajevima kada je aplikacije aktivna i kada trenutno nije aktivna.

2.2.5 Namjera

Asinkrona poruka za aktiviranje komponenata u Androidu šalje se tako da se

instancira objekt klase Intent u kojemu se specificira sadržaj poruke. Za

aktivnost i uslugu ta poruka, između ostalog, sadrži i ime radnje koja se zahtijeva i

URI (engl. Uniform Resource Identifier) datoteke nad kojom ta radnja treba biti

obavljena, dok za primatelja namjera sadrži ime radnje koja je objavljena (npr.

može obavijestiti strane koje ga osluškuju da je pritisnut gumb za pokretanje

kamere).

Za aktivaciju različitih komponenti postoje različite metode kojima se proslijeđuje

Intent.

Aktivnost se pokreće metodom Context.startActivity(). U slučaju

da jedna aktivnost pokreće drugu i od nje očekuje rezultat onda se koristi

metoda Context.startActivityForResult()

Usluga se pokreće metodom Context.startService()

Višeodredišno odašiljanje pokreće se metodom Context.sendBroadcast()

Objekt klase Intent može eksplicitno navesti ime ciljane komponente – u tom

slučaju Android pronalazi tu komponentu na temelju deklaracija u datoteci

AndroidManifest.xml i aktivira ju. U slučaju da ciljana komponenta nije imenovana,

Android pronalazi najbolju komponentu koja odgovara toj namjeri, provjerom

Page 13: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

8

„intent filtara“ koji su deklarirani za sve komponente u AndroidManifest.xml

datoteci.

3. Google karte i lokacijski servisi dostupni putem Android SDK

U ovome poglavlju opisane su komponente Android SDK alata i metode prisutne u

Googleovom API-ju koje omogućuju aplikacijama prikaz karte, dohvaćanje lokacije

mobilnog uređaja, te interakciju sa okolinom u kojoj se nalazi mobilni uređaj putem

geoprostornih ograda.

3.1 Google karte

Googleov Maps API je dio Android SDK koji putem knjižnice usluga Google Play

omogućuje razvojnim programerima da ugrade karte unutar svojih mobilnih

aplikacija. Pogled na Google karte je iz ptičje perspektive, te je sama mapa

ostvarena spajanjem niza fotografija površine Zemlje snimljenih iz zrakoplova na

visini od 240 - 460m.

Korisnicima i razvojnim programerima Googleove karte pružaju mnogobrojne

korisne funkcionalnosti. Korisniku karte omogućuju interaktivni prikaz informacija

pomoću mnogobrojnih tipova elemenata koji se mogu pojaviti na karti. Isto tako

Google karte pomoću svoga API-ja omogućuju razvojnom programeru raznorazne

akcije koje može izvršiti na karti u aplikaciji u bilo kojem trenutku.

Klase i metode unutar Googleovog Maps API-ja su podijeljene u dva paketa.

Unutar paketa com.google.android.gms.maps nalaze se klase i metode za

kontroliranje ponašanja i svojstva karata, dok se unutar paketa

com.google.android.gms.maps.model nalaze klase i metode za crtanje i prikaz

objekata na mapi, te neke od pomoćnih klasa i metoda za reprezentaciju

parametara kao što su primjerice geografska širina i dužina. Kao ilustraciju

mogućnosti Googlovih karata u nastavku su popisane klase i metode koje su

korištene u implementaciji aplikacije koja je razvijena u sklopu ovog rada,

Page 14: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

9

raspodijeljene u dva paketa API-ja Googleovih karata. Googleove karte osim

navedenih pružaju još puno mogućnosti, kao što su primjerice pružanje pogleda

na ulicu, prikaz mape unutar objekata, crtanje oblika kao što su poligoni, stavljanje

vlastitih slika na mapu, prikaz kompasa, te mogućnosti naginjanja i rotiranja

pogleda na mapu.

I. com.google.android.gms.maps

class UiSettings - klasa sa metodama za namještanje pogleda na

mapu i interaktivnih mogućnosti

o void setZoomControlsEnables(boolean) - metoda za

omogućavanje kontrola (tipke plus i minus) za "zumiranje"

o void setScrollGesturesEnabled(boolean) - metoda za

omogućavanje scrollanja mape povlačenjem prstiju po mapi

o void setMyLocationButtonEnabled(boolean)- metoda za

omogućavanje gumba na mapi čijim se stiskanjem mapa pozicionira

na trenutnu korisnikovu lokaciju

class CameraUpdateFactory - klasa sa metodama za stvaranje

CameraUpdate objekta koji su zaduženi za programsko pomicanje

kamere

o CameraUpdate newCameraPosition(CameraPosition) -

metoda koja vraća objekat CameraUpdate koji pomiče kameru na

određenu poziciju koja je definirana geografskom širinom,

geografskom dužinom, razinom zooma, azimutom te nagnutosti

kamere

o CameraUpdate newLatLng(LatLng)- metoda koja vraća objekat

CameraUpdate koji pomiče kameru na određenu geografsku širinu i

geografsku širinu preko objekta LatLng

o CameraUpdate zoomTo(float) - metoda koja vraća objekat

CameraUpdate koji zoomira pogled za određen iznos u intervalu

iznosa od 2.0 do 21.0

Page 15: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

10

class GoogleMap - glavna klasa u Google kartama koja je ulazna

točka za sve metode vezane za Google karte

o Circle addCircle(CirleOptions)- metoda koja dodaje krug

na mapu sa svojstvima koja se prenose preko CircleOptions

objekta

o Marker addMarker(MarkerOptions)- metoda koja dodaje

marker na mapu sa svojstvima koja se prenose preko

MarkerOptions objekta

o void moveCamera(CameraUpdate)- metoda koja vrši akciju nad

kamerom sa svojstvima koja se prenešena preko CameraUpdate

objektao void

setOnMapClickListener(GoogleMap.OnMapClickListener)

- metoda koja definira povratni poziv koji se aktivira kada korisnik

klikne na mapuo void

setOnMarkerDragListener(GoogleMap.OnMarkerDragListe

ner)- metoda koja definira povratni poziv koji se aktivira kada

korisnik povlači marker po mapi

II. com.google.android.gms.maps.model

class CameraPosition - klasa koja agregira parametre kao što su

geografska širina i dužina, razina zooma, nagnutost karte i azimut, te se

instanca ove klase predaje metodama CameraUpdateFactory klase

o public CameraPosition(LatLng target, float zoom,

float tilt, float bearing)- konstruktor ove klase preko

kojeg se predaju parametri

class Circle - klasa za stvaranje kruga na mapi

o void setCenter(LatLng center)- metoda za definiranje centra

kruga na mapi na određenoj geografskoj širini i dužini

o void setFillColor(int color)- metoda za definiranje boje

kruga

Page 16: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

11

o void setRadius(double radius)- metoda za definiranje

polumjera kruga

o void setStrokeColor(int color)- metoda za definiranje boje

vanjskog ruba kruga

o void setStrokeWidth(float width) - metoda za definiranje

širine vanjskog ruba kruga

o void remove()- metoda za brisanje kruga

class Marker - klasa za stvaranje markera na mapi

o void setPosition(LatLng latLng)- metoda za definiranje

pozicije markera na mapi na određenoj geografskoj širini i dužini

o void setDraggable(boolean draggable)- metoda za

omogućavanje povlačenja markera po mapi

o void remove()- metoda za brisanje markera sa mape

Googleove karte mogu biti prikazane pomoću četiri interpretacije zemljine površine

čiji se izgled može vidjeti na slici 2.1.:

Normalna - na karti su prikazane ceste, neke od strane čovjeka stvorene

značajke i važne prirodne značajke kao što su rijeke. Ceste i oznake

značajki također su vidljive.

Hibridna - satelitski fotografski podaci s dodanim cestovnim kartama. Ceste

i oznake značajki također su vidljive.

Satelitska - satelitski fotografski podaci. Ceste i oznake značajki nisu

vidljive.

Teren - topografski podaci. Karta uključuje boje, slojnice i oznake, te

sjenčanje perspektive. Ceste i oznake značajki također su vidljive

Page 17: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

12

Slika 2.1 – različite interpretacije Zemljine površine

3.2 Geoprostorne ograde

Usluga geoprostornih ograda kombinira svijest o lokaciji korisnika sa svijesti o

korisnikovoj blizini lokacijama koje bi mogle biti od interesa. Geografska širina i

dužina, te polumjer definiraju geoprostornu ogradu, kreirajući kružno područje, ili

ogradu oko lokacije od interesa. (Slika 2.2)

Slika 2.2 – prikaz kretanja kroz geoprostornu ogradu

Page 18: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

13

Lokacijski servis koji je dio aplikacije Google Play Services nakon stvaranja

geoprostorne ograde u pozadini prati korisnikovu lokaciju te osluškuje kretanje

korisnika u odnosu na granice geoprostorne ograde. U slučaju prelaska granice

geoprostorne ograde lokacijski servis aktivira uslugu unutar aplikacije koja koristi

geoprostorne ograde, te aplikacija u tom slučaju može izvršiti neku radnju.

Unutar lokacijskog servisa mogu biti definirana dva tipa prelaska ograde, a to su

ulazak i izlazak u područje definirano geoprostornom ogradom. Također, unutar

lokacijskog servisa može se definirati da se prati informacija o prisutnosti korisnika

unutar geoprostorne ograde. Prilikom stvaranja ograde, metodi zaduženoj za tu

operaciju se predaju četiri konstante koje iniciraju traženu upotrebu:

Geofence.GEOFENCE_TRANSITION_DWELL – praćenje korisnika te

aktivacija servisa za vrijeme boravka korisnika unutar ograde

Geofence.GEOFENCE_TRANSITION_ENTER – praćenje i aktivacija

servisa u situacijama u kojima korisnik ulazi u područje geoprostornih

ograda

Geofence.GEOFENCE_TRANSITION_EXIT - praćenje i aktivacija servisa u

situacijama u kojima korisnik izlazi iz područja geoprostornih ograda

Geoprostorne ograde također mogu imati određeno trajanje koje se specificira

prilikom stvaranja ograde. Nakon isteka vremena trajanja, geoprostorna ograda se

briše i više se ne prati. U nastavku su navedene najvažnije klase, metode i sučelja

koji se koriste prilikom implementacije geoprostornih ograda.

Geofence.Builder – klasa koja je sadržana u sučelju Geofence, te služi

za izradu objekta geoprostorne ogradeo setCircularRegoin(double lat, double lng, foat

radius) – metoda kojom se unose parametri za geoprostornu ogradu

koja se stvara

o setExpirationDuration(long dur) – metoda za specificiranje

trajanja geoprostorne ograde

o setRequestId(String reqId) – metoda kojom se unosi

identifikator geoprostorne ograde

Page 19: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

14

o setTransitionTypes(int types) – metoda kojom se definiraju

relevantne vrste prelaska granice geoprostorne ograde

GeofencingRequest.Builder – klasa zadužena za izradu zahtjeva za

stvaranje geoprostorne ograde upućenog prema lokacijskom servisu

Google API-ja

o addGeofence(Geofence geofence) – metoda kojom se predaje

Geofence objekat na praćenje lokacijskom servisu Google API-ja

o setInitialTrigger(int initTrigger) – metoda kojom se

definira što će se dogoditi ukoliko se korisnik prilikom dodavanja

geoprostorne ograde nalazi u području geoprostorne ograde

GeofencingApi – sučelje koje predstavlja ulaznu točku prema API-ju za

geoprostorne ogradeo addGeofences(GoogleApiClient client,

GeofencingRequest gRequest, PendingIntent pIntent) –

metoda kojom se predaje objekt GeofencingRequest na praćenje

lokacijskom servisu, te se započinje sa praćenjem specificirane

geoprostorne ogradeo removeGeofences(GoogleApiClient client, List<String>

reqIds) – metoda kojom se prekida praćenje geoprostornih ograda sa

identifikacijskim oznakama koje su jednake predanim identifikacijskim

oznakama

Page 20: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

15

4. Androidova aplikacija GeoFER

U ovome poglavlju opisane su funkcionalnosti i izvedba aplikacije GeoFER koja je

praktični rezultat ovog završnog rada te procesi stvaranja i brisanja geoprostornih

ograda. Osim klasičnih komponenata prisutnih u svakoj aplikaciji za Android,

aplikacija GeoFER sastoji se također i od nekoliko zasebnih segmenata koji

omogućavaju prikaz karata, dohvaćanje lokacije i definiranje geoprostornih

ograda. Za dohvaćanje lokacije i definiranje geoprostornih ograda, aplikacija treba

održavati stalnu vezu sa aplikacijom Google Play Services koja dolazi sa svakim

operativnim sustavom Android, putem Google API-ja. Googleove karte ne

zahtijevaju takav pristup, ali je potrebno izvesti dodatne korake kako bi se

omogućio njihov prikaz u aplikaciji. U ovome poglavlju su stoga opisani i svi koraci

koje razvojni programer mora obaviti kako bi ove usluge bile dostupne u aplikaciji.

4.1 Opis Androidove aplikacije GeoFER

Androidova aplikacija GeoFER na svom početnom ekranu, prikazanom na Slici 4.1

omogućuje korisniku kreiranje i pregled geoprostornih ograda na interaktivnoj karti.

Karta unutar aplikacije omogućuje vizualnu predodžbu korisnikove lokacije i

geoprostornih ograda koje su definirane. Geoprostorne ograde su prikazane

pomoću ugrađenih metoda u Google kartama koje omogućuju crtanje krugova na

određenoj lokaciji na karti sa zadanim radijusom.

Karta omogućava interakciju u smislu dodavanja nove geoprostorne ograde klikom

na kartu na poziciju na koju se želi dodati nova geoprostorna ograda, čime se

korisnika preusmjerava na ekran za kreiranje nove geoprostorne ograde. Karta

pruža korisniku mogućnost "zumiranja" pogleda potezima prstiju po mapi i

pritiskom na dva gumba, plus i minus. Također korisnik se može brzo pozicinirati

na vlastitu poziciju pritiskom na gumb u gornjem desnom uglu karte.

U gornjem desnom uglu ekrana nalazi se gumb koji korisnika vodi na pregled

njegovih aktivnih geoprostornih ograda.

Page 21: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

16

Slika 4.1 – početni ekran

Pritiskom na kartu korisnika se preusmjerava na ekran, prikazan na Slici 4.2 na

kojem može definirati parametre svoje geoprostorne ograde, a to su:

Naziv

Opis

Pozicija ograde u obliku koordinata, vrijednosti geografske širine i dužine

Veličina ograde (radijus) izražen u metrima

Opcije dolaska obavijesti za slučajeve ulaska i izlaska korisnika iz

geoprostorne ograde

Odabirom svih parametara, pri čemu je obavezan odabir imena geoprostorne

ograde i barem jedne opcije dolaska obavijesti korisnik pritiskom na gumb "Create

Geofence" kreira svoju geoprostornu ogradu.

Page 22: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

17

Slika 4.2 – ekran za stvaranje geoprostorne ograde

Pritiskom na tipku "Update parameters", koja je vidljiva na Slici 4.2, korisnika se

preusmjerava na ekran koji je prikazan na Slici 4.3. Na tom ekranu korisnik može

ažurirati odabir lokacije i polumjer ograde čija je početna vrijednost postavljena na

sto metara. Na karti je iscrtan marker koji predočava središte geoprostorne

ograde, i taj marker je interaktivan na način da se dugim klikom na njega

omogućuje povlačenje i mijenjanje pozicije geoprostorne ograde.

Radijus se može namjestiti na dnu ekrana povlačenjem potezne trake. Maksimalni

radijus koji se može namjestiti iznosi tisuću metara. Radijus geoprostorne ograde

predočen je na mapi krugom, koji se dinamički mijenja promjenom radijusa.

Page 23: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

18

Slika 4.3 – ekran za namještanje parametara

Na početnom ekranu, pritiskom na tipku "My Fences" u gornjem desnom uglu

početnog ekrana prikazanog na slici 4.1 korisnik se preusmjerava na ekran

prikazan na slici 4.4 na kojem korisnik može pregledati svoje geoprostorne

ograde.

Svaka geoprostorna ograda prikazana u listi ima tri opcije:

Prikaz na mapi, tipka "Show on map". Korisnik se preusmjerava na početni

ekran i karta se na početnom ekranu pozicionira na geoprostornu ogradu

koju smo odabrali

Uređivanje geoprostorne ograde, tipka "Edit". Korisnik se preusmjerava na

ekran za uređivanje geoprostorne ograde, koji je isti kao i ekran za kreiranje

Page 24: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

19

nove geoprostorne ograde koji je prikazan na slici 4.1, uz razliku da su

ovdje podaci zadani i mogu se urediti.

Brisanje geoprostorne ograde, tipka "Delete". Korisnik ovim odabirom briše

odabranu geoprostornu ogradu.

Slika 4.4 – ekran za pregled aktivnih geoprostornih ograda

Prilikom ulaska ili izlaska korisnika iz geoprostorne ograde, što zavisi o

korisnikovom odabiru prilikom kreiranja te ograde, korisnik dobiva obavijest sa

porukom u kojoj piše o kojoj je geoprostornoj ogradi riječ i u kojoj je vidljiv opis

geoprostorne ograde.

Page 25: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

20

4.2 Implementacija usluga Google Play servisa

Implementacija usluga Google Play servisa se temelji na knjižnici za klijente koja

se ugrađuje u projekt. Knjižnica za klijente sadrži sučelja prema Google Play

Services mobilnoj aplikaciji koja sadrži sve usluge koje nudi Google API, a koje se

mogu iskoristiti u aplikaciji. Implementacija Google Play usluga u aplikaciji se

temelji na nekoliko koraka koje je potrebno izvesti:

referenciranje Google Play usluga ugrađivanjem Google Play Services

knjižnice u aplikaciju

ubacivanje reference na Google Play usluge u AndroidManifest.xml

implementacija sučelja za pozive povratnih poziva koji daje povratnu

informaciju o stanju povezanosti aplikacije sa Google Play uslugama

implementacija poziva za spajanje na Google API

implementacija metoda potrebnih za razrješavanje mogućih problema

nastalih prilikom spajanja aplikacije sa Google Play uslugama pomoću

povratnih poziva

4.2.1 Ugrađivanje Google Play Services knjižnice u aplikaciju

Kako bi Googleov API i usluge aplikacije Google Play Service bili dostupni

potrebno je dodati novo „build rule“ pravilo pod zavisnosti za najnoviju verziju play-

usluga. Postoji mnogo različitih „build rules“ kojima se može ostvariti pristup

mnogobrojnim API pozivima. U slučaju aplikacije GeoFER, potreban nam je

pristup samo lokacijskim servisima i Google kartama, te je potrebno dodati samo

„build rule“ potreban za ostvarenje tih usluga. Nakon spremanja promjena u

Gradle datoteku i klikanja na gumb za sinkronizaciju projekta sa podacima

zadanima u Gradle datoteci programska knjižnica je postavljena. Jedino što je

potrebno učiniti prije no što programska knjižnica bude spremna je dodati

referencu u AndroidManifest.xml. (Slika 4.5)

Page 26: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

21

Slika 4.5 – deklaracija usluga Google Play servisa u AndroidManifest.xml

4.2.2 Ostvarivanje pristupa na uslugu Google Play

Kako bi aplikacija bila spojena s jednim od Googleovih API-a danih u programskoj

knjižnici usluga Google Play (u slučaju GeoFER aplikacije to je Location API),

mora se kreirati instanca GoogleApiClient. Ova instanca osigurava zajedničku

ulaznu točku za sve usluge Google Play i upravlja mrežnom vezom između

korisnikovog uređaja i svake Googleove usluge (Slika 4.7)

Slika 4.7 – shema pristupa aplikacije uslugama Google Play servisa

Kada se aplikacija povezala s programskom knjižnicom usluga Google Play,

instanca GoogleApiClient mora se stvoriti pomoću

GoogleApiClient.Builder u onCreate() metodi aktivnosti. Klasa

GoogleApiClient.Builder osigurava metode koje omogućavaju definiranje

željenih Google API-ja. Isto tako, sam poziv u sebi sadrži metode koje

implementiraju zavisnost sa sučeljima koja prate stanje povezanosti aplikacije sa

Google Play uslugama.

Za provjeru i praćenje stanja povezanosti prema Google API-ju, koristi se

implementacija sučelja sa povratnim pozivima (ConnectionCallbacks i

Page 27: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

22

OnConnectionFailedListener). Ova sučelja zaprimaju povratne pozive za

slučajeve u kojima spajanje na Google Play usluge uspije, ne uspije ili postane

suspendirano. (Slika 4.8)

Veza sa Googleovim API-jem mora biti aktivna sve dok je aktivnost u kojoj se ta

veza koristi aktivna, te se stoga spajanje i odspajanje vrši nadjačavanjem metoda

onStart() i onStop() u kojima se pozivaju metode

GoogleApiClient.connect() i GoogleApiClient.disconnect(). (Slika

4.8)

Slika 4.8 – prikaz koda za ostvarivanje veze sa Google API-jem

Page 28: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

23

Kada je spojena na Google API, aplikacija može obavljati pozive čitanja i pisanja

pomoću API metoda (stvaranje i brisanje geoprostorih ograda), te se može spojiti

na servise koji će aplikaciji omogućiti ostvarivanje geolokacijskih usluga.

4.2.3 Provjera dostupnosti usluge Google Play

Kod implementacije Google Play servisa potrebno je izvršiti provjeru dostupnosti

servisa. Provjera se temelji na ispitivanju verzije APK-a Google Play Services

aplikacije, točnije da li je na mobitelu instalirana prava verzija te aplikacije.

Ažuriranja APK Google Play Services aplikacije ne moraju doći do svih korisnika

istovremeno, stoga bi aplikacija trebala provjeriti dostupnu verziju prije nego što

pokuša obaviti API transakcije. Knjižnica Google Play usluga sadrži API-je koji

omogućavaju razvojnom programeru da riješi sve probleme tijekom izvršavanja.

Budući da su Google Play usluge aplikaciji potrebne u svakom trenutku, provjera

se obavlja svaki put kad se aplikacija pokrene.

Kada se izvede GoogleApiClient.connect() metoda, dobije se povratni

poziv ovisno o uspješnosti povezivanja. Kada postoji poziv prema povratnom

pozivu onConnectionFailed(ConnectionResult connectionResult),

unutar te metode izvodi se i provjerava vrijednost

ConnectionResult.hasResolution() metode. (Slika 4.9)

Ukoliko se ConnectionResult.hasResolution() vrati kao točna, poduzima

se neposredna akciju rješavanja greške pozivanjem

ConnectionResult.startResolutionForResult(), čime se pokreće

odgovarajuća aktivnost za korisnika kako bi se razriješila greška.

Ako se ConnectionResult.hasResolution() vrati kao netočan,

showErrorDialog(int errorCode) metoda mora biti pozvana kojoj se

prosljeđuje kod greške. Ova metoda vraća dijalog sa porukom koja objašnjava

grešku i može ponuditi korisniku aktivnost za riješavanje greške (primjerice

ponuditi opciju ažuriranja Google Play Services aplikacije).

Jednom kad korisnik obavi aktivnosti za rješavanje greške zaprima se povratni

poziv u onActivityResult() gdje se ponovno izvodi spajanje na Google API.

Page 29: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

24

Slika 4.9 – prikaz koda za obradu povratnog poziva neuspjelog spajanja na

Google API

4.3 Korištenje Googleovih kartata

Proces ugrađivanja Google karte u aplikaciju sastoji od izrade API ključa za

pristup Googleovom API-ju, te implementacije potrebnog koda u aplikaciji.

4.3.1 Izrada API ključa za implementaciju Googleovih karata

Kako bi karte funkcionirale unutar aplikacije, moraju se spojiti s poslužiteljima

Google Maps preko ključa za pristup Googleovom API-ju. Stoga prvi korak za

omogućavanje pristupa kartama unutar aplikacije je registracija aplikacije kako bi

se dobio ključ kojim će se aplikacija identificirati i moći se spojiti na servere. Ključ

za pristup aplikacije je besplatan i izrađuje se u par koraka. Postoje dvije vrste

ključa, ključ release i debug. Aplikacija GeoFER je dostupna na Play Store-u pa je

stoga bilo potrebno izraditi ključ release. Cijeli postupak izrade ključa i povezivanja

Google API-ja sa aplikacijom se izvodi u ovim koracima:

Page 30: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

25

1. Potrebno je izraditi projekt na konzoli Google developers za zadanu

aplikaciju kako bi se mogli namjestiti API ključ i dozvole za pristup različitim

Google API-jima

2. Potrebno je izraditi SHA-1 potpis aplikacije pomoću keytool programa koji

se nalazi u sklopu Android alata za razvoj aplikacija u kojemu se specificira

datoteka.keystore i alias (Slika 4.10) Datoteka .keystore i alias su podaci o

razvojnom programeru dobiveni od Google-a tijekom registracije računa

razvojnog programera. Aplikacija se tim podacima potpisuje i povezuje sa

korisničkim računom kojim se izvodi publikacija aplikacije na Play Store.

Slika 4.10 – prikaz dohvaćanja SHA-1 potpisa aplikacije

3. Na stranici konzole Google developers za dani projekt se upisuje ime

paketa aplikacije i SHA-1 ključ te Google dodjeljuje API ključ za zadanu

aplikaciju (Slika 4.11)

Slika 4.11 – prikaz dodijeljenog API ključa na Googleovoj konzoli za programere

Page 31: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

26

4. Dobiveni API ključ se upisuje u AndroidManifest.xml datoteku (Slika 4.12)

Slika 4.12 – prikaz deklaracije API ključa u AndroidManifest.xml

4.3.2 Stvaranje mape, markera i krugova

U XML – datoteci glavne aktivnosti dodan je fragment čija je svrha da bude

kontejner za mapu. (Slika 4.13)

Slika 4.13 – prikaz XML komponente koja predstavlja kontejner za kartu

Unutar aktivnosti u metodi onCreate() referenciran je fragment te je pozvana

metoda MapFragment.getMapAsync(Context context) koja poziva

povratni poziv onMapReady(GoogleMap googleMap) sučelja

onMapReadyCallback koje je implementirano u klasi dane aktivnosti.

U povratnom pozivu dobiven je objekt mape tipa GoogleMap koji predstavlja

ulaznu točku za sve operacije koje se mogu raditi na karti. U ovome pozivu su

definirane karakteristike Google karte koju koristi aplikacija GeoFER. Isto tako

provedena je inicijalizacija karte na način da se karta pozicionira na određenu

lokaciju, te su na kartu dodani marker i krug kojima se u aplikaciji GeoFER

prezentira geoprostorna ograda. Na slici 4.14 prikazan je primjerak koda koji

demonstrira funkcionalnosti izvedene u aplikaciji GeoFER.

Page 32: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

27

Slika 4.14 – prikaz koda za inicijalizaciju Google karte

4.4 Izvedba aplikacije GeoFER

Aplikacija GeoFER sastoji se od pet različitih ekrana čije su funkcionalnosti

implementirane pomoću sedam različitih klasa koje implementiraju pet sučelja.

Dijagram klasa aplikacije GeoFER je prikazan na slici 4.15., a u nastavku su

objašnjene nacrtane klase i sučelja.

Page 33: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

28

Slika 4.15 – Dijagram klasa GeoFER aplikacije

Page 34: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

29

Sučelja ConnectionCallbacks i ConnectionFailedListener zadužena su

za spajanje na Google API i implementiraju ih klase ekrana koji koriste usluge koje

pruža Google API. Za implementaciju karte koristi se sučelje

OnMapReadyCallback, a sučelje LocationListener daje povratne metode

kod dohvaćanja trenutne lokacije korisnika. Sučelje ResultCallback<Status>

vraća status koji daje informaciju kroz svoj povratni poziv o uspješnom ili

neuspješnom stvaranju geoprostorne ograde.

BaseAdapter je klasa koju proširuje klasa ListAdapterFences koja

nadjačava njezine metode te time implementira adapter za prikaz liste svih ograda

na ekranu za prikaz svih ograda.

Geoprostorna ograda je u aplikaciji predstavljena klasom Fence te se kod

stvaranje ograde stvara i objekt te klase pridruživanjem parametara koji određuju

jednu ogradu pomoću zadanih metoda.

AppCompatActivity je klasa koja u sebi sadrže metode koje određuju životni

ciklus jedne aktivnosti. Ovom klasom su proširene sve klase koje služe za

implementaciju funkcionalnosti jednog ekrana, a to su:

MainActivity – početni ekran i za korisnika ulazna točka u aplikaciju.

Na ovome ekranu korisnik može vidjeti svoju lokaciju u odnosu na lokacije

svih aktivnih ograda, te može potaknuti izgradnju nove ograde ili se uputiti

na pregled svih svojih ograda.

MyFences – ekran za pregled aktivnih ograda na kojemu se može

potaknuti uređivanje i brisanje ograde

EditGeofence – ekran za uređivanje postojeće geoprostorne ograde

CreateGeofence – ekran za stvaranje geoprostorne ograde

SetLocationFence – ekran za namještanje polumjera i lokacije

geoprostorne ograde kod njezina stvaranja

Page 35: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

30

4.4.1 Implementacija geoprostornih ograda

Stvaranje i brisanje geoprostorne ograde vrši se pristupom lokacijskom servisu

preko Googleovog API-ja. Lokacijski servis koji je dio Googleove aplikacije Play

Services drži pohranjenima geoprostorne ograde, te vrši nadzor ograda u odnosu

na trenutnu lokaciju korisnika. Isto tako, aplikacija trenutnu listu aktivnih

geoprostornih ograda drži pohranjenima lokalno pomoću SharedPreferences API-

ja kako bi se omogućio brzi pristup podacima o geoprostornim ogradama, bez

pristupanja Google API-ju, prilikom crtanja ograda na mapi te prikaza liste trenutno

aktivnih ograda.

4.4.1.1 Stvaranje geoprostorne ograde

Odabirom neke lokacije na karti na početnom ekranu započinje proces stvaranja

nove geoprostorne ograde. U tom procesu međusobno sudjeluju aktivnosti

aplikacije zadužene za stvaranje ograde, Google API, te Shared Preferences API.

Slijedni dijagram procesa stvaranja nove ograde prikazan je na slici 4.16.

Slika 4.16 – Slijedni dijagram stvaranja geoprostorne ograde

Page 36: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

31

Odabirom mjesta na karti klikom na kartu, korisnik se preusmjerava na ekran za

unos podataka, gdje nakon unosa odabire stvaranje geoprostorne ograde.

Geoprostorna ograda se pohranjuje pomoću Shared Preferences API-ja, te se

pohranjuje unutar lokacijskog servisa aplikacije Google Play Services. Nakon

uspješnog stvaranja geoprostorne ograde, korisnik se vraća na početni ekran koji

je pozicioniran na njegovu lokaciju. Na početnom ekranu povlače se podaci iz

Shared Preferences API-ja o trenutno aktivnim geoprostornim ogradama, brišu se

na karti ograde koje su nacrtane prije stvaranja nove geoprostorne ograde, te se

crtaju novo dohvaćene ograde.

Na slici 4.16 prikazan je kod za stvaranje geoprostorne ograde čijim se

izvršavanjem daje nalog lokacijskom servisu Google API-ja za početak praćenja

geoprostorne ograde. Pozivom metode addGeofence() unutar aktivnosti

zadužene za stvaranje ograda pokreće se provjera deklaracije u datoteci

AndroidManifest.xml za pristup lokaciji uređaja, te stvaranje geoprostorne ograde

pristupanjem lokacijskom servisu. Metodi API-ja za geoprostorne ograde addGeofences(GoogleApiClient, GeofencingRequest.Builder,

PendingIntent) predaju se instanca GoogleApiClienta za spajanje na

Google API, instanca klase za izradu naloga za stvaranje geoprostorne ograde, te

instanca klase PendingIntent.

PendingIntent instanca definira čekajući poziv na uslugu koja se aktivira

prilikom nekog događaja koji lokacijski servis osluškuje, Primjerice, ukoliko

lokacijski servis odredi da je korisnik ušao ili izašao iz geoprostorne ograde,

pozvati će uslugu unutar GeoFER aplikacije koja je definirana čekajućim pozivom

putem PendingIntent instance klase.

GeofencingRequest.Builder instanca prenosi lokacijskom servisu nalog za

stvaranje geoprostorne ograde, a instancu vraća metoda unutar aktivnosti -

createGeofence(). Unutar te metode nalogu za izgradnju geoprostorne ograde

predaju se parametri koji definiraju svojstva geprostorne ograde koja se stvara.

Geoprostornoj ogradi se pridjeljuju:

Page 37: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

32

Identifikacijski broj – svaka geoprostorna ograda ima svoj identifikacijski

broj kojim se identificira kada je pohranjena u lokacijskom servisu. U

aplikaciji GeoFER taj identifikacijski broj se stvara statičnom metodom

Util.generateHashId() kojom se nasumično izabire neki broj

Područje geoprostorne ograde – predaju se parametri geografske širine i

dužine te polumjera geoprostorne ograde

Početno ponašanje ograde – određuje se ponašanje ograde ukoliko se

korisnik nalazi unutar područja geoprostorne ograde u trenutku njezina

stvaranja. U aplikaciji GeoFER ako se korisnik nalazi na području

geoprostorne ograde u trenutku njezina stvaranja, aktivirati će se usluga i

isporučiti obavijest korisniku

trajanje geoprostorne ograde – u aplikaciji GeoFER sve ograde su

definirane da traju neograničeno dugo

tipovi prelaska granice ograde – u kodu na slici 4.16 geoprostorna ograda

koja se stvara prati se korisnikov ulazak u područje ograde, te izlazak iz

podučja ograde, te u tim slučajevima lokacijski servis aktivira uslugu u

aplikaciji

Slika 4.16 – prikaz koda za stvaranje geoprostorne ograde

Page 38: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

33

4.4.1.2 Brisanje geoprostorne ograde

Brisanje geoprostorne ograde odvija se na ekranu za pregled svih geoprostornih

ograda. U tom procesu međusobno sudjeluju aktivnosti aplikacije zadužene za

stvaranje ograde, Google API, te Shared Preferences API. Slijedni dijagram

procesa brisanja ograde prikazan je na slici 4.17.

Slika 4.17 – slijedni dijagram brisanja geoprostorne ograde

Korisnik se odabirom gumba „My Fences“ u gornjem desnom dijelu ekrana

preusmjerava na ekran za pregled svih aktivnih ograda, te se lista za prikaz

popunjava povlačenjem podataka iz lokalne pohrane pristupanjem Shared

Preferences API-ju. Odabirom gumba „Delete“ na stavci ograde koju treba obrisati

u listi šalje se nalog preko Google API-ja za brisanje geoprostorne ograde iz

Page 39: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

34

lokacijskog servisa i prekid njezinog praćenja. Geoprostorna ograda se briše iz

lokalne pohrane, te se ažurira lista za prikaz ograda. Nakon brisanja ograda

korisnik se vraća na početni ekran. Na početnom ekranu povlače se podaci iz

Shared Preferences API-ja o trenutno aktivnim geoprostornim ogradama, brišu se

na karti ograde koje su nacrtane prije brisanja geoprostornih ograda, te se crtaju

novo dohvaćene ograde.

Na slici 4.18 prikazan je isječak koda za brisanje geoprostorne ograde iz

lokacijskog servisa. Geoprostorna ograda se briše metodom iz dijela Google API-

ja za geoprostorne ograde – removeGeofences(GoogleApiClient,

List<String>). Metodi se predaje lista identifikacijskih oznaka geoprostornih

ograda koje se brišu. Identifikacijske oznake ograda su definirane tijekom

stvaranja geoprostornih ograda, a dohvaćene su iz lokalne pohrane pristupom

Shared Prefences API-ju.

Slika 4.18 – prikaz koda za brisanje geoprostorne ograde

Page 40: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

35

5. Zaključak

Tehnologija praćenja lokacije na mobilnim uređajima danas je na visokoj razini.

Dohvaćena lokacije mobilnog uređaja je precizna, a proces dohvaćanja lokacije

kratko traje i nije previše zahtjevan za bateriju mobilnog uređaja. Danas razvojni

programer može u aplikaciju sa par metoda i poziva ugraditi servis za dohvaćanje

lokacije uz pomoć Google API-ja i lokacijskih servisa. Uz to, razvojnom

programeru su dostupni i neke druge usluge kojima je dohvaćanje lokacije uređaja

samo manji dio cjelokupne usluge. Tako primjerice usluga za izradu geoprostornih

ograda razvojnom programeru uvelike olakšava izradu aplikacija koje moraju biti

svjesne lokacije mobilnog uređaja i lokacija različitih područja od interesa koja se

nalaze u neposrednoj blizini.

Cilj ovog rada bio je iskoristiti lokacijski servis i dostupne metode Googleovog API-

ja, te razviti aplikaciju za operacijski sustav Android koja ima mogućnost stvaranja,

brisanja, praćenja i uređivanja geoprostornih ograda. Za ostvarenje ovih

funkcionalnosti bilo je potrebno izraditi korisničko sučelje kojim korisnik aplikacije

može unijeti potrebne parametre i pratiti svoje geoprostorne ograde. U tu svrhu

korištene su Googleove karte. U aplikaciji je također bilo potrebno ostvariti pristup

lokacijskom servisu koji je prisutan u aplikaciji Google Play Services prisutnoj na

svakom uređaju sa operativnim sustavom Android kako bi se omogućilo stvaranje i

brisanje geoprostornih ograda. Za razvoj aplikacije korišteno je razvojno okruženje

Android Studio, te Android SDK alati. Razvijena je aplikacija „GeoFER“ koja je

ujedno i dostupna na Play Store-u putem poveznice

https://play.google.com/store/apps/details?id=geofer.com.geofer .

Page 41: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

36

Literatura

[1] Google APIs for Android,

https://developers.google.com/android/reference/packages , 18.5.2016.

[2] Creating and Monitoring Geofences,

https://developer.android.com/training/location/geofencing.html,

[3] Google Maps API, https://developers.google.com/maps/

[4] Save ArrayList to SharedPreferences,

http://stackoverflow.com/questions/7057845/save-arraylist-to-

sharedpreferences, 14.8.2011.

[5] Managing the Activity Lifecycle,

https://developer.android.com/training/basics/activity-lifecycle/index.html

[6] Application Fundamentals,

https://developer.android.com/guide/components/fundamentals.html

[7] Google APIs for Mobile: Quickstarts,

https://github.com/googlesamples/google-services/, 8.5.2016.

[8] Geofences on Android with GoogleApiClient,

https://www.raywenderlich.com/103540/geofences-googleapiclient,

26.5.2015.

Page 42: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

37

Sažetak

Naslov: Aplikacija s geoprostornom ogradom za uređaje sa operacijskim sustavom

Android

U ovom završnom radu izrađena je aplikacija sa geoprostornim ogradama za

operacijski sustav Android. Aplikacija omogućava korisniku stvaranje, brisanje i

praćenje geoprostornih ograda. Geoprostorne ograde su kružna područja na

površini Zemlje određena geografskom širinom i dužinom, te polumjerom. Ukoliko

korisnik uđe ili izađe iz područja pokrivenog geoprostornom ogradom koju je

stvorio, aplikacija će isporučiti „push notifikaciju“.

Geoprostorne ograde su implementirane pomoću lokacijskog servisa dostupnog

putem Google API-ja. Lokacijski servis omogućuje aplikaciji dohvaćanje trenutne

lokacije mobilnog uređaja, te stvaranje, brisanje i praćenje geoprostornih ograda.

Za izradu geoprostorne ograde korisnik mora unjeti parametre geografske širine i

dužine. Ta funkcionalnost je ostvarena implementacijom interaktivne Google karte

pomoću Google Maps API-ja. Isto tako, putem karte korisnik može pratiti svoju

lokaciju u odnosu na područja aktivnih geoprostornih ograda.

Ključni pojmovi

Operacijski sustav Android, mobilna aplikacija, Android, Google karte,

geoprostorne ograde, Location API, lokacijski servis, Geofencing API, Google API,

lokacija, Google Play servis

Page 43: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

38

Abstract

Title: A Geofencing Application for Android Devices

A mobile application with geofences was created for this final thesis. This

application gives users the capability to create, delete and monitor geofences.

Geofences are circular areas on Earth's surface which are determined by latitude,

longitude and radius. If user enters or exits the area of the geofence application

will deliver a push notification notifying the user.

Geofences are implemented with help of the location services which are available

through the Google API. Location services enable fetching the current location of

the mobile device. Also, they enable creation, deletion and monitoring of the

geofences.

To create a geofence, user needs to specify latitude and longitude. Therefore,

Google maps were introduced into the app with help of the Google maps API.

Google maps enable the user to track his location relative to the locations of the

nearby geofences.

Key terms

Operating system Android, mobile application, Android, Google maps, geofences,

Location API, location services, Geofencing API, Google API, location, Google

Play services

Page 44: APLIKACIJA S GEOPROSTORNOM - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja i veličine slova, definicije korisničkih sučelja pohranjene u obliku XML datoteka,

39

Skraćenice

API Application Programming Interface aplikacijsko programsko sučelje

SDK Software development kit alati za razvoj programske potpore

OS Operating system operacijski sustav

XML Extensible markup language jezik za označavanje podataka

APK Android application package Android aplikacijski paket