aplikacija s geoprostornom - bib.irb.hr · res/ - sadrži ikone, slike, pohranjene vrijednosti boja...
TRANSCRIPT
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.
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
5. Zaključak ............................................................................................................35
Literatura ................................................................................................................36
Sažetak ..................................................................................................................37
Abstract ..................................................................................................................38
Skraćenice .............................................................................................................39
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 .
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
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
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.
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
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.
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
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,
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
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
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
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
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
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
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.
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.
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.
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
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.
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)
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
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
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.
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:
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
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.
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.
28
Slika 4.15 – Dijagram klasa GeoFER aplikacije
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
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
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:
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
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
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
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 .
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.
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
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
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