12.07.2015 Views

Razvoj programa za dohvat i prezentaciju informacija na ... - FER

Razvoj programa za dohvat i prezentaciju informacija na ... - FER

Razvoj programa za dohvat i prezentaciju informacija na ... - FER

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

SVEUČILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RAČUNARSTVAZAVRŠNI RAD br. 929RAZVOJ PROGRAMA ZA DOHVAT IPREZENTACIJU INFORMACIJA NAPOKRETNOM UREĐAJU S OPERACIJSKIMSUSTAVOM ANDROIDMatko Ku<strong>na</strong>Zagreb, lipanj 2009.


SadržajUvod ....................................................................................................................................... 11. Operacijski sustav Android ............................................................................................ 21.1. Osnovne z<strong>na</strong>čajke .................................................................................................. 21.1.1. Arhitektura ..................................................................................................... 31.2. Struktura aplikacije u Androidu ............................................................................. 51.2.1. Activity .......................................................................................................... 61.2.2. Service ........................................................................................................... 61.2.3. Broadcast receiver .......................................................................................... 71.2.4. Content provider ............................................................................................ 71.2.5. Datoteka manifest .......................................................................................... 81.2.6. Aktivacijska komponenta – Intent ................................................................. 81.2.7. Životni ciklus activityja ................................................................................. 91.3. <strong>Razvoj</strong> aplikacije u Androidu .............................................................................. 111.3.1. Općenito o korisničkom sučelju .................................................................. 121.3.2. Izgledi .......................................................................................................... 131.3.3. Izbornici ....................................................................................................... 141.3.4. Dijalozi ......................................................................................................... 151.3.5. Obavještavanje korisnika ............................................................................. 162. Sportska progno<strong>za</strong> <strong>za</strong> Android ..................................................................................... 182.1. Opis sustava ......................................................................................................... 192.1.1. Dijagram slučajeva uporabe ......................................................................... 202.1.2. Komunikacija među komponentama ........................................................... 212.1.3. Programska izvedba poslužiteljske aplikacije ............................................. 222.1.4. Ba<strong>za</strong> podataka .............................................................................................. 24


2.1.5. Aplikacija <strong>za</strong> rukovanje bazom podataka .................................................... 252.2. Sportska progno<strong>za</strong> LIVE ..................................................................................... 262.2.1. Korisničko sučelje ........................................................................................ 292.2.2. Programska izvedba ..................................................................................... 32Zaključak ............................................................................................................................. 34Literatura .............................................................................................................................. 35Sažetak ................................................................................................................................. 36Ključni pojmovi ................................................................................................................... 36


UvodOperacijski sustav Android je još uvijek novost u svijetu pokretnih uređaja. Konkurencijaje drugim operacijskim sustavima <strong>za</strong> pametne pokretne uređaje kao što su Appleov iPhoneOS te razne izvedenice Windows Mobilea i Symbia<strong>na</strong>. Android karakterizira otvore<strong>na</strong>arhitektura sa specifičnim odnosom između aplikacija i prika<strong>za</strong> <strong>na</strong> ekranu te mogućnost dase promijeni i svaka uobičaje<strong>na</strong> aplikacija koja dolazi s operacijskim sustavom, što govoridovoljno o fleksibilnosti koju pruža.Praktični dio ovog <strong>za</strong>vršnog rada je aplikacija <strong>za</strong> Android, no prije svega treba se dobroupoz<strong>na</strong>ti s njegovim <strong>na</strong>činom funkcioniranja i strukturom aplikacije kako bi se mogledemonstrirati njegove mogućnosti.Aplikacija predstavlja <strong>na</strong>dogradnju Java aplikacije <strong>za</strong> pokretne uređaje izrađene <strong>na</strong>studentskom projektu, no s njom, osim u osnovnom konceptu, nema mnogo dodirnihtočaka. Radi se o sustavu koji omogućuje sudjelovanje u igrama <strong>na</strong> sreću putem pokretnoguređaja, s tim da se sva komunikacija odvija putem bežičnog internetskog prijenosapodataka. Korisniku aplikacije omoguće<strong>na</strong> je uplata kladioničkog listića sa svog osobnogpokretnog uređaja, kreiranje nedovršenog listića, pregled starih uplata, definiranje postavkipraćenja pojedinih događaja koje uključuju slanje obavijesti korisniku o novim događajimaili ishodima <strong>za</strong>vršenih događaja i prikaz ponuđenih događaja razvrstanih po sportovima izemljama odigravanja <strong>na</strong> <strong>za</strong>htjev, pri čemu se vodi briga o korisnikovoj privatnosti isigurnosti.Sve <strong>na</strong>vedeno prilagođeno je operacijskom sustavu Android – posebnostima ve<strong>za</strong>nim uzprikaz dijelova aplikacija te njihovu komunikaciju i pokretanje. Cilj svega ovoga jepredstaviti Android kao platformu koja podržava kreativnost i inovativnost programera ikoja će biti laka <strong>za</strong> korištenje i <strong>za</strong>bav<strong>na</strong> – kako <strong>za</strong> programera tako i <strong>za</strong> korisnika.Rad se bavi proučavanjem operacijskog sustava Android i <strong>na</strong>či<strong>na</strong> izrade aplikacija <strong>za</strong> njegate izradom sustava <strong>za</strong> sudjelovanje u igrama <strong>na</strong> sreću uključujući i korisničku aplikaciju <strong>za</strong>Android.Prvo poglavlje opisuje posebnosti ovog operacijskog sustava, dok su u drugom opisaniizrađeni sustav i aplikacija.1


1. Operacijski sustav AndroidTvrtka Google izradila je operacijski sustav Android, a Open Handset Alliance izdao jeAndroid alat <strong>za</strong> izradu softvera (engl. Software Development Kit, skraćeno SDK) 12.studenog 2007. i <strong>za</strong>nimanje <strong>za</strong> njega neprestano raste. To je programski složaj kojiuključuje operacijski sustav, middleware i ključne aplikacije. SDK sadrži alate i sučelja <strong>za</strong>programiranje aplikacija (engl. Application Programming Interface, skraćeno API) koji supotrebni <strong>za</strong> razvoj aplikacija <strong>na</strong> Android platformi koristeći programski jezik Java.1.1. Osnovne z<strong>na</strong>čajkeAndroid je <strong>za</strong>mišljen kao operacijski sustav koji će u potpunosti i <strong>na</strong> <strong>na</strong>jefikasniji <strong>na</strong>činiskoristit sve resurse i mogućnosti koje mu pruža uređaj <strong>na</strong> kojemu je instaliran. Di<strong>za</strong>jniranje otvoreno, pa tako svaka aplikacija može koristiti sve osnovne funkcio<strong>na</strong>lnosti uređajakao što su ostvarivanje poziva, slanje tekstualnih poruka ili, primjerice, korištenjeugrađenog fotoaparata. Programer aplikacija može izmijeniti cijeli operacijski sustav utolikoj mjeri da isti više nema veze s uobičajenim.Osnova mu je Linux jezgra (engl. kernel) koja koristi specifični virtualni stroj di<strong>za</strong>jnirankako 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 <strong>na</strong>dolazeće tehnologijemogu lako implementirati.Virtualni stroj sustava zove se Dalvik Virtual Machine i temeljen je <strong>na</strong> registru, <strong>za</strong> razlikuod Java Virtual Machinea (skraćeno JVM) koji je temeljen <strong>na</strong> stogu. DalvikVM jeinterpreter, a radi s Dalvik Executable (*.dex) podacima. Pokreće klase kompilirane Javakompilatorom koje se pretvaraju alatom „dx“ u njemu potreban format. Sve to je<strong>na</strong>pravljeno s ciljem istovremenog izvođenja više virtualnih strojeva koji koriste malomemorije kako bi očuvali stabilnost sustava – međusobno se štite kako aplikacija koja seruši ne bi <strong>za</strong> sobom povukla druge. DalvikVM je temeljen <strong>na</strong> registru jer su procesori <strong>za</strong>pokretne uređaje prilagođeni <strong>za</strong> registarski rad koji omogućava brže izvođenje aplikacijapo cijenu veličine <strong>programa</strong> koji su veći <strong>na</strong>kon kompilacije.2


Sve aplikacije imaju jed<strong>na</strong>ku važnost – operacijski sustav ne pravi razliku izmeđutemeljnih aplikacija i onih instaliranih <strong>na</strong>k<strong>na</strong>dno. Ta z<strong>na</strong>čajka pogoduje korisniku jer možeorganizirati sustav po vlastitim željama. Komunikacija u sustavu temelji se <strong>na</strong> takozvanimintentima, porukama <strong>na</strong> koje se reagira određenom radnjom. Za svaku aplikaciju ili njendio, može se definirati <strong>na</strong> koje poruke treba reagirati. Više aplikacija može reagirati <strong>na</strong> istuporuku. U tom slučaju sustav pita korisnika koju aplikaciju želi da obradi dolazeći intent.Kako je svuda <strong>na</strong>glasak <strong>na</strong> jednostavnosti, ni izrada aplikacija <strong>za</strong> Android nije iznimka.Programer može jednostavno pristupiti svemu što treba, pa se multimedijske aplikacijemogu <strong>na</strong>praviti lakše nego <strong>za</strong> neke druge operacijske sustave. Aplikacije mogu dohvaćatipodatke s Interneta te ih, primjerice, kombinirati s nekim podacima koje se <strong>na</strong>laze <strong>na</strong>pokretnom uređaju. Lako se može pristupiti GPS prijemniku, kameri ili vanjskoj memoriji<strong>za</strong> pohranu podataka, što će u skoroj budućnosti biti olakšavajuća okolnost <strong>za</strong> razvojusluga temeljenih <strong>na</strong> lokaciji. Također je važ<strong>na</strong> i podrška <strong>za</strong> razne video i audio formate teformate slika koje dolaze s Androidom.Sustav sadrži još i integrirani open source web preglednik, 2D i 3D grafičke biblioteke spodrškom <strong>za</strong> hardversku akceleraciju, SQLite sustav <strong>za</strong> upravljanje i pohranu relacijskihba<strong>za</strong> podataka. Upravlja GSM telefonijom, Bluetooth, EDGE, 3G i WiFi tehnologijama,ugrađenim fotoaparatom, GPS prijemnikom, akcelerometrom <strong>za</strong> automatsku rotaciju slike– sve ovisno o uređaju <strong>na</strong> kojem je instaliran.1.1.1. ArhitekturaKomponente operacijskog sustava Android dijele se u pet cjeli<strong>na</strong>, kao što je prika<strong>za</strong>no <strong>na</strong>slici 1.1:• aplikacije,• aplikacijski okvir (engl. application framework),• biblioteke,• Android runtime,• Linux jezgra.3


Sl. 1.1 Arhitektura operacijskog sustava AndroidAplikacije čini skup osnovnih aplikacija kao što su e-mail klijet, SMS program, kalendar,Internet preglednik i druge. Sve aplikacije <strong>na</strong>pisane su u programskom jeziku Java.Arhitektura aplikacije je <strong>na</strong>pravlje<strong>na</strong> <strong>na</strong> <strong>na</strong>čin da pojednostavi ponovnu upotrebukomponenti. U aplikacijski okvir spadaju skup eleme<strong>na</strong>ta prika<strong>za</strong> (engl. Views) koji sekoriste pri izradi aplikacije kao što su liste, gumbi, polja <strong>za</strong> unos teksta itd., <strong>za</strong>timpružatelji sadržaja (engl. Content Providers) koji omogućuju aplikacijama pristuppodacima drugih aplikacija, upravitelj resursa (engl. Resource Ma<strong>na</strong>ger) koji omogućujepristup ostalim resursima kao što su slike ili dokumenti koji određuju izgled, upraviteljobavijesti (engl. Notification Ma<strong>na</strong>ger) koji pruža aplikacijama mogućnost prika<strong>za</strong>obavijesti u traci stanja, upravitelj aktivnosti (engl. Activity Ma<strong>na</strong>ger) koji upravljaživotnim ciklusom aplikacije i brine se o <strong>na</strong>vigacijskom stogu i drugi.Biblioteke sadrže skup C/C++ biblioteka koje koriste razne komponente operacijskogsustava među kojima su System C biblioteka, 3D biblioteke, SQLite i ostale.U Android Runtime pripadaju osnovne biblioteke koje omogućuju većinu funkcio<strong>na</strong>lnostiosnovnih biblioteka programskog jezika Java. Svaka aplikacija se odvija u vlastitomprocesu i ima vlastitu instancu Dalvik virtualnog stroja koji se oslanja <strong>na</strong> Linux jezgru.4


Android koristi Linux verziju 2.6 <strong>za</strong> osnovne usluge sustava kao što su sigurnost,upravljanje memorijom i procesima, mrežni stog i upravljački programi. Jezgra ima i uloguapstraktnog sloja između hardvera i softverskog stoga.1.2. Struktura aplikacije u AndroiduAplikacije <strong>za</strong> Android pišu se u programskom jeziku Java. Kompilirani kôd se arhivira uAndroid package, oz<strong>na</strong>čen .apk sufiksom, <strong>za</strong>jedno sa svim podacima i datotekama nužnim<strong>za</strong> aplikaciju. U takvom obliku se aplikacija distribuira i instalira <strong>na</strong> pokretne uređaje.Svaka aplikacija radi u vlastitom Linux procesu koji Android pokreće kada se treba izvršitibilo koji dio koda aplikacije, a gasi ga kada više nije potreban. Aplikacije se izvršavajuneovisno jed<strong>na</strong> o drugoj jer svaka koristi vlastiti virtualni stroj. Također, svaka ima svojLinux identifikator (ID). Opće postavke su takve da podatke iz aplikacije vidi jedino samaaplikacija i korisnik koji je trenutno koristi. Moguće je promijeniti postavke tako da dvijeaplikacije dijele identifikator te tako mogu vidjeti i podatke druge aplikacije. U tom slučajumože se definirati da obje aplikacije rade u istom procesu kako bi se uštedjeli resursisustava.Važ<strong>na</strong> z<strong>na</strong>čajka Androida je da aplikacija može koristiti elemente druge aplikacije (ako sedefiniraju dozvole od strane prve aplikacije). Time se smanjuje potreba <strong>za</strong> pisanjem istihdijelova u različitim aplikacijama, jer je moguće pokrenuti samo dio aplikacije koji jepotreban drugoj. Android to omogućava <strong>na</strong> <strong>na</strong>čin da ne postoji samo jed<strong>na</strong> točka ulaska <strong>za</strong>svaku komponentu aplikacije – ne postoji main() metoda, već je svaka aplikacija<strong>na</strong>pravlje<strong>na</strong> 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 di<strong>za</strong>jnira <strong>za</strong> Android potrebno je razložiti <strong>na</strong> ove osnovneelemente i definirati kada i kako se pojedini element pokreće.5


1.2.1. ActivityActivity predstavlja grafičko korisničko sučelje, ekran koji korisnik u tom trenutku vidi. Tomože biti, primjerice, lista s koje korisnik nešto treba odabrati, prikaz slika u albumu iliekran u kojem se <strong>na</strong>mještaju postavke neke aplikacije. Aplikacija <strong>za</strong> pisanje tekstualnihporuka mogla bi imati jedan activity u kojem se piše poruka, drugi u kojem se prikazujukontakti iz imenika i treći <strong>za</strong> pregled poslanih poruka. Svaki od njih je ne<strong>za</strong>visan dioaplikacije iako rade <strong>za</strong>jedno i dio su iste aplikacije. Svaki od njih je podklasa osnovneklase Activity.Koliko će aplikacija imati activityja ili bilo kojih drugih osnovnih komponenti i kako ćeone surađivati, stvar je di<strong>za</strong>j<strong>na</strong> i <strong>na</strong>mjene aplikacije. Obično aplikacija ima početni activitykoji se prikazuje korisniku kada pokrene aplikaciju. Prela<strong>za</strong>k s jednog <strong>na</strong> drugi izvodi setako da trenutni activity pokrene o<strong>na</strong>j koji je potreban.Pri izradi activityja svakom je dodijeljen njegov vlastiti prozor, koji je inicijalno postavljenda pokrije cijeli ekran, no to se, <strong>na</strong>ravno, može promijeniti. Svaki activity može koristitidodatne elemente prika<strong>za</strong> kao što su primjerice pop-up prozori koji <strong>za</strong>htijevaju korisnikovuinterakciju ili prozor u koje se prikažu detaljnije informacije o elementu koji je korisniktrenutno odabrao.Vizualni sadržaj prozora ima hijerarhijski organiziran sadržaj eleme<strong>na</strong>ta prika<strong>za</strong> koji su sviizvedeni iz osnovne klase View. Svaki element pripada određenom prostoru pravokutnogoblika unutar prozora. Pojam hijerarhijski odnosi se <strong>na</strong> elemente prika<strong>za</strong>, pa tako elementprika<strong>za</strong> roditelj organizira i sadrži izgled i raspored eleme<strong>na</strong>ta prika<strong>za</strong> djece. Postoji skupgotovih eleme<strong>na</strong>ta prika<strong>za</strong> sadržanih u Androidu kao što su gumbi, polja <strong>za</strong> unos teksta,izbornici, check-boxovi i drugi. Hijerarhija tih eleme<strong>na</strong>ta organizira se metodomActivity.setContentView().1.2.2. ServiceKomponenta service nema grafičko sučelje nego radi u po<strong>za</strong>dini. Njen životni ciklus nijeograničen trenutnim prikazom sučelja <strong>na</strong> ekranu kao kod activityja, o<strong>na</strong> radi uneodređenom vremenskom razdoblju. Koristi se <strong>za</strong> <strong>za</strong>datke koji se mogu izvoditi upo<strong>za</strong>dini, kao <strong>na</strong> primjer sviranje glazbe u po<strong>za</strong>dini dok korisnik radi nešto drugo. Može sekoristiti <strong>za</strong> <strong>dohvat</strong> podataka preko mreže ili <strong>za</strong> izračun nekih podataka koje može isporučitiactivityju koji ih treba. Svaki service je podklasa osnovne klase Service.6


Dobar primjer je media player aplikacija, koja reproducira pjesme poredane u listu.Aplikacija bi imala nekoliko activityja u kojima bi se mogle praviti liste, pokretatireprodukcija i mijenjati postavke, no samu reprodukciju ne bi bilo pametno izvesti unutaractivityja jer se pretpostavlja da ih korisnik često mijenja, a od takve aplikacije se očekujeda se glazba može <strong>na</strong>staviti reproducirati i kada korisnik promijeni activity ili pokreneneku drugu aplikaciju. To se može izvesti tako da activity aplikacije pokrene service kojise izvodi u po<strong>za</strong>dini. Kada korisnik <strong>na</strong>pusti activity u kojemu je pokrenuo reprodukciju,o<strong>na</strong> se <strong>na</strong>stavlja i dalje jer service još uvijek radi. Moguće je pove<strong>za</strong>ti se s već pokrenutimserviceom. Za vrijeme te veze može se s njime komunicirati putem sučelja koje pruža. Utom sučelju bi se, primjerice, moglo omogućiti da korisnik pauzira, <strong>za</strong>ustavi ili <strong>za</strong>počnereprodukciju ispočetka.Kao i activity i ostale komponente, i service se izvodi u glavnoj dretvi procesa aplikacije.Kako u ovakvim slučajevima ne bi blokirali druge komponente korisničkog sučelja, mogustvoriti novu dretvu <strong>za</strong> radnje <strong>za</strong> koje se z<strong>na</strong> da <strong>za</strong>htijevaju više vreme<strong>na</strong>.1.2.3. Broadcast receiverZadatak komponenti ovog tipa je da primaju obavijesti o višeodredišnom ra<strong>za</strong>šiljanju(engl. broadcast) i reagiraju <strong>na</strong> njih. U radu aplikacija i sustava pojavljuje se mnogo takvihobavijesti, npr. obavijest da ponestaje <strong>na</strong>po<strong>na</strong> u bateriji, da se promijenila vremenska zo<strong>na</strong>,da su, aplikacijama koje ih trebaju, dostupni podaci prikupljeni s Interneta. Aplikacijamože imati bilo koji broj broadcast receivera koji mogu odgovarati <strong>na</strong> sve informacijekoje se smatraju važnima. Osnov<strong>na</strong> klasa svakog od njih je BroadcastReceiver.Ove komponente također nemaju grafičko sučelje, ali mogu pokrenuti određeni activitykao odgovor <strong>na</strong> informaciju koju su dobili ili umjesto toga mogu koristiti upraviteljaobavijesti. Takve obavijesti mogu se prika<strong>za</strong>ti <strong>na</strong> različite <strong>na</strong>čine – kao treperenjepo<strong>za</strong>dinskog svjetla, vibracija pokretnog uređaja, reprodukcija određenog zvuka. Na tracistanja pojavi se iko<strong>na</strong> koju korisnik može odabrati kako bi pročitao obavijest.1.2.4. Content providerOva komponenta se koristi <strong>za</strong> isporuku skupa podataka aplikacije drugim aplikacijama. Tipodaci mogu se pohraniti u datotečni sustav kao datoteka ili u obliku SQLite bazepodataka. Osnov<strong>na</strong> klasa je ContentProvider koja sadrži standardni skup metoda koje7


omogućuju aplikacijama preuzimanje ili pohranu tipova podataka s kojima rade. Aplikacijene pozivaju te metode izravno, nego pomoću objekta ContentResolver. Taj objektmože komunicirati sa svakim content providerom <strong>na</strong> <strong>na</strong>čin da on upravlja komunikacijom.Operacijski sustav se brine o tome je li proces pokrenut ili ga treba pokrenuti svaki putakada se pojavi <strong>za</strong>htjev koji treba obraditi aplikacija koja trenutno nije aktiv<strong>na</strong>. Također,ako ne postoje instance koje su potrebne, a dio su aplikacije koja treba obraditi <strong>za</strong>htjev,Android ih sam stvara.1.2.5. Datoteka manifestDa bi se komponenta aplikacije mogla pokrenuti, Android mora z<strong>na</strong>ti da ta komponentapostoji. To je izvedeno <strong>na</strong> <strong>na</strong>čin da aplikacija deklarira svoje komponente u manifestdatoteci koja je pove<strong>za</strong><strong>na</strong> s paketom Android aplikacije .apk. Ta datoteka je strukturira<strong>na</strong>XML datoteka i uvijek se zove AndroidManifest.xml, <strong>za</strong> sve aplikacije. U njoj jedefinirano još mnogo drugih stvari kao što su ime<strong>na</strong> biblioteka s kojima aplikacija trebabiti pove<strong>za</strong><strong>na</strong> i dozvole koje se dodjeljuju aplikaciji. Android ne vidi komponente koje nisudeklarirane u manifest datoteci te se one stoga ne mogu izvoditi.1.2.6. Aktivacijska komponenta – IntentAsinkro<strong>na</strong> poruka kojom se aktivira pojedi<strong>na</strong> komponenta <strong>na</strong>ziva se intent. To je objektklase Intent u kojemu je sadržaj poruke. Za activity i service ta poruka, između ostalog,sadrži ime radnje koja se <strong>za</strong>htijeva i URI (engl. Uniform Resource Identifier) datoteke <strong>na</strong>dkojom ta radnja treba biti obavlje<strong>na</strong>, dok <strong>za</strong> broadcast receiver sadrži ime radnje koja jeobjavlje<strong>na</strong> (npr. može obavijestiti strane koje ga osluškuju da je pritisnut gumb <strong>za</strong>pokretanje kamere).Za aktivaciju svake od komponenti postoje različite metode. Activity se pokreće tako da seintent objekt pošalje metodi Context.startActivity() iliActivity.startActivityForResult(). Česta je situacija da jedan activitypokreće drugi. Ako očekuje neki rezultat od activityja kojeg poziva, koristi drugu<strong>na</strong>vedenu metodu. Rezultat se također vraća kao intent objekt. Activity koji reagira <strong>na</strong>intent, može provjeriti koji intent ga je pokrenuo metodom getIntent(). Service sepokreće metodom Context.startService(). MetodomContext.bindService() može se uspostaviti ve<strong>za</strong> između pozivajuće komponente i8


servicea. Višeodredišno ra<strong>za</strong>šiljanje pokreće se tako da se intent objekt pošalje metodiContext.sendBroadcast(), Context.sendOrderedBroadcast() iliContext.sendStickyBroadcast().Intent objekt može eksplicitno <strong>na</strong>vesti ime ciljane komponente – u tom slučaju Androidpro<strong>na</strong>lazi tu komponentu <strong>na</strong> temelju deklaracija u datoteci manifest i aktivira je. U slučajuda cilja<strong>na</strong> komponenta nije imenova<strong>na</strong>, Android pro<strong>na</strong>lazi <strong>na</strong>jbolju komponentu kojaodgovara tom intentu. To čini tako da intent objekt uspoređuje s intent filtrompotencijalnih ciljnih komponenti. Filtri obavještavaju operacijski sustav o tome koje vrsteintenta mogu obraditi, što je <strong>za</strong>pisano u manifest datoteci.Komponenta može imati neograničen broj intent filtara. Ako nema nijedan, moguće ju jeaktivirati jedino intentom koji eksplicitno imenuje tu komponentu kao ciljnu.1.2.7. Životni ciklus activityjaPostoje tri stanja u kojima se activity može <strong>na</strong>ći:• aktivno stanje ili stanje izvođenja – kada je prika<strong>za</strong>n <strong>na</strong> ekranu (to je stanje kadakorisnik koristi njegove mogućnosti)• pauzirano stanje – još uvijek je vidljiv korisniku, no trenutno ga ne koristi. To jeslučaj kada je drugi activity „iz<strong>na</strong>d“ njega, koji je transparentan ili ne pokriva cijeliekran. U slučaju da operacijski sustav ima premalo slobodne memorije, može„ubiti“ takav activity.• <strong>za</strong>ustavljeno stanje – drugi activity ga je potpuno prekrio. Još uvijek su sačuvanesve informacije o stanju. Ovakvi activityji se često „ubijaju“ kada sustavu trebamemorije.Prela<strong>za</strong>k 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()• void onDestroy()9


Kako activity može prijeći iz stanja u stanje prika<strong>za</strong>no je <strong>na</strong> slici 1.2.Sl. 1.2 Dijagram stanja activityjaSve prethodno <strong>na</strong>vedene metode mogu se <strong>na</strong>djačati (engl. override) te se tako možedefinirati što treba učiniti kada se promijeni stanje. Jedi<strong>na</strong> nuž<strong>na</strong> metoda je onCreate()jer se u njoj definiraju početne postavke.10


Na dijagramu možemo vidjeti tri važ<strong>na</strong> puta:• cijeli životni ciklus activityja – odvija se između prvog poziva onCreate()metode do prvog poziva onDestroy() metode. Obuhvaćeno je sve oddefiniranja početnih postavki <strong>na</strong> početku do oslobađanja <strong>za</strong>uzetih resursa.• vidljivi ciklus activityja – odvija se između metoda onStart() i onStop().Korisnik vidi activity <strong>na</strong> ekranu, što obuhvaća slučajeve kada je korisnik s njime uinterakciji i kada je activity vidljiv iako trenutno nije aktivan.• aktivni ciklus activityja – odvija se između poziva metoda onResume() ionPause(). U ovom slučaju, korisnik je u neposrednoj interakciji s activityjem .Activity se stvara metodom onCreate(), a pokreće metodom onStart(). Tadaactivity radi, tj. u aktivnom je stanju. Metodom onPause() prelazi u pauzirano stanje izkojega se u aktivno može vratiti pozivom metode onResume(). Da bi se vratio u prviplan iz stanja kada se ne vidi <strong>na</strong> ekranu, mora se pozvati metoda onRestart(). Gasi semetodom onDestroy().Operacijski sustav se brine <strong>za</strong> pohranu stanja activityja ako ga treba srušiti kako bioslobodio memoriju. Da bi to bilo moguće, treba implementirati metoduonSaveInstanceState(), koju Android poziva kada postoji mogućnost da ćeactivity biti srušen – dakle prije poziva onPause() metode. Stvara se Bundle objekt ukoji se pohranjuje trenutno stanje activityja u obliku parova ime-vrijednost. Kada se tajactivtiy ponovo pokreće, Bundle objekt se predaje metodama onCreate() ionRestoreInstanceState() (koja se izvršava <strong>na</strong>kon onStart() metode) kako bise moglo vratiti stanje u kojem je activity bio prije nego je srušen.1.3. <strong>Razvoj</strong> aplikacije u AndroiduSvaka aplikacija mora imati korisničko sučelje. Android stavlja <strong>na</strong> raspolaganje velik izboreleme<strong>na</strong>ta grafičkog korisničkog sučelja. U ovom poglavlju opisat će se veći<strong>na</strong> eleme<strong>na</strong>takorištenih u praktičnom dijelu ovog rada.11


1.3.1. Općenito o korisničkom sučeljuU aplikaciji <strong>za</strong> Android korisničko sučelje se sastoji od objekata tipa View i ViewGroup.Tih eleme<strong>na</strong>ta ima mnogo, a <strong>za</strong>jedničko ime je da su svi podklase osnovne klase View.Podklase se zovu widgeti i one su objekti korisničkog sučelja koji se mogu implementirati(primjerice polja <strong>za</strong> unos teksta ili gumbi). Klasa ViewGroup je osnova <strong>za</strong> podklase kojese zovu izgledi (engl. layouts), a one nude različite vrste arhitekture izgleda kao što sulinear<strong>na</strong>, tablič<strong>na</strong> ili relativ<strong>na</strong>.View objekt je struktura podataka čija obilježja pohranjuju parametre izgleda i sadržaj <strong>za</strong>specifični pravokutni dio ekra<strong>na</strong>. Kao objekt u korisničkom sučelju, pojedini elementprika<strong>za</strong> je također i točka interakcije <strong>za</strong> korisnika i primatelj događaja interakcije.Korisničko sučelje activityja definira se kao hijerarhija View i ViewGroup eleme<strong>na</strong>ta,kao što je prika<strong>za</strong>no <strong>na</strong> slici 1.3. Gradi se od u<strong>na</strong>prijed definiranih widgeta i izgleda ilivlastitih izrađenih eleme<strong>na</strong>ta prika<strong>za</strong>.Sl. 1.3 Hijerarhija eleme<strong>na</strong>ta prika<strong>za</strong>Da bi se elementi prika<strong>za</strong>li <strong>na</strong> ekranu, unutar activityja se mora pozvati metodasetContentView() i proslijediti referenca korijenskom objektu. Android pomoću tereference izmjeri i <strong>na</strong>crta hijerarhijsko stablo, a korijenski čvor <strong>za</strong>tim <strong>za</strong>htijeva da čvorovidjeca <strong>na</strong>crtaju sami sebe – svaki ViewGroup čvor poziva svaki svoj čvor dijete da toučini. Android parsira elemente izgleda po redu, instancira elemente prika<strong>za</strong> i dodjeljuje ihčvorovima roditeljima. Kako se crtaju redom, ako postoji preklapanje između eleme<strong>na</strong>tabit će vidljivi oni koji su <strong>na</strong> tom području posljednji <strong>na</strong>crtani.12


1.3.2. IzglediUobičajeni i <strong>na</strong>jjednostavniji <strong>na</strong>čin definiranja izgleda i hijerarhije eleme<strong>na</strong>ta prika<strong>za</strong> jekorištenje XML datoteke izgleda, koja pruža dobar i lako čitljiv pregled strukture. Svakielement u toj datoteci je ili View ili ViewGroup objekt. Elementi prika<strong>za</strong> se mogustvarati i izravno iz aplikacije i njima se može upravljati u samom kodu.Ime XML elementa je jed<strong>na</strong>ko Java klasi koju taj element predstavlja (npr. element stvara TextView u korisničkom sučelju), a ime<strong>na</strong> atributa odgovarajumetodama. Kada u komponentu aplikacije učitamo resurs izgleda, Android inicira teruntime objekte koji odgovaraju elementima u datoteci izgleda. Prednost deklariranjakorisničkog sučelja XML datotekom je u tome što se time odvaja prikaz aplikacije od kodakoji upravlja njenim po<strong>na</strong>šanjem. Takva datoteka izgleda ovako:Elementi prika<strong>za</strong> se mogu organizirati <strong>na</strong> više različitih <strong>na</strong>či<strong>na</strong> koristeći različite grupeeleme<strong>na</strong>ta prika<strong>za</strong>, kao što su LinearLayout, RelativeLayout, TableLayout,GridLayout i drugi. Svaki od njih pruža jedinstven skup parametara izgleda kojiodređuju pozicije eleme<strong>na</strong>ta prika<strong>za</strong> i strukturu izgleda.Svaka datoteka izgleda ima točno jedan korijenski element koji je objekt tipa View iliViewGroup. Svi ostali objekti ili widgeti dodaju se kao elementi djeca te se takopostupno gradi struktura stabla. Kada se aplikacija kompilira, svaka XML datoteka izgledase kompilira u resurs eleme<strong>na</strong>ta prika<strong>za</strong>, koji se mora učitati u kodu aplikacije <strong>na</strong> ovaj<strong>na</strong>čin:public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView.(R.layout.main_layout);}13


U ovom slučaju, kao resurs se učitava XML datoteka main_layout.xml, što se događapri svakom pokretanju activityja (jer Android poziva metodu onCreate() pri svakompokretanju activityja).Svaki View i ViewGroup objekt podržava skup raznih XML atributa. Neki od njih suspecifični <strong>za</strong> pojedine View objekte, no njih imaju i objekti koji <strong>na</strong>sljeđuju tu klasu. Nekeatribute imaju svi objekti jer ih <strong>na</strong>sljeđuju od korijenske klase. Svi ostali smatraju separametrima izgleda i opisuju orijentaciju View objekta. View objekt može imati integerID koji je jedinstve<strong>na</strong> identifikacijska oz<strong>na</strong>ka tog elementa prika<strong>za</strong> u stablu kojemupripada. Pri kompiliranju aplikacije, ID se referencira kao integer, no u XML datoteci sedefinira kao string.1.3.3. IzborniciAplikacijski izbornici su često korišten dio korisničkog sučelja pomoću kojeg se mogukoristiti funkcije aplikacije i mijenjati njene postavke (Sl. 1.4). Struktura im se takođerstvara pomoću hijerarhije eleme<strong>na</strong>ta prika<strong>za</strong>, no nju se tako ne definira. Umjesto toga,definiraju se onCreateOptionsMenu() ili onCreateContextMenu() metode <strong>za</strong>activity i deklariraju se elementi koje se žele uključiti u izbornik. Pri pokretanju će Androidautomatski stvoriti hijerarhiju eleme<strong>na</strong>ta prika<strong>za</strong> i <strong>na</strong>crtati svaki element izbornika. Kao iizgled aplikacije, elementi izbornika se također mogu definirati u XML datoteci.Sl. 1.4 Primjer izbornika u Androidu14


U Androidu postoje tri osnovne vrste aplikacijskih izbornika:• izbornik opcija – osnovni skup eleme<strong>na</strong>ta izbornika <strong>za</strong> activity. Otvara se kada sepritisne gumb MENU <strong>na</strong> uređaju koji ima operacijski sustav Android.• izbornik konteksta – predstavlja listu eleme<strong>na</strong>ta izbornika koja se može pojavitikada se duže pritisne određeni element prika<strong>za</strong>.• pod-izbornik – predstavlja listu eleme<strong>na</strong>ta izbornika koju prikaže element izbornikaopcija ili izbornika konteksta. Ne podržava ugniježđene pod-izbornike.1.3.4. DijaloziDijalog je obično mali prozor koji se pojavi iz<strong>na</strong>d trenutno aktivnog activityja, koji ode ustanje pauze dok dijalog preuzme svu interakciju s korisnikom. Koriste se <strong>za</strong> obavijesti ikratke aktivnosti koje su u neposrednom odnosu s aplikacijom koja se izvodi. Primjer semože vidjeti <strong>na</strong> slici 1.5.Sl. 1.5 Primjer dijaloga u AndroiduAndroid API podržava sljedeće vrste dijaloga:• AlertDialog – dijalog koji može upravljati s jednim, dva ili tri gumba i s listomeleme<strong>na</strong>ta koji se mogu odabrati radio gumbom ili check-boxom. To je preporučenitip dijaloga jer može <strong>na</strong>praviti većinu korisničkih sučelja tipa dijaloga.15


• ProgressDialog – dijalog koji prikazuje indikator tijeka (engl. progress wheel,progress bar). Kako on samo proširuje mogućnosti AlertDialoga, može koristiti igumbe.• DatePickerDialog – dijalog koji omogućuje korisniku da odabere datum.• TimePickerDialog – omogućuje korisniku da odabere vrijeme.Ako se želi <strong>na</strong>praviti novi tip dijaloga, kao osnova se uzme osnovni objekt Dialog koji semože uređivati kao i bilo koji activity – XML datotekom. Takav dijalog može sadržavatibilo koji element prika<strong>za</strong>, uključujući i gore <strong>na</strong>vedene podklase.Kada se dijalog želi prika<strong>za</strong>ti, treba se pozvati metoda showDialog(int) iz activityja,pri čemu joj se predaje argument tipa integer koji je jedinstveni identifikator dijaloga kojise želi prika<strong>za</strong>ti, ali nije obave<strong>za</strong>n. Dijalog se <strong>za</strong>tvara pozivom metode dismiss().1.3.5. Obavještavanje korisnikaU radu aplikacije mogu se pojaviti situacije kada je potrebno korisnika obavijestiti odogađaju koji se upravo dogodio u aplikaciji. Neki događaji <strong>za</strong>htijevaju korisnikovodgovor dok drugi to ne traže.Postoje tri vrste takvih poruka:• Toast obavijest – kratka poruka koja dolazi iz po<strong>za</strong>dine. Koristi se <strong>za</strong> obavijesti ouspješnosti neke radnje (primjerice, da je datoteka pohranje<strong>na</strong>).• Obavijest trake stanja – stalni podsjetnici koji dolaze od aplikacija koje rade upo<strong>za</strong>dini i očekuju da korisnik reagira <strong>na</strong> tu obavijest kada njemu to budeprikladno.• Obavijest dijaloga – obavijesti pove<strong>za</strong>ne s activityjem. Ako aplikacija obavlja nekiposao čiji <strong>za</strong>vršetak korisnik mora pričekati (kao npr. učitavanje datoteke),obavještava ga o tome prozorom u kojemu je prika<strong>za</strong>n indikator tijeka.Toast obavijest se samo kratko prikazuje ispred trenutnog activityja, <strong>za</strong>uzima maloprostora i ne mijenja stanje activityja – on se i dalje vidi i ostaje interaktivan. Može gakoristiti i service koji radi u po<strong>za</strong>dini i bit će prika<strong>za</strong>n i ako aplikacija nije aktiv<strong>na</strong>. Ovavrsta obavijesti ne podržava nikakav oblik interakcije, jer <strong>za</strong> tu <strong>na</strong>mjenu postoji obavijesttrake stanja. Primjer toasta prika<strong>za</strong>n je <strong>na</strong> slici Sl. 1.61.6.16


Sl. 1.6 Primjer toast obavijestiObavijesti trake stanja postavljaju ikonu <strong>na</strong> traku stanja operacijskog sustava (koja možesadržavati kratki tekst) i proširenu obavijest u prozor „Notifications“. Kada korisnikodabere proširenu poruku, Android šalje intent koji se definira <strong>za</strong> tu vrstu obavijesti, a<strong>na</strong>jčešće je to pokretanje activityja.17


2. Sportska progno<strong>za</strong> <strong>za</strong> AndroidSportska progno<strong>za</strong> je sustav koji omogućuje sudjelovanje u igrama <strong>na</strong> sreću korištenjemosobnog pokretnog uređaja s operacijskim sustavom Android. Korisniku su <strong>na</strong>raspolaganju dvije aplikacije <strong>za</strong> Android, koje mu omogućuju uplatu kladioničkog listićasa svog pokretnog uređaja te niz mogućnosti ve<strong>za</strong>nih uz ovu vrstu igara <strong>na</strong> sreću.Kako bi se usluga mogla koristiti, potrebno je instalirati dvije aplikacije <strong>za</strong> Android <strong>na</strong>osobni pokretni uređaj te se registrirati u kladionici kao korisnik usluge. Aplikacije vodekorisnika kroz cijeli proces uplate listića – od prijave <strong>na</strong> sustav, pregleda događaja ifiltriranja po sportovima i kategorijama do reali<strong>za</strong>cije uplate i praćenja pojedinih rezultata.Sve informacije koje su mu potrebne korisnik može dobiti <strong>na</strong> svoj pokretni uređaj u bilokoje vrijeme. Komunikacija s poslužiteljskom aplikacijom kladionice se odvija bežičniminternetskim pristupom (Wi-Fi, EDGE, UMTS).Pojednostavljeni prikaz komponenti sustava može se vidjeti <strong>na</strong> slici 2.1.Sl. 2.1 Komponente sustava Sportska progno<strong>za</strong>18


2.1. Opis sustavaSustav Sportska progno<strong>za</strong> sastoji se od pet komponenti. Središnja komponenta, kojaupravlja logikom, obrađuje <strong>za</strong>htjeve, šalje potrebne podatke korisničkim aplikacijama iupravlja svom ostalom komunikacijom je poslužiteljska aplikacija i o<strong>na</strong> pripada sustavukladionice. Sva komunikacija s bazom podataka, čak i upis novih događaja u bazu, odvijase preko ove aplikacije. O<strong>na</strong> je i poslužitelj i klijent, jer osim što čeka i obrađuje <strong>za</strong>htjevekorisničkih aplikacija, šalje podatke o novim događajima (ako su <strong>za</strong> to <strong>na</strong>mještenepostavke) kada se oni unesu u bazu podataka.Glavni dio praktičnog dijela ovog rada je aplikacija <strong>za</strong> Android po imenu Sportskaprogno<strong>za</strong> LIVE. Ta korisnička aplikacija omogućuje <strong>na</strong>mještanje postavki praćenjapojedinih 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 ubazu. Također može aktivirati praćenje rezultata događaja s listića koji je uplatio.Aplikacija je usko pove<strong>za</strong><strong>na</strong> s drugom korisničkom aplikacijom po imenu Sportskaprogno<strong>za</strong>, čijem pregledniku može proslijediti primljene događaje koje korisnik možestaviti <strong>na</strong> novi listić.Aplikacija <strong>za</strong> Android, Sportska progno<strong>za</strong>, pruža svu funkcio<strong>na</strong>lnost ve<strong>za</strong>nu uz kladioničkelistiće. Omogućuje <strong>dohvat</strong> događaja koji se mogu filtrirati po sportovima i kategorijama,kreiranje novog listića, spremanje nedovršenih listića (<strong>na</strong> koje se mogu i dodavati događajikoje primi aplikacija Sportska progno<strong>za</strong> LIVE), pregled odigranih listića te upravljanjeopcijama ve<strong>za</strong>nim uz prijavu <strong>na</strong> sustav kladionice.Aplikacija <strong>za</strong> rukovanje bazom podataka služi <strong>za</strong> lakši i pregledniji unos podataka u bazu.Pazi <strong>na</strong> podatke koji se unose i onemogućava unos nepotpuno definiranog događaja.Podatke ne unosi direktno, nego preko poslužiteljske aplikacije. Ima mogućnost unosaishoda događaja <strong>na</strong>kon što se odigra.U bazu podataka pohranjuju se svi podaci važni <strong>za</strong> kladionički sustav – informacije okorisnicima usluge, njihovim postavkama praćenja, uplaćenim listićima te događajima skojima se može sudjelovati u igri, čiji su svi podaci u jednoj tablici. Događaji supodijeljeni u kategorije kako bi korisnik mogao definirati praćenje i <strong>dohvat</strong> samoodređenih sportova. Pristup bazi ima samo poslužiteljska aplikacija.19


Dijagram prika<strong>za</strong>n <strong>na</strong> slici 2.2 daje uvid u poslove koje obavljaju pojedini dijelovi sustava.Sl. 2.2 Dijelovi sustava i njihove funkcio<strong>na</strong>lnosti2.1.1. Dijagram slučajeva uporabeSl. 2.3 Dijagram slučajeva uporabe <strong>za</strong> sustav Sportska progno<strong>za</strong>Slika 2.3 prikazuje dijagram slučajeva uporabe sustava.20


Korisnik aplikacija <strong>za</strong> Android ima <strong>na</strong> raspolaganju niz mogućnosti. Korištenjemaplikacije Sportska progno<strong>za</strong> može bežičnim internetskim pristupom <strong>dohvat</strong>iti podatke odogađajima s kojima može sudjelovati u igri. Prije dohvaćanja može odrediti koje događaježeli, tako što koristi filtar događaja po sportovima i kategorijama. Iz primljene listedogađaja, odabire one koje želi te kreira novi listić. Listić ne mora uplatiti, već ga možespremiti kao nedovršeni i mijenjati ga ili uplatiti kasnije. Kada se <strong>za</strong> to odluči, upisuje ulistić iznos kojim želi sudjelovati u igri i šalje ga poslužiteljskoj aplikaciji kladionice kojapotom listić pohranjuje u bazu podataka kladionice. Vrši se <strong>na</strong>plata iznosa koja se takođerevidentira u bazi. Uplaćeni listić se pohranjuje i u aplikaciji, kako bi ga korisnik kasnijemogao pregledati, ako to želi.Aplikacija Sportska progno<strong>za</strong> LIVE proširuje mogućnosti sustava slanjem obavijesti odogađajima koje korisnik može definirati u aplikaciji. Može odabrati želi li pratiti rezultatedogađaja koji su <strong>na</strong> uplaćenom listiću i može uključiti primanje obavijesti o novimdogađ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 opraćenju sprema u bazu. Poslužiteljska aplikacija šalje korisniku obavijest kada se odigradogađaj koji je <strong>na</strong> njegovom listiću, a obavještava ga i o tome je li listić dobitan ili ne, kadase <strong>za</strong>vrše svi događaji s uplaćenog listića. Kada se u bazu unese novi događaj, a korisnikima aktivirano praćenje njegove kategorije, šalje se obavijest o novom dostupnomdogađaju. Iz obavijesti korisnik može proslijediti događaj aplikaciji Sportska progno<strong>za</strong>,koja ga prikazuje u svom pregledniku i iz kojega može dodati <strong>na</strong> novi ili nedovršeni listić.Broj listića koje korisnik može uplatiti nije ograničen.2.1.2. Komunikacija među komponentamaU sustavu postoje četiri komunikacijska toka. Jedini dvosmjeran tok je između aplikacija<strong>za</strong> Android i poslužiteljske aplikacije. Aplikacija Sportska progno<strong>za</strong> komunicira sposlužiteljskom aplikacijom prilikom (filtriranog) dohvaćanja parova i prilikom uplatelistića. U oba slučaja, korisnička aplikacija se po<strong>na</strong>ša kao klijent i šalje <strong>za</strong>htjeve kojeposlužiteljska aplikacija obrađuje te šalje odgovore.U slučaju komunikacije Sportske prognoze LIVE i poslužiteljske aplikacije, obje imajuuloge i klijenta i poslužitelja. Sportska progno<strong>za</strong> LIVE ima ulogu klijenta kada šaljepodatke o postavkama, no u slučaju primanja obavijesti, ima ulogu poslužitelja kojineprestano očekuje nove obavijesti.21


Komunikacija između dviju korisničkih aplikacija se uspostavlja kada Sportska progno<strong>za</strong>LIVE šalje podatke o primljenom novom događaju aplikaciji Sportska progno<strong>za</strong>, koja gaprikazuje u svom pregledniku i iz njega stvara novi ili <strong>na</strong>dopunjuje nedovršeni listić.Aplikacija <strong>za</strong> rukovanje bazom podataka komunicira s bazom posredstvom poslužiteljskeaplikacije, koja jedi<strong>na</strong> izravno komunicira s bazom i izvršava sve upite. Komunikacija jejednosmjer<strong>na</strong> 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. Programska izvedba poslužiteljske aplikacijePoslužiteljska aplikacija zove se SocketServerSP. Napravlje<strong>na</strong> je u Eclipse razvojnojokolini (verzija 3.4.2) u programskom jeziku Java. Ova aplikacija je središnji dio sustava ikomunicira sa svim ostalim komponentama. Sastoji se od pet klasa (Sl. 2.4):• SocketServer.java,• ConnectionHandler.java,• MessageHandler.java,• DBConnector.java,• NotificationSender.java.Prva <strong>na</strong>vede<strong>na</strong> klasa, SocketServer, glavni je dio poslužiteljske aplikacije. Za svakospajanje <strong>na</strong> poslužiteljsku aplikaciju koje iniciraju korisničke aplikacije ili aplikacija <strong>za</strong>rukovanje bazom, ova klasa stvara novi objekt ConnectionHandler koji upravljastvorenom vezom i kojemu se kao parametar predaje stvore<strong>na</strong> konekcija. Ve<strong>za</strong> služi <strong>za</strong>razmjenu podataka između aplikacija ili <strong>za</strong> upis podataka u bazu.ConnectionHandler također ima važnu ulogu. Osim što upravlja stvorenom vezom,omogućuje višenitno izvođenje <strong>na</strong> <strong>na</strong>čin da svaki objekt ove klase stvara novu nit, čime seomogućava prihvaćanje više ve<strong>za</strong> odjednom. Objekt ove klase razmjenjuje poruke sastranom koja je inicirala vezu koristeći ulazni i izlazni tok podataka koji se stvara <strong>na</strong>temelju dobivene veze preko priključnice. Zadaća ove klase je i upisivanje i mijenjanjepodataka u bazi – promjene se događaju prilikom unosa novih događaja putem aplikacije<strong>za</strong> rukovanje bazom, slanja novog listića iz aplikacije Sportska progno<strong>za</strong> i slanja postavkipraćenja iz aplikacije Sportska progno<strong>za</strong> LIVE.22


Klasa MessageHandler je pomoć<strong>na</strong> klasa koja služi ConnectionHandleru <strong>za</strong> slanjeporuka. Napravlje<strong>na</strong> je zbog preglednije podjele poslova i bolje kontrole <strong>na</strong>d izvođenjemslanja poruka. Metoda sendMessage() omogućuje slanje više vrsta objekata – stringovikoji služe kao kontrolne poruke te pojedi<strong>na</strong>čno i grupno slanje novih događaja u oblikuliste objekata tipa VirtualEvent.DBConnector je klasa koja upravlja unosom, <strong>dohvat</strong>om i promje<strong>na</strong>ma podataka u bazi.Pri stvaranju svake nove veze, ConnectionHandler instancira novi objekt ove klasekoji uspostavlja vezu s bazom metodom setDBConnection(). Svaka komunikacija sbazom se odvija pozivanjem odgovarajućih metoda. Tako se primjerice kod prijavekorisnika <strong>na</strong> sustav uspoređuju uneseni podaci s onima u bazi metodomcheckLoginInformation(), unos podataka u bazu od strane aplikacije <strong>za</strong> rukovanjebazom vrši se metodama insertInBase() i setEventResult(), uplata novoglistića izvršava se metodom insertNewBetInDB(), a <strong>za</strong> <strong>na</strong>mještanje praćenja služemetode setTrackInDB() i setResultTrackInDB().Posljednja klasa, NotficationSender, predstavlja klijentski dio poslužitelja koji sespaja <strong>na</strong> korisničku aplikaciju Sportska progno<strong>za</strong> LIVE. Zaduže<strong>na</strong> je <strong>za</strong> slanje obavijesti onovom događaju u ponudi ili rezultatu odigranog, ako je korisnik aktivirao praćenje.Važno je spomenuti i klasu VirtualEvent, koja se koristi kao ekster<strong>na</strong> .jar datoteka uobje korisničke i u poslužiteljskoj aplikaciji. U njoj je definiran format poruke kojom serazmjenjuju podaci o događajima u sustavu. Sadrži sve informacije o pojedinom događajute korisnikov odabir koji se odnosi <strong>na</strong> taj događaj (engl. tip).Sl. 2.4 Klasni dijagram poslužiteljske aplikacije23


2.1.4. Ba<strong>za</strong> podatakaBa<strong>za</strong> podataka u ovom sustavu zove se „spba<strong>za</strong>“. To je MySQL ba<strong>za</strong> izrađe<strong>na</strong> u Eclipserazvojnoj okolini, verzija 3.4.2, sa SQL Explorer pluginom. Za uređivanje je korišten iprogram MySQL GUI Tools 5.0.U bazi se pohranjuju podaci o korisnicima sustava, njihove postavke praćenja i stanje <strong>na</strong>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 <strong>za</strong> 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 <strong>na</strong>kojima korisnik čeka obavijesti ako je aktivirao opcije praćenja u aplikacijiSportska progno<strong>za</strong> LIVE. U atribute TRACE_CHECK iTRACE_RESULT_CHECK se <strong>za</strong>pisuje je li korisnik aktivirao praćenja.• tablica „parovi“ – u njoj su <strong>za</strong>pisane sve informacije ve<strong>za</strong>ne uz pojedini događaj(kategorije, ime<strong>na</strong> sudionika, vrijeme odigravanja i ponuđeni koeficijenti).• tablica „pref_sport“ – služi <strong>za</strong> definiranje postavki praćenja. Svaki događaj imaoz<strong>na</strong>ku 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ćem24


Za svaki uplaćeni listić u bazi se stvara nova tablica koja u sebi ima informacije oidentifikacijskom broju svakog događaja koji je <strong>na</strong> listiću, tip <strong>za</strong> pojedini događaj koji jekorisnik odigrao, pripadajući koeficijent i stupac koji oz<strong>na</strong>čava je li rezultat evidentiran.Kao ilustracija tablice, <strong>na</strong> slici 2.6 se može vidjeti izgled tablice „login“.Sl. 2.6 Tablica login2.1.5. Aplikacija <strong>za</strong> rukovanje bazom podatakaJednostav<strong>na</strong> aplikacija, ime<strong>na</strong> Ba<strong>za</strong>GUI, <strong>na</strong>pravlje<strong>na</strong> je kako bi se pojednostavio unospodataka o novim događajima u bazu. Napravlje<strong>na</strong> je u Eclipse razvojnoj okolini u Javaprogramskom jeziku. Aplikacija ne može direktno unositi podatke u bazu, nego to činiposredstvom poslužiteljske aplikacije. Ta odluka donese<strong>na</strong> je iz sigurnosnih razloga.Aplikacija se sastoji od dvije klase:• Ba<strong>za</strong>GUI.java – klasa u kojoj je definiran izgled aplikacije• SocketClientGUI.java – klasa kojom se aplikacija spaja s poslužiteljskomaplikacijom i u kojoj se šalju poruke koje iniciraju unos podataka u bazu.Na slici 2.7 je prika<strong>za</strong>n izgled ove aplikacije.Sl. 2.7 Aplikacija <strong>za</strong> rukovanje bazom podataka25


2.2. Sportska progno<strong>za</strong> LIVEOva aplikacija <strong>za</strong> operacijski sustav Android usko je ve<strong>za</strong><strong>na</strong> <strong>za</strong> aplikaciju Sportskaprogno<strong>za</strong>. Proširuje mogućnosti sustava <strong>za</strong> sudjelovanje u igrama <strong>na</strong> sreću dodajućimogućnosti praćenja ishoda događaja s uplaćenog korisnikovog listića i praćenja novihdogađaja koji se pojave u ponudi kladionice.Pri svakoj promjeni postavki praćenja, aplikacija <strong>za</strong>htjeva od korisnika prijavu <strong>na</strong> sustavbez mogućnosti pamćenja prijave. To je <strong>na</strong>pravljeno iz sigurnosnih razloga, kako nitkoosim korisnika ne bi mogao promijeniti postavke praćenja. Korisniku su <strong>na</strong> raspolaganjudvije opcije praćenja. Može odabrati koje sportove želi pratiti tako da iz liste ponuđenihodabere one koji ga <strong>za</strong>nimaju. U izbor je uključe<strong>na</strong> i opcija praćenja svih sportova.Pritiskom <strong>na</strong> gumb, šalje odabrane postavke poslužiteljskoj aplikaciji koja podatke<strong>za</strong>pisuje u bazu. Druga opcija uključuje praćenje ishoda s uplaćenih listića.Može se reći da je to klijentska aplikacija, jer šalje <strong>za</strong>htjeve poslužitelju, a on ih obrađuje.No aktivacijom opcija praćenja, ova aplikacija postaje i svojevrsni poslužitelj – aktivirastalno osluškivanje <strong>na</strong> IP adresi i vratima koje pošalje poslužiteljskoj aplikaciji. Na tojpriključnici očekuje obavijesti, koje mogu biti dvije vrste:• tekstual<strong>na</strong> obavijest – sadrži podatke o rezultatu pojedinog događaja ili o ishoduodigranog listića (dobitan ili nije dobitan). Obavijest se pojavljuje u traci stanjaoperacijskog sustava.• tekstual<strong>na</strong> obavijest i objekt VirtualEvent – obavještava o novom događaju uponudi kladionice (koji je iz kategorije sporta <strong>za</strong> koju korisnik ima aktiviranopraćenje). Otvaranjem cijele poruke, korisnik može vidjeti <strong>za</strong>dnju pristigluobavijest i ukupan broj pristiglih te iste odbaciti ili proslijediti preglednikuaplikacije Sportska progno<strong>za</strong>, iz koje se događaji mogu staviti u novi ili postojećinedovršeni listić. I ova obavijest se pojavljuje u traci stanja.Iz svega <strong>na</strong>vedenog se može <strong>za</strong>ključiti da postoje dva toka komunikacije – dvosmjerni saposlužiteljskom aplikacijom i jednosmjerni s aplikacijom Sportska progno<strong>za</strong>.26


Sl. 2.8 Slijedni dijagram uobičajenog sce<strong>na</strong>rijaNa slijednom dijagramu prika<strong>za</strong>nom <strong>na</strong> slici 2.8 može se vidjeti tko s kime komunicira.Prika<strong>za</strong>n je uobičajeni sce<strong>na</strong>rij koji, <strong>na</strong>ravno, ne obuhvaća svu komunikaciju koja se možepojaviti.Ovaj sce<strong>na</strong>rij prikazuje komunikaciju u ovom dijelu sustava u slučaju da se sve radnjeobave uspješno, kako bi se pojasnio tijek radnji. Nisu prika<strong>za</strong>ne kontrolne poruke. Prisvakom unosu ili promjeni postavki, u aplikaciji Sportska progno<strong>za</strong> LIVE potrebno je27


upisivati korisničke podatke koji se provjeravaju u bazi podataka. Nakon toga moguća jepohra<strong>na</strong> postavki. O svakom novom unesenom događaju, poslužiteljska aplikacija odmahobavještava korisničku aplikaciju. Za pregled pristiglih događaja, aplikacija koristipreglednik druge korisničke aplikacije, koji pokreće slanjem odgovarajućeg intenta. Pritomse aktivira samo ta komponenta aplikacije Sportska progno<strong>za</strong>. Time je iskorište<strong>na</strong> jed<strong>na</strong> odosnovnih z<strong>na</strong>čajki operacijskog sustava Android – svaka aplikacija može pokrenuti diodruge aplikacije koji treba, bez da se pokreće cijela aplikacija.Sl. 2.9 Slijedni dijagram programske izvedbe aplikacije Sportska progno<strong>za</strong> LIVE28


Slijedni dijagram <strong>na</strong> slici 2.9 služi kao pojašnjenje pojedinih eleme<strong>na</strong>ta dijagrama sa slike2.8. Prikazuje radnje koje se odvijaju unutar aplikacije Sportska progno<strong>za</strong> LIVE i njenustrukturu. Detaljniji opis programske izvedbe <strong>na</strong>vedene aplikacije je u poglavlju 2.2.2.2.2.1. Korisničko sučeljeAplikacija Sportska progno<strong>za</strong> LIVE koristi više standardnih eleme<strong>na</strong>ta prika<strong>za</strong>operacijskog sustava Android. Pokretanjem aplikacije otvara se početni ekran, koji jeprika<strong>za</strong>n <strong>na</strong> slici 2.10.Sl. 2.10 Početni ekran aplikacijeCijeli ekran ima tip izgleda LinearLayout. Elementi prika<strong>za</strong> od kojih se sastoji ovajekran su tri TextViewa, dva check-boxa i dva gumba. TextView elementi su definiranikao resursi u XML datoteci strings.xml. U main.xml datoteci definiran je izgledcijelog ekra<strong>na</strong> i svih eleme<strong>na</strong>ta prika<strong>za</strong>. Moguć je odabir vrijednosti raznih atributa <strong>za</strong> sveelemente, od uobičajenih kao što su veliči<strong>na</strong> i stil slova i položaj u odnosu <strong>na</strong> drugeelemente do vrijednosti razine transparentnosti pojedinog elementa, dodavanja sje<strong>na</strong> iomogućavanja zvučnih efekta. Svi elementi imaju definirane visinu i širinu, čije suvrijednosti ili fill_parent ili wrap_content. Gumb <strong>za</strong> praćenje rezultata jeonemogućen dok god se ne odabere ta mogućnost u check-boxu iz<strong>na</strong>d.Sve postavke se pamte i <strong>na</strong>kon izla<strong>za</strong> iz aplikacije. To je izvedeno pomoću Androidovogobjekta SharedPreferences. On omogućuje pohranu i ponovno učitavanje29


primitivnih tipova podataka koji se pohranjuju u parovima ključ-vrijednost. U slučaju oveaplikacije se tako pamti odabir check-boxova koji omogućuju praćenje(ključ je tipaboolean) i onih koji definiraju koje sportove korisnik prati. Za čitanje i upisivanje tihvrijednosti koristi se metoda getSharedPreferences().Kada korisnik odabere check-box <strong>za</strong> praćenje sportova, prikazuje se dijalog tipaAlertDialog, koji je prika<strong>za</strong>n <strong>na</strong> slici 2.11.Sl. 2.11 Dijalog <strong>za</strong> odabir sportovaKao resurse koristi podatke iz datoteke arrays.xml. Svaki sport ima svoj check-box čijase vrijednost također pamti u objektu SharedPreferences. Ako nijedan sport nijeodabran, korisniku je <strong>na</strong> početnom ekranu <strong>na</strong> raspolaganju opcija „Otkaži praćenjesportova“. Kada odabere sportove iz dijaloga, gumb se mijenja u „Aktiviraj praćenjesportova“. Kako bi mogao poslati postavke poslužiteljskoj aplikaciji, mora prvo unijetisvoje korisničke podatke u dijalogu koji se pojavi kada se pritisne bilo koji od dva gumba.Izgled tog dijaloga definiran je datotekom login_dialog.xml, a sastoji se od dvaelementa TextView, dva gumba i dva EditText elementa.Obavijesti koje aplikacija može primati od poslužiteljske aplikacije su obavijesti trakestanja. One se prikazuju neovisno o tome je li aplikacija aktiv<strong>na</strong> ili nije. Kada obavijeststigne, u traci stanja pojavi se iko<strong>na</strong>, a odmah pored nje obavijest da je primljen događaj.Kada korisnik otvori traku stanja, prikazuje se cijela obavijest u kojoj je ispisan posljednjidogađaj koji je pristigao od korisnikovog <strong>za</strong>dnjeg pogleda te ukupan broj novih pristiglih30


obavijesti. Ako se iz prika<strong>za</strong>nog prozora odabere obavijest, šalje se intent aplikacijiSportska progno<strong>za</strong> te se svi pristigli događaji prosljeđuju njenom pregledniku, u kojemu semogu birati događaji koji se želi staviti u novi ili nedovršeni listić. Također postoji i opcijaodbacivanja svih pristiglih događaja. Izgled obavijesti pristiglih u traku stanja može sevidjeti <strong>na</strong> slici 2.12.Sl. 2.12 Obavijest o novom događaju u traci stanjaPreglednik aplikacije Sportska progno<strong>za</strong> je activity čiji je izgled definiran datotekomview_bet.xml. To je pra<strong>za</strong>n ekran koji sadrži samo element ListView. Popunjava sedi<strong>na</strong>mički, kada u aplikaciju pristigne lista događaja.U manifest datoteci aplikacije Sportska progno<strong>za</strong> LIVE definirane su njene komponente,po jedan activity i service. Tu su, između ostalog, i dozvole aplikacije:Aplikacija može pristupiti Internetu, ima dozvolu <strong>za</strong> korištenje vibracijske funkcijepokretnog uređaja i može se pokrenuti pri pokretanju uređaja, što se sve vidi iz priloženog.Dozvola <strong>za</strong> pokretanje čim se pokrene uređaj doda<strong>na</strong> je kako bi se odmah mogao pokrenutiservice koji očekuje obavijesti od poslužiteljske aplikacije.31


2.2.2. Programska izvedbaSportska progno<strong>za</strong> LIVE izrađe<strong>na</strong> je u Eclipse razvojnoj okolini, verzija 3.4.2, uprogramskom jeziku Java. Korišten je Android SDK verzije 1.5, a kao pomoć pri izradigrafičkog sučelja korište<strong>na</strong> je Java aplikacija DroidDraw.Aplikacija se sastoji od četiri klase:• StartScreen.java,• LoginConnection.java,• LIVEService.java,• BReceiver.java.StartScreen je activity aplikacije, grafičko sučelje koje se prikazuje kada se aplikacijapokrene. Metoda koja ga stvara, onCreate(), stvara objekte s kojima će raditi, tj.elemente prika<strong>za</strong> ove aplikacije, a to su, kao što je već <strong>na</strong>vedeno, dva check-boxa i dvagumba te polje koje prikazuje kategorije po kojima se filtriraju događaji. Pozivom metodedisplaySports(), stvara se dijalog tipa AlertDialog koji prikazuje listu sportovapo kojima je moguće filtrirati događaje koji će se pratiti. Drugi dijalog, o<strong>na</strong>j <strong>za</strong> prijavukorisnika <strong>na</strong> sustav kladionice, prikazuje se pozivom metodedisplaySetPreferencesDialog(). On se pojavljuje kada korisnik odluči poslatipostavke o praćenju <strong>na</strong> poslužitelj. Dijalozi se pozivaju posebnim metodama koje, kao štoje to slučaj u svim grafičkim sučeljima, osluškuju pritisak određenih gumba. Čitanjepostavki u aplikaciji regulira se metodom readPreferences(), pri čemu se koristeobjekti Androidove ugrađene klase SharedPreferences, koji omogućuju pohranujednostavnih tipova podataka.StartScreen koristi klasu LoginConnection <strong>za</strong> povezivanje s poslužiteljskomaplikacijom. Također je koristi <strong>za</strong> prijavu <strong>na</strong> sustav te slanje promijenjenih postavki. Sve toobavlja metodama sendMessage(). Ova klasa <strong>na</strong>pravlje<strong>na</strong> je kako bi se odvojio diokomunikacije s poslužiteljem, zbog preglednosti i lakšeg pro<strong>na</strong>laska eventualnih grešaka.Klasa LIVEService je service ove aplikacije, koji omogućava stalno čekanje obavijestiod strane poslužiteljske aplikacije. Metodom sendMySocketAddress() poslužiteljuse šalje trenut<strong>na</strong> IP adresa i vrata poslužitelja pokretnog uređaja. Service se pokreće čim se32


uključi uređaj, <strong>za</strong> što ima posebnu dozvolu definiranu u manifest datoteci. Kada obavijeststigne, prikazuje je <strong>na</strong> traci stanja operacijskog sustava.Posljednja klasa, BReceiver, ima samo jednu <strong>za</strong>daću – omogućuje serviceu aplikacije dase pokrene kada se uključi uređaj. Klasa je tipa BroadcastReceiver. Očekuje intentBOOT_COMPLETED <strong>na</strong>kon kojega svim <strong>za</strong>interesiranim klasama šalje obavijest da jepokretanje uređaja <strong>za</strong>vršeno. Tu obavijest u ovoj aplikaciji čeka klasa LIVEService.Međusobni odnos klasa može se vidjeti <strong>na</strong> klasnom dijagramu prika<strong>za</strong>nom <strong>na</strong> slici 2.13.Sl. 2.13 Klasni dijagram aplikacije33


ZaključakPraktični dio rada uspješno je ostvaren i omoguće<strong>na</strong> je sva funkcio<strong>na</strong>lnost koju je <strong>za</strong>datak<strong>za</strong>htijevao. Rad <strong>na</strong> ovakvom sustavu <strong>za</strong> operacijski sustav koji je u svojim počecima je<strong>za</strong>nimljiv, ali isto tako vrlo <strong>za</strong>htjevan. Najviše problema pojavljivalo se zbog slabe podrške<strong>za</strong> izradu aplikacija <strong>za</strong> Android. Kako je to novi operacijski sustav, još nema dovoljnoprimjera i podrške od programerske <strong>za</strong>jednice kako bi sve teklo glatko i kako bi se tekućiproblemi brzo rješavali. S druge strane, to je dodat<strong>na</strong> motivacija koja potiče kreativnost isamostalno rješavanje problema.I aplikacija i sustav su potpuno funkcio<strong>na</strong>lni i pri programskom ostvarenju se vodila brigao jednostavnosti svih dijelova sustava iz programerske perspektive te o jednostavnostikorištenja aplikacije iz korisničke perspektive. Vodilo se raču<strong>na</strong> i o sigurnosnimz<strong>na</strong>čajkama.Moguće buduće dorade mogle bi uključivati proširenje opcija filtriranja događaja <strong>za</strong><strong>dohvat</strong> te rješavanje pitanja <strong>na</strong>plate u slučaju sudjelovanja treće strane.34


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/androidtutorial[4] Paller, G., My life with Android, http://mylifewithandroid.blogspot.com/[5] Gramlich, N., andbook!: Android Programming35


SažetakU ovom radu izrađe<strong>na</strong> je aplikacija <strong>za</strong> operacijski sustav Android kao dio sustava Sportskaprogno<strong>za</strong>. Sustav omogućuje sudjelovanje u igrama <strong>na</strong> sreću putem osobnog pokretnoguređaja s operacijskim sustavom Android, pri čemu se komunikacija odvija bežičniminternetskim putem. Sastoji se od poslužiteljske aplikacije, baze podataka, aplikacije <strong>za</strong>rukovanje bazom i dvije korisničke aplikacije <strong>za</strong> Android.Aplikacija Sportska progno<strong>za</strong> pruža mogućnost <strong>dohvat</strong>a i pregleda događaja, kreiranje iuplatu listića, pohranu nedovršenog listića te pregled starih listića. Aplikacija Sportskaprogno<strong>za</strong> LIVE proširuje mogućnosti sustava tako što omogućuje aktivaciju praćenjarezultata 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 pojmoviOperacijski sustav Android, aplikacija <strong>za</strong> Android, activity, elementi prika<strong>za</strong>, service,datoteka manifest, intent, sustav sportske prognoze, pregled događaja, uplata listića,praćenje rezultata.36


AbstractThe result of this work is an application for the Android operating system which is a partof the Sport Events Forecast System. The system allows its clients to take part in sportsbetting games by using their perso<strong>na</strong>l mobile phone running the Android operating system.It consists of a server application, a database, a database ma<strong>na</strong>gement application and twouser applications for Android. All system parts communicate via wireless Internet access.The Sport Event Forecast application allows retrieval and viewing of sport events, bettingticket creation and payment, storage of a sketch ticket and reviewing played tickets. TheSport Event Forecast LIVE application extends the systems capabilities by providing theevent result tracing option and new event subscription option in which the user gets tochoose which sport categories he is willing to subscribe to.Key termsAndroid operating system, Android application, activity, views, service, manifest file,intent, sport event forecast system, sport events viewing, betting ticket payment, resulttracing.37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!