RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

41
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 946 RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM UREðAJU S OPERACIJSKIM SUSTAVOM ANDROID Hrvoje Kolarić Zagreb, lipanj 2009.

description

 

Transcript of RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

Page 1: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RA ČUNARSTVA

ZAVRŠNI RAD br. 946

RAZVOJ PROGRAMA ZA PRISTUP I

OBRADU INFORMACIJA NA POKRETNOM

UREðAJU S OPERACIJSKIM SUSTAVOM

ANDROID

Hrvoje Kolarić

Zagreb, lipanj 2009.

Page 2: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...
Page 3: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

Sadržaj

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

1. Operacijski sustav Android ........................................................................................... 2 1.1. Osnovne značajke ................................................................................................... 2

1.1.1. Arhitektura ....................................................................................................... 3 1.2. Struktura aplikacije u Androidu .............................................................................. 5

1.2.1. Activity ............................................................................................................ 6 1.2.2. Service ............................................................................................................. 6 1.2.3. Broadcast receiver ........................................................................................... 7 1.2.4. Content provider .............................................................................................. 7 1.2.5. Datoteka manifest ............................................................................................ 8 1.2.6. Aktivacijska komponenta – Intent ................................................................... 8

1.2.7. Životni ciklus activityja ................................................................................... 9 1.3. Razvoj aplikacije u Androidu ............................................................................... 11

1.3.1. Općenito o korisničkom sučelju .................................................................... 11 1.3.2. Izgledi ............................................................................................................ 12 1.3.3. Izbornici ......................................................................................................... 14 1.3.4. Dijalozi .......................................................................................................... 15 1.3.5. Obavještavanje korisnika ............................................................................... 16

2. Sportska prognoza za Android .................................................................................... 18 2.1. Opis sustava .......................................................................................................... 19

2.1.1. Dijagram slučajeva uporabe .......................................................................... 20

2.1.2. Komunikacija meñu komponentama ............................................................. 21 2.1.3. Struktura poslužiteljske aplikacije ................................................................. 22

2.1.4. Baza podataka ................................................................................................ 24 2.1.5. Aplikacija za rukovanje bazom podataka ...................................................... 25

2.2. Sportska prognoza – Android aplikacija ............................................................... 26

2.2.1. Komunikacija ................................................................................................ 26 2.2.2. Programsko ostvarenje i funkcionalnosti ...................................................... 29

3. Zaključak ..................................................................................................................... 35 4. Literatura ..................................................................................................................... 36 Sažetak ................................................................................................................................. 37

Ključni pojmovi ................................................................................................................... 37

Page 4: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

1

Uvod

Operacijski sustav Android je još uvijek novost u svijetu pokretnih ureñaja. Konkurencija

je drugim operacijskim sustavima za pametne pokretne ureñaje kao što su Appleov iPhone

OS te razne izvedenice Windows Mobilea i Symbiana. Android karakterizira otvorena

arhitektura sa specifičnim odnosom izmeñu aplikacija i prikaza na ekranu te mogućnost da

se promijeni i svaka uobičajena aplikacija koja dolazi s operacijskim sustavom, što govori

dovoljno o fleksibilnosti koju pruža.

Praktični dio ovog završnog rada je aplikacija za Android, no prije svega treba se dobro

upoznati s njegovim načinom funkcioniranja i strukturom aplikacije kako bi se mogle

demonstrirati njegove mogućnosti.

Aplikacija predstavlja nadogradnju Java aplikacije za pokretne ureñaje izrañene na

studentskom projektu, no s njom, osim u osnovnom konceptu, nema mnogo dodirnih

točaka. Radi se o sustavu koji omogućuje sudjelovanje u igrama na sreću putem pokretnog

ureñaja, s tim da se sva komunikacija odvija putem bežičnog internetskog prijenosa

podataka. Korisniku aplikacije omogućena je uplata kladioničkog listića sa svog osobnog

pokretnog ureñaja, kreiranje nedovršenog listića, pregled starih uplata, definiranje postavki

praćenja pojedinih dogañaja koje uključuju slanje obavijesti korisniku o novim dogañajima

ili ishodima završenih dogañaja i prikaz ponuñenih dogañaja razvrstanih po sportovima i

zemljama odigravanja na zahtjev, pri čemu se vodi briga o korisnikovoj privatnosti i

sigurnosti.

Sve navedeno prilagoñeno je operacijskom sustavu Android – posebnostima vezanim uz

prikaz dijelova aplikacija te njihovu komunikaciju i pokretanje. Cilj svega ovoga je

predstaviti Android kao platformu koja podržava kreativnost i inovativnost programera i

koja će biti laka za korištenje i zabavna – kako za programera tako i za korisnika.

Rad se bavi proučavanjem operacijskog sustava Android i načina izrade aplikacija za njega

te izradom sustava za sudjelovanje u igrama na sreću uključujući i korisničku aplikaciju za

Android.

Prvo poglavlje opisuje posebnosti ovog operacijskog sustava, dok su u drugom opisani

izrañeni sustav i aplikacija.

Page 5: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

2

1. Operacijski sustav Android

Tvrtka Google izradila je operacijski sustav Android, a Open Handset Alliance izdao je

Android alat za izradu softvera (engl. Software Development Kit, skraćeno SDK) 12.

studenog 2007. i zanimanje za njega neprestano raste. To je programski složaj koji

uključuje operacijski sustav, middleware i ključne aplikacije. SDK sadrži alate i sučelja za

programiranje aplikacija (engl. Application Programming Interface, skraćeno API) koji su

potrebni za razvoj aplikacija na Android platformi koristeći programski jezik Java.

1.1. Osnovne zna čajke

Android je zamišljen kao operacijski sustav koji će u potpunosti i na najefikasniji način

iskoristit sve resurse i mogućnosti koje mu pruža ureñaj na kojemu je instaliran. Dizajniran

je otvoreno, pa tako svaka aplikacija može koristiti sve osnovne funkcionalnosti ureñaja

kao što su ostvarivanje poziva, slanje tekstualnih poruka ili, primjerice, korištenje

ugrañenog fotoaparata. Programer aplikacija može izmijeniti cijeli operacijski sustav u

tolikoj mjeri da isti više nema veze s uobičajenim.

Osnova mu je Linux jezgra (engl. kernel) koja koristi specifični virtualni stroj dizajniran

kako bi optimizirao korištenje memorije i hardverskih resursa ureñaja koji ga pokreće.

Prednosti toga što je programeru sve dostupno je i to što se nove nadolazeće tehnologije

mogu lako implementirati.

Virtualni stroj sustava zove se Dalvik Virtual Machine i temeljen je na registru, za razliku

od Java Virtual Machinea (skraćeno JVM) koji je temeljen na stogu. DalvikVM je

interpreter, a radi s Dalvik Executable (*.dex) podacima. Pokreće klase kompilirane Java

kompilatorom koje se pretvaraju alatom „dx“ u njemu potreban format. Sve to je

napravljeno s ciljem istovremenog izvoñenja više virtualnih strojeva koji koriste malo

memorije kako bi očuvali stabilnost sustava – meñusobno se štite kako aplikacija koja se

ruši ne bi za sobom povukla druge. DalvikVM je temeljen na registru jer su procesori za

pokretne ureñaje prilagoñeni za registarski rad koji omogućava brže izvoñenje aplikacija

po cijenu veličine programa koji su veći nakon kompilacije.

Page 6: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

3

Sve aplikacije imaju jednaku važnost – operacijski sustav ne pravi razliku izmeñu

temeljnih aplikacija i onih instaliranih naknadno. Ta značajka pogoduje korisniku jer može

organizirati sustav po vlastitim željama. Komunikacija u sustavu temelji se na takozvanim

intentima, porukama na koje se reagira odreñenom radnjom. Za svaku aplikaciju ili njen

dio, može se definirati na koje poruke treba reagirati. Više aplikacija može reagirati na istu

poruku. U tom slučaju sustav pita korisnika koju aplikaciju želi da obradi dolazeći intent.

Kako je svuda naglasak na jednostavnosti, ni izrada aplikacija za Android nije iznimka.

Programer može jednostavno pristupiti svemu što treba, pa se multimedijske aplikacije

mogu napraviti lakše nego za neke druge operacijske sustave. Aplikacije mogu dohvaćati

podatke s Interneta te ih, primjerice, kombinirati s nekim podacima koje se nalaze na

pokretnom ureñaju. Lako se može pristupiti GPS prijemniku, kameri ili vanjskoj memoriji

za pohranu podataka, što će u skoroj budućnosti biti olakšavajuća okolnost za razvoj

usluga temeljenih na lokaciji. Takoñer je važna i podrška za razne video i audio formate te

formate slika koje dolaze s Androidom.

Sustav sadrži još i integrirani open source web preglednik, 2D i 3D grafičke biblioteke s

podrškom za hardversku akceleraciju, SQLite sustav za upravljanje i pohranu relacijskih

baza podataka. Upravlja GSM telefonijom, Bluetooth, EDGE, 3G i WiFi tehnologijama,

ugrañenim fotoaparatom, GPS prijemnikom, akcelerometrom za automatsku rotaciju slike

– sve ovisno o ureñaju na kojem je instaliran.

1.1.1. Arhitektura

Komponente operacijskog sustava Android dijele se u pet cjelina, kao što je prikazano na

slici Sl. 1-1:

• aplikacije,

• aplikacijski okvir (engl. application framework),

• biblioteke,

• Android runtime,

• Linux jezgra.

Page 7: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

4

Sl. 1-1 Arhitektura operacijskog sustava Android

Aplikacije čini skup osnovnih aplikacija kao što su e-mail klijet, SMS program, kalendar,

Internet preglednik i druge. Sve aplikacije napisane su u programskom jeziku Java.

Arhitektura aplikacije je napravljena na način da pojednostavi ponovnu upotrebu

komponenti. U aplikacijski okvir spadaju skup elemenata prikaza (engl. Views) koji se

koriste pri izradi aplikacije kao što su liste, gumbi, polja za unos teksta itd., zatim

pružatelji sadržaja (engl. Content Providers) koji omogućuju aplikacijama pristup

podacima drugih aplikacija, upravitelj resursa (engl. Resource Manager) koji omogućuje

pristup ostalim resursima kao što su slike ili dokumenti koji odreñuju izgled, upravitelj

obavijesti (engl. Notification Manager) koji pruža aplikacijama mogućnost prikaza

obavijesti u traci stanja, upravitelj aktivnosti (engl. Activity Manager) koji upravlja

životnim ciklusom aplikacije i brine se o navigacijskom stogu i drugi.

Biblioteke sadrže skup C/C++ biblioteka koje koriste razne komponente operacijskog

sustava meñu kojima su System C biblioteka, 3D biblioteke, SQLite i ostale.

U Android Runtime pripadaju osnovne biblioteke koje omogućuju većinu funkcionalnosti

osnovnih biblioteka programskog jezika Java. Svaka aplikacija se odvija u vlastitom

procesu i ima vlastitu instancu Dalvik virtualnog stroja koji se oslanja na Linux jezgru.

Page 8: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

5

Android koristi Linux verziju 2.6 za osnovne usluge sustava kao što su sigurnost,

upravljanje memorijom i procesima, mrežni stog i upravljački programi. Jezgra ima i ulogu

apstraktnog sloja izmeñu hardvera i softverskog stoga.

1.2. Struktura aplikacije u Androidu

Aplikacije za Android pišu se u programskom jeziku Java. Kompilirani kôd se arhivira u

Android package, označen .apk sufiksom, zajedno sa svim podacima i datotekama nužnim

za aplikaciju. U takvom obliku se aplikacija distribuira i instalira na pokretne ureñaje.

Svaka aplikacija radi u vlastitom Linux procesu koji Android pokreće kada se treba izvršiti

bilo koji dio koda aplikacije, a gasi ga kada više nije potreban. Aplikacije se izvršavaju

neovisno jedna o drugoj jer svaka koristi vlastiti virtualni stroj. Takoñer, svaka ima svoj

Linux identifikator (ID). Opće postavke su takve da podatke iz aplikacije vidi jedino sama

aplikacija i korisnik koji je trenutno koristi. Moguće je promijeniti postavke tako da dvije

aplikacije dijele identifikator te tako mogu vidjeti i podatke druge aplikacije. U tom slučaju

može se definirati da obje aplikacije rade u istom procesu kako bi se uštedjeli resursi

sustava.

Važna značajka Androida je da aplikacija može koristiti elemente druge aplikacije (ako se

definiraju dozvole od strane prve aplikacije). Time se smanjuje potreba za pisanjem istih

dijelova u različitim aplikacijama, jer je moguće pokrenuti samo dio aplikacije koji je

potreban drugoj. Android to omogućava na način da ne postoji samo jedna točka ulaska za

svaku komponentu aplikacije – ne postoji main() metoda, već je svaka aplikacija

napravljena od osnovnih komponenti koje sustav može instancirati i pokrenuti po potrebi.

Postoje četiri vrste takvih komponenti, to su:

• Activity,

• Service,

• BroadcastReceiver,

• ContentProvider.

Svaku aplikaciju koja se dizajnira za Android potrebno je razložiti na ove osnovne

elemente i definirati kada i kako se pojedini element pokreće.

Page 9: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

6

1.2.1. Activity

Activity predstavlja grafičko korisničko sučelje, ekran koji korisnik u tom trenutku vidi. To

može biti, primjerice, lista s koje korisnik nešto treba odabrati, prikaz slika u albumu ili

ekran u kojem se namještaju postavke neke aplikacije. Aplikacija za pisanje tekstualnih

poruka mogla bi imati jedan activity u kojem se piše poruka, drugi u kojem se prikazuju

kontakti iz imenika i treći za pregled poslanih poruka. Svaki od njih je nezavisan dio

aplikacije iako rade zajedno i dio su iste aplikacije. Svaki od njih je podklasa osnovne

klase Activity.

Koliko će aplikacija imati activityja ili bilo kojih drugih osnovnih komponenti i kako će

one surañivati, stvar je dizajna i namjene aplikacije. Obično aplikacija ima početni activity

koji se prikazuje korisniku kada pokrene aplikaciju. Prelazak s jednog na drugi izvodi se

tako da trenutni activity pokrene onaj koji je potreban.

Pri izradi activityja svakom je dodijeljen njegov vlastiti prozor, koji je inicijalno postavljen

da pokrije cijeli ekran, no to se, naravno, može promijeniti. Svaki activity može koristiti

dodatne elemente prikaza kao što su primjerice pop-up prozori koji zahtijevaju korisnikovu

interakciju ili prozor u koje se prikažu detaljnije informacije o elementu koji je korisnik

trenutno odabrao.

Vizualni sadržaj prozora ima hijerarhijski organiziran sadržaj elemenata prikaza koji su svi

izvedeni iz osnovne klase View. Svaki element pripada odreñenom prostoru pravokutnog

oblika unutar prozora. Pojam hijerarhijski odnosi se na elemente prikaza, pa tako element

prikaza roditelj organizira i sadrži izgled i raspored elemenata prikaza djece. Postoji skup

gotovih elemenata prikaza sadržanih u Androidu kao što su gumbi, polja za unos teksta,

izbornici, check-boxovi i drugi. Hijerarhija tih elemenata organizira se metodom

Activity.setContentView().

1.2.2. Service

Komponenta service nema grafičko sučelje nego radi u pozadini. Njen životni ciklus nije

ograničen trenutnim prikazom sučelja na ekranu kao kod activityja, ona radi u

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

pozadini, kao na primjer sviranje glazbe u pozadini dok korisnik radi nešto drugo. Može se

koristiti za dohvat podataka preko mreže ili za izračun nekih podataka koje može isporučiti

activityju koji ih treba. Svaki service je podklasa osnovne klase Service.

Page 10: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

7

Dobar primjer je media player aplikacija, koja reproducira pjesme poredane u listu.

Aplikacija bi imala nekoliko activityja u kojima bi se mogle praviti liste, pokretati

reprodukcija i mijenjati postavke, no samu reprodukciju ne bi bilo pametno izvesti unutar

activityja jer se pretpostavlja da ih korisnik često mijenja, a od takve aplikacije se očekuje

da se glazba može nastaviti reproducirati i kada korisnik promijeni activity ili pokrene

neku drugu aplikaciju. To se može izvesti tako da activity aplikacije pokrene service koji

se izvodi u pozadini. Kada korisnik napusti activity u kojemu je pokrenuo reprodukciju,

ona se nastavlja i dalje jer service još uvijek radi. Moguće je povezati se s već pokrenutim

serviceom. Za vrijeme te veze može se s njime komunicirati putem sučelja koje pruža. U

tom sučelju bi se, primjerice, moglo omogućiti da korisnik pauzira, zaustavi ili započne

reprodukciju ispočetka.

Kao i activity i ostale komponente, i service se izvodi u glavnoj niti procesa aplikacije.

Kako u ovakvim slučajevima ne bi blokirali druge komponente korisničkog sučelja, mogu

stvoriti novu nit za radnje za koje se zna da zahtijevaju više vremena.

1.2.3. Broadcast receiver

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 napona u bateriji, da se promijenila vremenska zona,

da su, aplikacijama koje ih trebaju, dostupni podaci prikupljeni s Interneta. Aplikacija

može imati bilo koji broj broadcast receivera koji mogu odgovarati na sve informacije

koje se smatraju važnima. Osnovna klasa svakog od njih je BroadcastReceiver.

Ove komponente takoñer nemaju grafičko sučelje, ali mogu pokrenuti odreñeni activity

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

obavijesti. Takve obavijesti mogu se prikazati na različite načine – kao treperenje

pozadinskog svjetla, vibracija pokretnog ureñaja, reprodukcija odreñenog zvuka. Na traci

stanja pojavi se ikona koju korisnik može odabrati kako bi pročitao obavijest.

1.2.4. Content provider

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

Page 11: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

8

omogućuju aplikacijama preuzimanje ili pohranu tipova podataka s kojima rade. Aplikacije

ne pozivaju te metode izravno, nego pomoću objekta ContentResolver. Taj objekt

može komunicirati sa svakim content providerom na način da on upravlja komunikacijom.

Operacijski sustav se brine o tome je li proces pokrenut ili ga treba pokrenuti svaki puta

kada se pojavi zahtjev koji treba obraditi aplikacija koja trenutno nije aktivna. Takoñer,

ako ne postoje instance koje su potrebne, a dio su aplikacije koja treba obraditi zahtjev,

Android ih sam stvara.

1.2.5. Datoteka manifest

Da bi se komponenta aplikacije mogla pokrenuti, Android mora znati da ta komponenta

postoji. To je izvedeno na način da aplikacija deklarira svoje komponente u manifest

datoteci koja je povezana s paketom Android aplikacije .apk. Ta datoteka je strukturirana

XML datoteka i uvijek se zove AndroidManifest.xml, za sve aplikacije. U njoj je

definirano još mnogo drugih stvari kao što su imena biblioteka s kojima aplikacija treba

biti povezana i dozvole koje se dodjeljuju aplikaciji. Android ne vidi komponente koje nisu

deklarirane u manifest datoteci te se one stoga ne mogu izvoditi.

1.2.6. Aktivacijska komponenta – Intent

Asinkrona poruka kojom se aktivira pojedina komponenta naziva se intent. To je objekt

klase Intent u kojemu je sadržaj poruke. Za activity i service ta poruka, izmeñu ostalog,

sadrži ime radnje koja se zahtijeva i URI (engl. Uniform Resource Identifier) datoteke nad

kojom ta radnja treba biti obavljena, dok za broadcast receiver 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 svake od komponenti postoje različite metode. Activity se pokreće tako da se

intent objekt pošalje metodi Context.startActivity() ili

Activity.startActivityForResult(). Česta je situacija da jedan activity

pokreće drugi. Ako očekuje neki rezultat od activityja kojeg poziva, koristi drugu

navedenu metodu. Rezultat se takoñer vraća kao intent objekt. Activity koji reagira na

intent, može provjeriti koji intent ga je pokrenuo metodom getIntent(). Service se

pokreće metodom Context.startService(). Metodom

Page 12: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

9

Context.bindService() može se uspostaviti veza izmeñu pozivajuće komponente i

servicea. Višeodredišno razašiljanje pokreće se tako da se intent objekt pošalje metodi

Context.sendBroadcast(), Context.sendOrderedBroadcast() ili

Context.sendStickyBroadcast().

Intent objekt može eksplicitno navesti ime ciljane komponente – u tom slučaju Android

pronalazi tu komponentu na temelju deklaracija u datoteci manifest i aktivira je. U slučaju

da ciljana komponenta nije imenovana, Android pronalazi najbolju komponentu koja

odgovara tom intentu. To čini tako da intent objekt usporeñuje s intent filtrom

potencijalnih ciljnih komponenti. Filtri obavještavaju operacijski sustav o tome koje vrste

intenta mogu obraditi, što je zapisano u manifest datoteci.

Komponenta može imati neograničen broj intent filtara. Ako nema nijedan, moguće ju je

aktivirati jedino intentom koji eksplicitno imenuje tu komponentu kao ciljnu.

1.2.7. Životni ciklus activityja

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

• aktivno stanje ili stanje izvoñenja – kada je prikazan na ekranu (to je stanje kada

korisnik koristi njegove mogućnosti)

• pauzirano stanje – još uvijek je vidljiv korisniku, no trenutno ga ne koristi. To je

slučaj kada je drugi activity „iznad“ njega, koji je transparentan ili ne pokriva cijeli

ekran. U slučaju da operacijski sustav ima premalo slobodne memorije, može

„ubiti“ takav activity.

• zaustavljeno stanje – drugi activity ga je potpuno prekrio. Još uvijek su sačuvane

sve informacije o stanju. Ovakvi activityji se često „ubijaju“ kada sustavu treba

memorije.

Prelazak iz jednog stanja u drugo dogaña se pozivom jedne od ovih metoda:

• void onCreate()

• void onStart()

• void onRestart()

• void onResume()

• void onPause()

• void onStop()

Page 13: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

10

• void onDestroy()

Kako activity može prijeći iz stanja u stanje prikazano je na slici Sl. 1-2.

Sl. 1-2 Dijagram stanja activityja

Sve prethodno navedene metode mogu se nadjačati (engl. override) te se tako može

definirati što treba učiniti kada se promijeni stanje. Jedina nužna metoda je onCreate()

jer se u njoj definiraju početne postavke.

Na dijagramu možemo vidjeti tri važna puta:

Page 14: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

11

• cijeli životni ciklus activityja – odvija se izmeñu prvog poziva onCreate()

metode do prvog poziva onDestroy() metode. Obuhvaćeno je sve od

definiranja početnih postavki na početku do oslobañanja zauzetih resursa.

• vidljivi ciklus activityja – odvija se izmeñu metoda onStart() i onStop().

Korisnik vidi activity na ekranu, što obuhvaća slučajeve kada je korisnik s njime u

interakciji i kada je activity vidljiv iako trenutno nije aktivan.

• aktivni ciklus activityja – odvija se izmeñu poziva metoda onResume() i

onPause(). U ovom slučaju, korisnik je u neposrednoj interakciji s activityjem .

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

activity radi, tj. u aktivnom je stanju. Metodom onPause() prelazi u pauzirano stanje iz

kojega se u aktivno može vratiti pozivom metode onResume(). Da bi se vratio u prvi

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

metodom onDestroy().

Operacijski sustav se brine za pohranu stanja activityja ako ga treba srušiti kako bi

oslobodio memoriju. Da bi to bilo moguće, treba implementirati metodu

onSaveInstanceState(), koju Android poziva kada postoji mogućnost da će

activity biti srušen – dakle prije poziva onPause() metode. Stvara se Bundle objekt u

koji se pohranjuje trenutno stanje activityja u obliku parova ime-vrijednost. Kada se taj

activtiy ponovo pokreće, Bundle objekt se predaje metodama onCreate() i

onRestoreInstanceState() (koja se izvršava nakon onStart() metode) kako bi

se moglo vratiti stanje u kojem je activity bio prije nego je srušen.

1.3. Razvoj aplikacije u Androidu

Svaka aplikacija mora imati korisničko sučelje. Android stavlja na raspolaganje velik izbor

elemenata grafičkog korisničkog sučelja. U ovom poglavlju opisat će se većina elemenata

korištenih u praktičnom dijelu ovog rada.

1.3.1. Općenito o korisni čkom su čelju

U aplikaciji za Android korisničko sučelje se sastoji od objekata tipa View i ViewGroup.

Tih elemenata ima mnogo, a zajedničko ime je da su svi podklase osnovne klase View.

Page 15: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

12

Podklase se zovu widgeti i one su objekti korisničkog sučelja koji se mogu implementirati

(primjerice polja za unos teksta ili gumbi). Klasa ViewGroup je osnova za podklase koje

se zovu izgledi (engl. layouts), a one nude različite vrste arhitekture izgleda kao što su

linearna, tablična ili relativna.

View objekt je struktura podataka čija obilježja pohranjuju parametre izgleda i sadržaj za

specifični pravokutni dio ekrana. Kao objekt u korisničkom sučelju, pojedini element

prikaza je takoñer i točka interakcije za korisnika i primatelj dogañaja interakcije.

Korisničko sučelje activityja definira se kao hijerarhija View i ViewGroup elemenata,

kao što je prikazano na slici Sl. 1-3. Gradi se od unaprijed definiranih widgeta i izgleda ili

vlastitih izrañenih elemenata prikaza.

Sl. 1-3 Hijerarhija elemenata prikaza

Da bi se elementi prikazali na ekranu, unutar activityja se mora pozvati metoda

setContentView() i proslijediti referenca korijenskom objektu. Android pomoću te

reference izmjeri i nacrta hijerarhijsko stablo, a korijenski čvor zatim zahtijeva da čvorovi

djeca nacrtaju sami sebe – svaki ViewGroup čvor poziva svaki svoj čvor dijete da to

učini. Android parsira elemente izgleda po redu, instancira elemente prikaza i dodjeljuje ih

čvorovima roditeljima. Kako se crtaju redom, ako postoji preklapanje izmeñu elemenata

bit će vidljivi oni koji su na tom području posljednji nacrtani.

1.3.2. Izgledi

Uobičajeni i najjednostavniji način definiranja izgleda i hijerarhije elemenata prikaza je

korištenje XML datoteke izgleda, koja pruža dobar i lako čitljiv pregled strukture. Svaki

element u toj datoteci je ili View ili ViewGroup objekt. Elementi prikaza se mogu

stvarati i izravno iz aplikacije i njima se može upravljati u samom kodu.

Page 16: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

13

Ime XML elementa je jednako Java klasi koju taj element predstavlja (npr. <TextView>

element stvara TextView u korisničkom sučelju), a imena atributa odgovaraju

metodama. Kada u komponentu aplikacije učitamo resurs izgleda, Android inicira te

runtime objekte koji odgovaraju elementima u datoteci izgleda. Prednost deklariranja

korisničkog sučelja XML datotekom je u tome što se time odvaja prikaz aplikacije od koda

koji upravlja njenim ponašanjem. Ta datoteka izgleda ovako:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ovo je TextView" /> </LinearLayout>

Elementi prikaza se mogu organizirati na više različitih načina koristeći različite grupe

elemenata prikaza, kao što su LinearLayout, RelativeLayout, TableLayout,

GridLayout i drugi. Svaki od njih pruža jedinstven skup parametara izgleda koji

odreñuju pozicije elemenata prikaza i strukturu izgleda.

Svaka datoteka izgleda ima točno jedan korijenski element koji je objekt tipa View ili

ViewGroup. Svi ostali objekti ili widgeti dodaju se kao elementi djeca te se tako

postupno gradi struktura stabla. Kada se aplikacija kompilira, svaka XML datoteka izgleda

se kompilira u resurs elemenata prikaza, koji se mora učitati u kodu aplikacije na ovaj

način:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView.(R.layout.main_layout); }

U ovom slučaju, kao resurs se učitava XML datoteka main_layout.xml, što se dogaña

pri svakom pokretanju activityja (jer Android poziva metodu onCreate() pri svakom

pokretanju activityja).

Svaki View i ViewGroup objekt podržava skup raznih XML atributa. Neki od njih su

specifični za pojedine View objekte, no njih imaju i objekti koji nasljeñuju tu klasu. Neke

atribute imaju svi objekti jer ih nasljeñuju od korijenske klase. Svi ostali smatraju se

Page 17: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

14

parametrima izgleda i opisuju orijentaciju View objekta. View objekt može imati integer

ID koji je jedinstvena identifikacijska oznaka tog elementa prikaza u stablu kojemu

pripada. Pri kompiliranju aplikacije, ID se referencira kao integer, no u XML datoteci se

definira kao string.

1.3.3. Izbornici

Aplikacijski izbornici su važan i često korišten dio korisničkog sučelja pomoću kojeg se

mogu koristiti funkcije aplikacije i mijenjati njene postavke. Struktura im se takoñer stvara

pomoću hijerarhije elemenata prikaza, no nju se tako ne definira. Umjesto toga, definiraju

se onCreateOptionsMenu() ili onCreateContextMenu() metode za activity i

deklariraju se elementi koje se žele uključiti u izbornik. Pri pokretanju će Android

automatski stvoriti hijerarhiju elemenata prikaza i nacrtati svaki element izbornika. Kao i

izgled aplikacije, elementi izbornika se takoñer mogu definirati u XML datoteci.

Na slici Sl. 1-4 može se vidjeti primjer izbornika.

Sl. 1-4 Primjer izbornika u Androidu

U Androidu postoje tri osnovne vrste aplikacijskih izbornika:

• izbornik opcija – osnovni skup elemenata izbornika za activity. Otvara se kada se

pritisne gumb MENU na ureñaju koji ima operacijski sustav Android.

• izbornik konteksta – predstavlja listu elemenata izbornika koja se može pojaviti

kada se duže pritisne odreñeni element prikaza.

Page 18: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

15

• pod-izbornik – predstavlja listu elemenata izbornika koju prikaže element izbornika

opcija ili izbornika konteksta. Ne podržava ugniježñene pod-izbornike.

1.3.4. Dijalozi

Dijalog je obično mali prozor koji se pojavi iznad trenutno aktivnog activityja, koji ode u

stanje pauze dok dijalog preuzme svu interakciju s korisnikom. Koriste se za obavijesti i

kratke aktivnosti koje su u neposrednom odnosu s aplikacijom koja se izvodi. Primjer se

može vidjeti na slici Sl. 1-5.

Sl. 1-5 Primjer dijaloga u Androidu

Android API podržava sljedeće vrste dijaloga:

• AlertDialog – dijalog koji može upravljati s jednim, dva ili tri gumba i s listom

elemenata koji se mogu odabrati radio gumbom ili check-boxom. To je preporučeni

tip dijaloga jer može napraviti većinu korisničkih sučelja tipa dijaloga.

• ProgressDialog – dijalog koji prikazuje indikator tijeka (engl. progress wheel,

progress bar). Kako on samo proširuje mogućnosti AlertDialoga, može koristiti i

gumbe.

• DatePickerDialog – dijalog koji omogućuje korisniku da odabere datum.

• TimePickerDialog – omogućuje korisniku da odabere vrijeme.

Page 19: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

16

Ako se želi napraviti novi tip dijaloga, kao osnova se uzme osnovni objekt Dialog koji se

može ureñivati kao i bilo koji activity – XML datotekom. Takav dijalog može sadržavati

bilo koji element prikaza, uključujući i gore navedene podklase.

Kada se dijalog želi prikazati, treba se pozvati metoda showDialog(int) iz activityja,

pri čemu joj se predaje argument tipa integer koji je jedinstveni identifikator dijaloga koji

se želi prikazati, ali nije obavezan. Dijalog se zatvara pozivom metode dismiss().

1.3.5. Obavještavanje korisnika

U radu aplikacije mogu se pojaviti situacije kada je potrebno korisnika obavijestiti o

dogañaju koji se upravo dogodio u aplikaciji. Neki dogañaji zahtijevaju korisnikov

odgovor dok drugi to ne traže.

Postoje tri vrste takvih poruka:

• Toast obavijest – kratka poruka koja dolazi iz pozadine. Koristi se za obavijesti o

uspješnosti neke radnje (primjerice, da je datoteka pohranjena).

• Obavijest trake stanja – stalni podsjetnici koji dolaze od aplikacija koje rade u

pozadini i očekuju da korisnik reagira na tu obavijest kada njemu to bude

prikladno.

• Obavijest dijaloga – obavijesti povezane s activityjem. Ako aplikacija obavlja neki

posao čiji završetak korisnik mora pričekati (kao npr. učitavanje datoteke),

obavještava ga o tome prozorom u kojemu je prikazan indikator tijeka.

Toast obavijest se samo kratko prikazuje ispred trenutnog activityja, zauzima malo

prostora i ne mijenja stanje activityja – on se i dalje vidi i ostaje interaktivan. Može ga

koristiti i service koji radi u pozadini i bit će prikazan i ako aplikacija nije aktivna. Ova

vrsta obavijesti ne podržava nikakav oblik interakcije, jer za tu namjenu postoji obavijest

trake stanja. Primjer toasta prikazan je na slici Sl. 1-6.

Page 20: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

17

Sl. 1-6 Primjer toast obavijesti

Obavijesti trake stanja postavljaju ikonu na traku stanja operacijskog sustava (koja može

sadržavati kratki tekst) i proširenu obavijest u prozor „Notifications“. Kada korisnik

odabere proširenu poruku, Android šalje intent koji se definira za tu vrstu obavijesti, a

najčešće je to pokretanje activityja.

Page 21: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

18

2. Sportska prognoza za Android

Sportska prognoza je sustav koji omogućuje sudjelovanje u igrama na sreću korištenjem

osobnog pokretnog ureñaja s operacijskim sustavom Android. Korisniku su na

raspolaganju dvije aplikacije za Android, koje mu omogućuju uplatu kladioničkog listića

sa svog pokretnog ureñaja te niz mogućnosti vezanih uz ovu vrstu igara na sreću.

Kako bi se usluga mogla koristiti, potrebno je instalirati dvije aplikacije za Android na

osobni pokretni ureñaj te se registrirati u kladionici kao korisnik usluge. Aplikacije vode

korisnika kroz cijeli proces uplate listića – od prijave na sustav, pregleda dogañaja i

filtriranja po sportovima i kategorijama do realizacije uplate i praćenja pojedinih rezultata.

Sve informacije koje su mu potrebne korisnik može dobiti na svoj pokretni ureñaj u bilo

koje vrijeme. Komunikacija s poslužiteljskom aplikacijom kladionice se odvija bežičnim

internetskim pristupom (Wi-Fi, EDGE, UMTS).

Pojednostavljeni prikaz komponenti sustava može se vidjeti na slici (Sl. 2-1).

Sl. 2-1 Komponente sustava Sportska prognoza

Page 22: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

19

2.1. Opis sustava

Sustav Sportska prognoza sastoji se od pet komponenti. Središnja komponenta, koja

upravlja logikom, obrañuje zahtjeve, šalje potrebne podatke korisničkim aplikacijama i

upravlja svom ostalom komunikacijom je poslužiteljska aplikacija i ona pripada sustavu

kladionice. Sva komunikacija s bazom podataka, čak i upis novih dogañaja u bazu, odvija

se preko ove aplikacije. Ona je i poslužitelj i klijent, jer osim što čeka i obrañuje zahtjeve

korisničkih aplikacija, šalje podatke o novim dogañajima (ako su za to namještene

postavke) kada se oni unesu u bazu podataka.

Glavni dio praktičnog dijela ovog rada je aplikacija za Android po imenu Sportska

prognoza, koja pruža svu funkcionalnost vezanu uz kladioničke listiće. Omogućuje dohvat

dogañaja koji se mogu filtrirati po kategorijama, kreiranje novog listića, spremanje

nedovršenih listića (na koje se mogu i dodavati dogañaji koje primi druga aplikacija,

Sportska prognoza LIVE), pregled odigranih listića te upravljanje opcijama vezanim uz

prijavu na sustav kladionice.

Spomenuta aplikacija za Android, Sportska prognoza LIVE, omogućuje namještanje

postavki praćenja pojedinih sportova. Postavke se šalju poslužiteljskoj aplikaciji koja ih

sprema u bazu. Korisnik tako može definirati želi li primati obavijesti o novim dogañajima

koji se unesu u bazu. Takoñer može aktivirati praćenje rezultata dogañaja s listića koji je

uplatio. Aplikacija je usko povezana sa prethodno navedenom, čijem pregledniku može

proslijediti primljene dogañaje koje korisnik može staviti na novi listić.

Aplikacija za rukovanje bazom podataka služi za lakši i pregledniji unos podataka u bazu.

Pazi na podatke koji se unose i onemogućava unos nepotpuno definiranog dogañaja.

Podatke ne unosi direktno, nego preko poslužiteljske aplikacije. Ima mogućnost unosa

ishoda dogañaja nakon što se odigra.

U bazu podataka pohranjuju se svi podaci važni za kladionički sustav – informacije o

korisnicima usluge, njihovim postavkama praćenja, uplaćenim listićima te dogañajima s

kojima se može sudjelovati u igri, čiji su svi podaci u jednoj tablici. Dogañaji su

podijeljeni u kategorije kako bi korisnik mogao definirati praćenje i dohvat samo

odreñenih sportova. Pristup bazi ima samo poslužiteljska aplikacija.

Dijagram prikazan na slici Sl. 2-2 daje uvid u poslove koje obavljaju pojedini dijelovi

sustava.

Page 23: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

20

Sl. 2-2 Dijelovi sustava i njihove funkcionalnosti

2.1.1. Dijagram slu čajeva uporabe

Sl. 2-3 Dijagram slučajeva uporabe za sustav Sportska prognoza

Slika Sl. 2-3 prikazuje dijagram slučajeva uporabe sustava.

Korisnik aplikacija za Android ima na raspolaganju niz mogućnosti. Korištenjem

aplikacije Sportska prognoza može bežičnim internetskim pristupom dohvatiti podatke o

dogañajima s kojima može sudjelovati u igri. Prije dohvaćanja može odrediti koje dogañaje

Page 24: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

21

želi, tako što koristi filtar dogañaja po sportovima i kategorijama. Iz primljene liste

dogañaja, odabire one koje želi te kreira novi listić. Listić ne mora uplatiti, već ga može

spremiti kao nedovršeni i mijenjati ga ili uplatiti kasnije. Kada se za to odluči, upisuje u

listić iznos kojim želi sudjelovati u igri i šalje ga poslužiteljskoj aplikaciji kladionice koja

potom listić pohranjuje u bazu podataka kladionice. Vrši se naplata iznosa koja se takoñer

evidentira u bazi. Uplaćeni listić se pohranjuje i u aplikaciji, kako bi ga korisnik kasnije

mogao pregledati, ako to želi.

Aplikacija Sportska prognoza LIVE proširuje mogućnosti sustava slanjem obavijesti o

dogañajima koje korisnik može definirati u aplikaciji. Može odabrati želi li pratiti rezultate

dogañaja koji su na uplaćenom listiću i može uključiti primanje obavijesti o novim

dogañajima koji se unesu u bazu. Dogañaje koje želi pratiti može filtrirati po sportovima.

Nakon što definira postavke, šalje ih poslužiteljskoj aplikaciji kladionice koja podatke o

praćenju sprema u bazu. Poslužiteljska aplikacija šalje korisniku obavijest kada se odigra

dogañaj koji je na njegovom listiću, a obavještava ga i o tome je li listić dobitan ili ne, kada

se završe svi dogañaji s uplaćenog listića. Kada se u bazu unese novi dogañaj, a korisnik

ima aktivirano praćenje njegove kategorije, šalje se obavijest o novom dostupnom

dogañaju. Iz obavijesti korisnik može proslijediti dogañaj aplikaciji Sportska prognoza,

koja ga prikazuje u svom pregledniku i iz kojega može dodati na novi ili nedovršeni listić.

Broj listića koje korisnik može uplatiti nije ograničen.

2.1.2. Komunikacija me ñu komponentama

U sustavu postoje četiri komunikacijska toka. Jedini dvosmjeran tok je izmeñu aplikacija

za Android i poslužiteljske aplikacije. Aplikacija Sportska prognoza komunicira s

poslužiteljskom aplikacijom prilikom (filtriranog) dohvaćanja parova i prilikom uplate

listića. U oba slučaja, korisnička aplikacija se ponaša kao klijent i šalje zahtjeve koje

poslužiteljska aplikacija obrañuje te šalje odgovore.

U slučaju komunikacije Sportske prognoze LIVE i poslužiteljske aplikacije, obje imaju

uloge i klijenta i poslužitelja. Sportska prognoza LIVE ima ulogu klijenta kada šalje

podatke o postavkama, no u slučaju primanja obavijesti, ima ulogu poslužitelja koji

neprestano očekuje nove obavijesti.

Page 25: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

22

Komunikacija izmeñu dviju korisničkih aplikacija se uspostavlja kada Sportska prognoza

LIVE šalje podatke o primljenom novom dogañaju aplikaciji Sportska prognoza, koja ga

prikazuje u svom pregledniku i iz njega stvara novi ili nadopunjuje nedovršeni listić.

Aplikacija za rukovanje bazom podataka komunicira s bazom posredstvom poslužiteljske

aplikacije, koja jedina izravno komunicira s bazom i izvršava sve upite. Komunikacija je

jednosmjerna jer aplikacija unosi ili novi dogañaj u bazu, ili ishod odigranog dogañaja.

Povratnu poruku o uspješnost upisa dobiva poslužiteljska aplikacija.

2.1.3. Struktura poslužiteljske aplikacije

Poslužiteljska aplikacija zove se SocketServerSP. Napravljena je u Eclipse razvojnoj

okolini (verzija 3.4.2) u programskom jeziku Java. Ova aplikacija je središnji dio sustava i

komunicira sa svim ostalim komponentama. Sastoji se od pet klasa (Sl. 2-4):

• SocketServer.java,

• ConnectionHandler.java,

• MessageHandler.java,

• DBConnector.java,

• NotificationSender.java.

Prva navedena klasa, SocketServer, glavni je dio poslužiteljske aplikacije. Za svako

spajanje na poslužiteljsku aplikaciju koje iniciraju korisničke aplikacije ili aplikacija za

rukovanje bazom, ova klasa stvara novi objekt klase ConnectionHandler koji

upravlja stvorenom vezom i kojemu se kao parametar predaje stvorena konekcija. Veza

služi za razmjenu podataka izmeñu aplikacija ili za upis podataka u bazu.

ConnectionHandler takoñer ima važnu ulogu. Osim što upravlja stvorenom vezom,

omogućuje višenitno izvoñenje na način da svaki objekt ove klase stvara novu nit, čime se

omogućava prihvaćanje više veza odjednom. Objekt ove klase razmjenjuje poruke sa

stranom koja je inicirala vezu koristeći ulazni i izlazni tok podataka koji se stvara na

temelju dobivene veze preko priključnice (eng. socket). Zadaća ove klase je i upisivanje i

mijenjanje podataka u bazi – promjene se dogañaju prilikom unosa novih dogañaja putem

aplikacije za rukovanje bazom, slanja novog listića iz aplikacije Sportska prognoza i slanja

postavki praćenja iz aplikacije Sportska prognoza LIVE.

Page 26: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

23

Klasa MessageHandler je pomoćna klasa koja služi ConnectionHandleru za slanje

poruka. Napravljena je zbog preglednije podjele poslova i bolje kontrole nad izvoñenjem

slanja poruka. Metoda sendMessage() omogućuje slanje više vrsta objekata – stringovi

koji služe kao kontrolne poruke te pojedinačno i grupno slanje novih dogañaja u obliku

liste objekata tipa VirtualEvent.

DBConnector je klasa koja upravlja unosom, dohvatom i promjenama podataka u bazi.

Pri stvaranju svake nove veze, ConnectionHandler instancira novi objekt ove klase

koji uspostavlja vezu s bazom metodom setDBConnection(). Svaka komunikacija s

bazom se odvija pozivanjem odgovarajućih metoda. Tako se primjerice kod prijave

korisnika na sustav usporeñuju uneseni podaci s onima u bazi metodom

checkLoginInformation(), unos podataka u bazu od strane aplikacije za rukovanje

bazom vrši se metodama insertInBase() i setEventResult(), uplata novog

listića izvršava se metodom insertNewBetInDB(), a za namještanje praćenja služe

metode setTrackInDB() i setResultTrackInDB().

Posljednja klasa, NotficationSender, predstavlja klijentski dio poslužitelja koji se

spaja na korisničku aplikaciju Sportska prognoza LIVE. Zadužena je za slanje obavijesti o

novom dogañaju u ponudi ili rezultatu odigranog, ako je korisnik aktivirao praćenje.

Važno je spomenuti i klasu VirtualEvent, koja se koristi kao eksterna .jar datoteka u

obje korisničke i u poslužiteljskoj aplikaciji. U njoj je definiran format poruke kojom se

razmjenjuju podaci o dogañajima u sustavu. Sadrži sve informacije o pojedinom dogañaju

te korisnikov odabir koji se odnosi na taj dogañaj (tip i koeficijent).

Sl. 2-4 Klasni dijagram poslužiteljske aplikacije

Page 27: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

24

2.1.4. Baza podataka

Baza podataka u ovom sustavu zove se „spbaza“. To je MySQL baza izrañena u Eclipse

razvojnoj okolini, verzija 3.4.2, sa SQL Explorer pluginom. Za ureñivanje je korišten i

program MySQL GUI Tools 5.0.

U bazi se pohranjuju podaci o korisnicima sustava, njihove postavke praćenja i stanje na

računu, podaci o uplaćenim listićima i podaci o dogañajima koji su dostupni korisnicima.

Četiri stalne tablice čine ovu bazu (Sl. 2-5):

• tablica „evidencija“ – služi za pohranu podataka o listićima koji su u igri.

• tablica „login“ – sadrži podatke o korisnicima sustava koji su bitni kladionici.

Vrijednost atributa USER_ADDRESS je podatak o trenutnoj IP adresi i vratima na

kojima korisnik čeka obavijesti ako je aktivirao opcije praćenja u aplikaciji

Sportska prognoza LIVE. U atribute TRACE_CHECK i

TRACE_RESULT_CHECK se zapisuje je li korisnik aktivirao praćenja.

• tablica „parovi“ – u njoj su zapisane sve informacije vezane uz pojedini dogañaj

(kategorije, imena sudionika, vrijeme odigravanja i ponuñeni koeficijenti).

• tablica „pref_sport“ – služi za definiranje postavki praćenja. Svaki dogañaj ima

oznaku sporta i kategorije (npr. zemlja odigravanja). Postoji i tablica „pref_categ“

pomoću koje se može implementirati praćenje po dodatnim kategorijama.

Sl. 2-5 Primjer stanja baze podataka s jednim uplaćenim listićem

Page 28: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

25

Za svaki uplaćeni listić u bazi se stvara nova tablica koja u sebi ima informacije o

identifikacijskom broju svakog dogañaja koji je na listiću, tip za pojedini dogañaj koji je

korisnik odigrao, pripadajući koeficijent i stupac koji označava je li rezultat evidentiran.

Kao ilustracija tablice, na slici Sl. 2-6 se može vidjeti izgled tablice „login“.

Sl. 2-6 Tablica login

2.1.5. Aplikacija za rukovanje bazom podataka

Jednostavna aplikacija, imena BazaGUI, napravljena je kako bi se pojednostavio unos

podataka o novim dogañajima u bazu. Napravljena je u Eclipse razvojnoj oklini u Java

programskom jeziku. Aplikacija ne može direktno unositi podatke u bazu, nego to čini

posredstvom poslužiteljske aplikacije. Ta odluka donesena je iz sigurnosnih razloga.

Aplikacija se sastoji od dvije klase:

• BazaGUI.java – klasa u kojoj je definiran izgled aplikacije

• SocketClientGUI.java – klasa kojom se aplikacija spaja s poslužiteljskom

aplikacijom i u kojoj se šalju poruke koje iniciraju unos podataka u bazu.

Na slici Sl. 2- je prikazan izgled ove aplikacije.

Sl. 2-7 Aplikacija za rukovanje bazom podataka

Page 29: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

26

2.2. Sportska prognoza – Android aplikacija

Sustav praćenja sportske prognoze se temelji na istoimenoj Android aplikaciji, koja

predstavlja osnovni klijentski dio ovog sustava i glavnu temu praktičnog dijela ovoga rada.

Aplikacija se sastoji od nekoliko activitya, koji koristeći mnoge ugrañene elemente prikaza

androida, stvaraju jednostavno i dobro dizajnirano grafičko sučelje s korisnikom. Sučelje

maksimalno iskorištava mogućnosti ureñaja, zahtijevajući od korisnika odabir željenih

opcija preko ekrana osjetljivog na dodir i jednostavnih ugrañenih tipki za navigaciju, dok

je unos teksta minimalan. Osnovna funkcionalnost aplikacije omogućava da korisnik

dohvati dogañaje iz baze sustava u svoj ureñaj preko bežične Internet mreže, odabere

dogañaje na koje se želi okladiti, te iste pošalje natrag uz iznos koji želi uložiti u okladu.

Pri samom izboru dogañaja, korisniku je omogućeno jednostavno filtriranje dogañaja (kroz

tip sporta koji želi pregledati) i dohvat istih sa poslužitelja. Nadalje, nakon dohvata

novih/starih dogañaja, korisnik može pregledati informacije za svaki dogañaj, odabrati tip

na koji se želi okladiti i dodati taj dogañaj u nedovršeni listić. Nedovršeni listić zapravo

predstavlja novi listić koji korisnik još nije uplatio, i ostavlja mogućnost proizvoljnog

dodavanja/izuzimanja dogañaja iz takvog listića do trenutka kada korisnik ne odluči

uplatiti listić. Uplata listića takoñer zahtijeva logiranje korisnika te uključuje provjeru

stanja računa korisnika i spremanje podataka o uplaćenom listiću, kako u sustavu, tako i na

korisnikovom ureñaju.

2.2.1. Komunikacija

Svaku komunikaciju sa ostalim dijelovima sustava aplikacija inicira sama (slučaj kada

aplikacija Sportska prognoza LIVE pokreće dio aplikacije ovdje se ne uzima u obzir) i

može se podijeliti u dva slučaja: slučaj kada korisnik želi dohvatiti i pregledati nove

dogañaje (Sl. 2-8) i slučaj kada želi uplatiti listić (Sl. 2-10). Prvi slučaj se izravno veže na

drugi, jer potrebno je dohvatiti dogañaje, kako bi ih korisnik mogao odabrati i poslati u

željenom trenutku.

Page 30: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

27

Sl. 2-8 Slijedni dijagram za slučaj kada korisnik dohvaća nove dogañaje

U oba slučaja, komunikacija se preko mreže odvija korištenjem priključnica, gdje se

aplikacija spaja na poslužitelj i stvara se nova veza. Tijekom veze, najprije se u oba slučaja

obavlja provjera korisnika zasebno, zatim se odmah nakon stvara nova veza u kojoj se

izmjenjuju potrebni podaci. Podaci se razmjenjuju koristeći Java tehnologije ulaznih i

izlaznih tokova podataka, gdje se za podatke uzima općeniti oblik podataka, objekt

(ObjectOutputStream i ObjectInputStream), kako bi se omogućila razmjena formata

podataka definiranih u sustavu (klasa VirtualEvent).

Sl. 2-9: Slijedni dijagram programskog ostvarenja dohvata dogañaja u Android aplikaciji

Page 31: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

28

Sl. 2-10: Slijedni dijagram za slučaj kada korisnik uplaćuje novi listić

Page 32: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

29

Sl. 2-11: Slijedni dijagram programskog ostvarenja uplate listića u Android aplikaciji

2.2.2. Programsko ostvarenje i funkcionalnosti

Konkretno programsko ostvarenje aplikacije je vidljivo iz klasnog dijagrama (Sl. 2-12) i

slijednih dijagrama (Sl. 2-9, Sl. 2-11), u kojem većina klasa zapravo predstavljaju zasebne

activitye. Klasa SportskaPrognoza (Sl. 2-13) predstavlja početni ekran u kojemu su

korisniku ponuñene sve akcije koje korisnik može obaviti u aplikaciji. Programski, nakon

pokretanja programa izgled ekrana se učitava iz XML datoteke (izgled), na temelju kojeg

se i definiraju objekti s kojima je potrebno rukovoditi (u ovom slučaju, za svaki tekst u

izborniku definira se akcija kada korisnik klikne – pokretanje odgovarajućeg activitya).

Page 33: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

30

Sl. 2-12: Klasni dijagram sa nekim važnijim metodama i atributima

Sl. 2-13: Početni ekran aplikacije - izbornik

Klasa GetBets predstavlja activity na kojem korisnik može filtrirati izbor sportova koje

želi dohvatiti (Sl. 2-14), a koji se dinamički učitavaju iz XML datoteke (koju program

dohvaća, kao i sve definirano u XML datotekama, kao interni resurs). Izbor se omogućava

Page 34: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

31

pomoću Androidovog elementa prikaza spinner (padajući izbornik) i odabrani element

predstavlja trenutni izbor sporta koji se želi dohvatiti. Dohvat započinje pritiskom na

gumb, čime se stvara objekt klase SocketClient, kojim se dohvaćaju dogañaji iz baze

preko poslužitelja.

SocketClient je klasa kojom se regulira svaka komunikacija sa poslužiteljem; u

slučaju logiranja korisnika, dohvata parova ili uplaćivanja listića. Radi sigurnosti, odnosno

stabilnosti aplikacije, sve operacije ove klase se odvijaju u posebnoj niti. Klasa koristi

pomoćne metode za slanje svake pojedine poruke (sendMessage() koji prima niz

znakova ili listu dogaña, VirtualEvent), te posebnu metodu za kratke obavijesti

(spomenuti Toast), tipa Handler, koja je potreba za komunikaciju sa grafičkim sučeljem

pošto se sve odvija u posebnoj niti procesa.

Sl. 2-14: Ekran dohvata novih dogañaja i prikaz kategorija sporta

Klasa ViewBet služi prikazu dogañaja nakon što se isti dohvate (nakon čega activity

GetBets završava); prikazuju se korištenjem Androidovih mehanizama pogodnih za ispis

i kontrolu elemenata u listi: ArrayAdapter i element prikaza ListView. Odabirom

pojedinog elementa stvara se novi dijalog (Sl. 2-15) u kojem su prikazane informacije o

dogañaju te se nudi izbor koeficijenta i dodavanje dogañaja u listu novih (za trenutno

dodane se ispisuje poruka). Prije svega, u listu novih dogañaja učitavaju već dodani se iz

datoteke za nedovršene (draft.dat), kako bi se kontroliralo dodavanje istih dogañaja (dva

Page 35: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

32

ista dogañaja ne mogu biti u listiću bez obzira na koeficijent!). Daljnje akcije se

kontroliraju preko jednostavnog izbornika, u kojem se za slučaj izlaza u glavni ekran

omogućava spremanje dodanih u nedovršeni listić (jednostavan AlertDialog), a u slučaju

ispunjavanja nedovršenog listića, spomenuto spremanje se automatski izvršava.

Izborom brisanja nedovršenog listića, briše se datoteka nedovršenih i lista za prikaz se

resetira. Android koristi za upis i čitanje iz datoteke mehanizme slične Javinim, osim što se

kod otvaranja datoteke za upis dodatno definira tip otvaranja (nova datoteka ili dodavanje

u postojeću) i dozvole drugih aplikacija za čitanje/pisanje. Ova klasa se jedina referencira

na Sportsku prognozu LIVE tako da provjerava intent kojim je pokrenuta; ako je pokrenuta

od strane navedene aplikacije, listu dogañaja učitava iz datoteke koja pripada drugoj

aplikaciji.

Sl. 2-15: Ekran pregleda dogañaja i dijalog sa informacijama o jednom dogañaju

Pregled nedovršenog listića se izvršava u activityu kojeg definira klasa DraftBet do koje

se može doći izravno iz početnog ekrana ili nakon pregleda dohvaćenih listića. Lista

dogañaja se učitava iz spomenute datoteke i prikaz se vrši na isti način kao u klasi

GetBets. Prikazuju se dogañaji sa odabranim koeficijentima, koje je moguće jedino

maknuti iz liste (čime se izvršava postupak ponovnog spremanja u datoteku i resetiranja

prikaza na ekranu – metode resetDraftList() i saveDraftChanges()).

Izbornikom se korisniku nudi brisanje svih dogañaja iz nedovršenog listića, te postavljanje

oklade - otvara se novi dijalog (Sl. 2-16) unutar kojeg korisnik unosi željeni iznos,

Page 36: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

33

izračunava se trenutni dobitak na temelju ukupnog koeficijenta (koji se zaokružuje na dvije

decimale, kao i dobitak, zbog formata podataka u bazi) te se omogućuje uplaćivanje listića.

Uplaćivanje opet započinje postupkom logiranja korisnika (klasom LoginDialog),

nakon čega se stvara objekt klase SocketClient kojim se upravlja razmjena podataka

sa serverom (vidljiva je iz prikazanih slijednih dijagrama). Ako je listić uplaćen, svi

dogañaji iz listića spremaju se u posebnu datoteku (čije je ime serijski broj listića), te se

unosi i jedan niz znakova, koji prikazuje odabrani listić u popisu svih odigranih (taj popis

se sprema u datoteku playedBets.dat).

Sl. 2-16: Ekran novog/nedovršenog listića, uplaćivanje listića

Spomenuti LoginDialog je klasa unutar koje se stvara poseban dijalog (Sl. 1-5) preko

kojeg se unose korisnički podaci. Ovakav prozor je općenitije klase Dialog i njegov

izgled se može definirati kao i za bilo koji activity (XML datotekom) te istovjetno rukovati

svim objektima. Stvoreni dijalog nudi opciju spremanja korisničkih podataka preko

dijeljenih postavki (Shared Preferences) – Androidov mehanizam za spremanje i čitanje

jednostavnih tipova podataka, koji mogu biti vidljivi samo unutar jedne aplikacije ili njene

cjeline (activity, service), što je ovdje i slučaj. Spremljeni podaci se uvijek čitaju pri

stvaranju dijaloga, ili brišu ako korisnik to zatraži. Ako korisnik unese podatke i odabere

dohvat dogañaja, unutar ove klase se stvara nova veza, poslužitelju se prenose korisnički

podaci i nakon prijenosa, dijalog nestaje s ekrana.

Page 37: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

34

Konačno, klasa PlayedBets (Sl. 2-17) predstavlja ekran na kojem se stvara lista svih

odigranih listića (iz spomenute datoteke). Lista se stvara na već spomenuti način, te na

svaki odabir pojedinog elementa (koji daje informacije o jednom listiću) korisniku se daje

izbor; brisanje odabranog listića ili pregled. Kod pregleda listića, u listu se učitavaju svi

dogañaji iz odabranog (iz datoteke čije je ime serijski broj listića, npr _1234.dat). U tom je

slučaju izbornikom jedino moguće vratiti se na pregled svih listića, dok je u pregledu još i

moguće brisanje svih evidencija o listićima (na što se briše datoteka playedBets.dat i

datoteka svakog pojedinog listića).

Sl. 2-17: Ekran pregleda uplaćenih listića

Page 38: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

35

3. Zaklju čak

Android platforma predstavlja nov i intuitivan način razvijanja i korištenja programske

potpore za pametne pokretne ureñaje. Korištenje je samo po sebi prednost zbog

jednostavnog i dobro dizajniranog sučelja; drugačije i ne može biti zbog velike

konkurencije na tržištu pokretnih ureñaja. Platforma je stalno u razvitku, na tržištu postoji

već popriličan broj aplikacija za Android, još je samo potrebno dodatno plasirati samu

platformu na što više ureñaja i na što veće tržište, na čemu proizvoñači i rade.

Razvijanje aplikacije za android je takoñer poprilično dobro izvedeno; jedna od najvećih

prednosti je jasno odvajanje izgleda aplikacije od same strukture (programskog koda).

Nadalje, razni ugrañeni elementi prikaza i mehanizmi u Androidu omogućavaju brz razvoj

aplikacije za uobičajene potrebe (multimedija, komunikacija s ostalim korisnim

aplikacijama), dok je istodobno sve elemente moguće maksimalno izmijeniti i prilagoditi

svojim potrebama.

Važni preduvjeti za razvoj aplikacija u androidu jesu dobro poznavanje programskog

jezika Java i upoznatost sa osnovnim mehanizmima u Android aplikacijama. Postupno

upoznavanje s elementima android aplikacije i njihovim korištenjem u izradi tada ne

predstavlja veliki problem. No, bitan element je i komunikaciju s drugim ureñajima i

entitetima na mreži, to je glavna svrha pokretnih ureñaja, što je i pokazano sustavom

razvijenim za ovaj rad. Takva povezanost, u kombinaciji s naprednim načinima

prezentacije podataka korisniku i njihovu obradu, pokazuju svu moć ove platforme.

Page 39: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

36

4. Literatura

[1] What is Android?, Android developers, http://developer.android.com/guide/basics/what-is-android.html

[2] Android Development Community, Android Tutorials, http://www.anddev.org/

[3] Ganesan, G., Android Tutorial, http://geeth.ganesan.googlepages.com/android-tutorial

[4] Paller, G., My life with Android, http://mylifewithandroid.blogspot.com/

Page 40: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

37

Sažetak

U ovom radu izrañena je aplikacija za operacijski sustav Android kao dio sustava Sportska

prognoza. Sustav omogućuje sudjelovanje u igrama na sreću putem osobnog pokretnog

ureñaja s operacijskim sustavom Android, pri čemu se komunikacija odvija bežičnim

internetskim putem. Sastoji se od poslužiteljske aplikacije, baze podataka, aplikacije za

rukovanje bazom i dvije korisničke aplikacije za Android.

Aplikacija Sportska prognoza pruža mogućnost dohvata i pregleda dogañaja, kreiranje i

uplatu listića, pohranu nedovršenog listića te pregled starih listića. Aplikacija Sportska

prognoza LIVE proširuje mogućnosti sustava tako što omogućuje aktivaciju praćenja

rezultata dogañaja s korisnikovih uplaćenih listića te novih dogañaja u ponudi kladionice,

pri čemu korisnik može filtrirati dogañaje koje želi pratiti.

Klju čni pojmovi

Operacijski sustav Android, aplikacija za Android, activity, elementi prikaza, service,

datoteka manifest, intent, sustav sportske prognoze, pregled dogañaja, uplata listića,

praćenje rezultata.

Page 41: RAZVOJ PROGRAMA ZA PRISTUP I OBRADU INFORMACIJA NA POKRETNOM ...

38

Abstract

The result of this case study is an application for the Android operating system which is a

part of the Sport Events Forecast System. The system allows its clients to take part in

sports betting games by using their personal mobile phone running the Android operating

system. It consists of a server application, a database, a database management application

and two user applications for Android. All system parts communicate via wireless Internet

access.

The Sport Event Forecast application allows retrieval and viewing of sport events, betting

ticket creation and payment, storage of a sketch ticket and reviewing played tickets. The

Sport Event Forecast LIVE application extends the systems capabilities by providing the

event result tracing option and new event subscription option in which the user gets to

choose which sport categories he is willing to subscribe to.

Key terms

Android operating system, Android application, activity, views, service, manifest file,

intent, sport event forecast system, sport events viewing, betting ticket payment, result

tracing.