Android

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 142

UNIVERZITET U BEOGRADU FAKULTET ORGANIZACIONIH NAUKA LABORATORIJA ZA ELEKTRONSKO POSLOVANJE

RAZVOJ APLIKACIJA ZA OPERATIVNI SISTEM ANDROID

Beograd, mart2011.

Razvoj aplikacija za operativni sistem Android

Sadraj
1. Osnove Android platforme.................................................................................. 5 1.1. Istorija razvoja Android sistema...................................................................6 1.1.1. Android 1.0/1.1....................................................................................... 7 1.1.2. Android 1.5 ("Cupcake)........................................................................8 1.1.3. Android 1.6 (Donut)............................................................................ 8 1.1.4. Android 2.0/2.1 (Eclair).......................................................................9 1.1.5. Android 2.2 (Froyo)...........................................................................12 1.1.6. Android 2.3 (Gingerbread)................................................................14 1.1.7. Android 2.4 (Gingerbread, Ice-Cream?).........................................15 1.1.8. Dalji razvoj Android sistema.................................................................15 1.1.9. Android 3.0 (Honeycomb).................................................................16 1.2. Android funkcionalnosti.............................................................................. 17 1.3. Arhitektura Android sistema.......................................................................19 1.3.1. Linux jezgro.......................................................................................... 20 1.3.2. Izvorne programske biblioteke.............................................................20 1.3.3. Radno okruenje Android Runtime (Dalvik Virtual Machine)................20 1.3.4. Application Framevork.........................................................................21 1.3.5. Integrisani pretraiva ........................................................................22 1.3.6. Optimizirana grafika ............................................................................22 1.3.7. SQLite .................................................................................................. 23 2. Instalacija i postavljanje razvojnog okruenja..................................................24 2.1. Kreiranje nove Android aplikacije...............................................................36 2.2. Fajl AndroidManifest.xml............................................................................ 39 3. Resursi i Andpird aplikacijama..........................................................................43 3.1. Upravljanje i pristup resursima...................................................................44 3.2. Tipovi resursa............................................................................................. 46 3.3. Rad sa resursima........................................................................................ 47 3.3.1. Rad sa stringovima.............................................................................. 47 3.3.2. Rad sa nizom stringova........................................................................47 3.3.3. Rad sa Boolean i Integer resursima......................................................48 3.3.4. Rad sa bojama..................................................................................... 49 3.3.5. Rad sa resursima koji se crtaju............................................................49 2

Razvoj aplikacija za operativni sistem Android 3.3.6. Rad sa menijima................................................................................... 50 3.3.7. Rad sa fajlovima................................................................................... 52 3.3.8. Rad sa rasporedom (Layout)................................................................53 3.3.9. Rad sa stilovima................................................................................... 54 3.3.10. Rad sa temama.................................................................................. 55 3.4. Referenciranje sistemski resursa................................................................56 4. Aktivnosti i klasa Activity.................................................................................. 57 4.1. ivotni ciklus aktivnosti.............................................................................. 57 4.2. Kreiranje aktivnosti.................................................................................... 61 5. Elementi korisnikog interfejsa.........................................................................66 5.1. XML layout.................................................................................................. 67 5.2. Layouts....................................................................................................... 69 5.2.1. LinearLayout........................................................................................ 69 5.2.2. RelativeLayout..................................................................................... 73 5.2.3. TableLayout......................................................................................... 75 5.2.4. GridView............................................................................................... 78 5.2.5. TabLayout............................................................................................ 81 5.2.6. ListView................................................................................................ 84 5.3. Meni........................................................................................................... 87 5.4. Dogaaji u okviru korisnikog interfejsa.....................................................87 5.5. Dodatne mogucnosti.................................................................................. 87 5.6. Dijalozi........................................................................................................ 88 5.6.1. Kreiranje AlertDialog-a.........................................................................89 5.6.2. Kreiranje dijaloga sa sopstvenim layout-om.........................................89 5.6.3. Druge vrste dijaloga............................................................................. 90 6. Intents.............................................................................................................. 90 6.1. Pokretanje aktivnosti.................................................................................. 91 6.1.1. Pravljenje nove aktivnosti....................................................................91 6.1.2. Pravljenje layouta za novu aktivnost....................................................92 6.1.3. Dodavanje zapisa u manifest...............................................................92 6.1.4. Startovanje aktivnosti..........................................................................92 6.2. Slanje podataka novoj aktivnosti................................................................92 6.3. Vraanje podataka iz aktivnosti.................................................................93 6.4. Implicitni Inent-ovi...................................................................................... 94 7. Rad sa obavetenjima Notifications...............................................................97 3

Razvoj aplikacija za operativni sistem Android 7.1. Obavetenja na statusnoj liniji...................................................................97 7.2. Korienje NotificationManager-a...............................................................98 7.3. Kreiranje jednostavne tekst notifikacije sa ikonom....................................98 7.4. Obavetenje u vidu vibriranja telefona.......................................................99 8. Rad sa servisima Services............................................................................100 8.1. ivotni ciklus Servisa................................................................................ 100 8.2. Kreiranje servisa....................................................................................... 101 8.3. Implementacija udaljenog interfejsa........................................................105 9. Skladitenje podataka.................................................................................... 107 9.1. Zajednika podeavanja...........................................................................107 9.2. Interne memorije...................................................................................... 109 9.3. Skladitenje podataka na spoljanoj memoriji..........................................110 9.4. Rad sa bazom podataka SQLite................................................................111 9.4.1. Kreiranje SQLite baze podataka.........................................................111 9.4.2. Kreiranje tabela.................................................................................. 111 9.4.3. Unos, promena i brisanje podataka iz tabele.....................................112 9.4.4. Unos podataka insert()....................................................................112 9.4.5. Promena podataka update()............................................................113 9.4.6. Brisanje podataka delete()..............................................................113 9.4.7. Rad sa transakcijama.........................................................................113 9.4.8. Upiti SQLite baze podataka................................................................114 9.4.9. Brisanje tabela i ostalih SQLite objekata............................................116 10. Internet......................................................................................................... 117 10.1. HttpURLConnection................................................................................ 117 11. Korienje Google Maps-a............................................................................ 118 12. AndroidMarket.............................................................................................. 123 12.1. Primeri uspenih aplikacija.....................................................................123 12.1.1. PhotoWall - Live wallpaper...............................................................123 12.1.2. PdfReader........................................................................................ 124 12.1.3. File Manager..................................................................................... 126 12.1.4. Last.fm............................................................................................. 127 12.1.5. Super Sudoku................................................................................... 128 12.1.6. Google Maps.................................................................................... 129 12.1.7. YouTube........................................................................................... 130 12.1.8. Facebook for Android.....................................................................131 4

Razvoj aplikacija za operativni sistem Android 12.1.9. Titanium Backup (root) for Android..................................................133 12.1.10. Walk and Text................................................................................ 133 12.1.11. Easy Reminder............................................................................... 135 12.1.12. Alarm Clock Xtreme free................................................................135 12.1.13. Money Manager.............................................................................. 136 12.1.14. Touch Calendar.............................................................................. 137 12.1.15. Rhythm Runner.............................................................................. 138 12.1.16. Skype for Android...........................................................................141 12.1.17. Google Translate............................................................................ 141 12.2. Objavljivanje aplikacije na AndroidMarket..............................................142

1. Osnove Android platforme


Android je mobilni operativni sistem prvobitno razvijen od strane Android kompanije, koju je kupio Gugl 2005. godine. Nakon kupovine, Gugl je zatraio stvaranje Open Handset Alliance (OHA) udruenja, koja je sada angaovana u pruanju podrke i dalji razvoj sistema. Android je zasnovan na izmenjenoj verziji Linux jezgra. Po broju prodatih pametnih telefona, zasnovanih na Android OS u SAD, u drugom kvartalu 2010. godine, Android se nalazi na prvom mestu sa udelom od 33 procenata. Android ima veliku zajednicu programera za pisanje aplikativnih programa koji proiruju funkcionalnost ureaja. Trenutno postoji preko 200.000 aplikacija dostupni za Android, a po nekim procenama i vie, to ga ini drugim najpopularnijim mobilnim razvojnim okruenjem. Programeri piu kontrolisani kod u Java jeziku, kontroliui ureaj preko Gugl razvojne Java biblioteke. Poetak Android distribucije najavnjen je 5. novembra 2007. godine zajedno sa osnivanjem Open Handset Alliance, udruenja 78 kompanija posveene unapreenju otvorenih standarda za mobilne ureaje. Gugl je vei deo Android koda objavio pod Apache licencom, licencom slobodnog softvera i licencom otvorenog koda. Android OS se sastoji od 12 miliona linija koda, ukljuujui 3 miliona linija XML koda, 2,8 miliona linija C koda, 2,1 miliona linija Java koda i 1,75 miliona linija C++ koda.. Android predstavlja softverski stek namenjen mobilnim telefonima koji u sebi ukljuuje operativni sistem, posredniki softver kao i kljune aplikacije za normalno funkcionisanje. Android SDK obezbeuje alatke i API koji su
5

Razvoj aplikacija za operativni sistem Android

neophodni za dalji razvoj aplikacija na Android platformi koristei JAVA programski jezik. Shodno svojoj politici programskog okruenja: OHA istie sledece karakteristike Android

otvorenost - programeru omogucava potpunu slobodu u razvoju novih i vec postojecih aplikacija, a proizvoau ureaja slobodno koricenje i prilagoavanje platforme bez placanja autorskih prava; sve aplikacije su ravnopravne - to znai da ne postoji razlika izmeu osnovnih jezgarnih aplikacija ureaja i dodatnih aplikacija. Svim aplikacijama omogucen je ravnopravni pristup resursima pokretnog ureaja to daje mogucnost prilagoavanja ureaja specifinim potrebama individualnog korisnika; automatsko upravljanje ivotnim ciklusom aplikacije omogucava nadzor pokretanja i izvravanja aplikacija na sistemskom nivou optimizovanim koricenjem memorije i snage ureaja. Krajnji korisnik vie ne brine o gaenju odreenih aplikacija pre pokretanja drugih; uklanjanje granica "klasinih" aplikacija - mogucnost razvoja novih i inovativnih aplikacija zasnovanih na meusobnoj kolaboraciji tehnologija; brz i jednostavan razvoj aplikacija - omogucen je bogatom bazom korisnih programskih biblioteka (eng. libraries) i alata za izradu aplikacija; visokokvalitetni grafiki prikaz i zvuk - podrana 2D vektorska i 3D OpenGL (engl. Open Graphics Librari) grafika, te ugraeni kodeci svih esto koricenih audio i video formata; kompatibilnost sa vecinom sadanjeg i buduceg hardvera ukljuuje prenosivost Androidovih aplikacija na ARM, k86 i ostale arhitekture, te prilagodljivost sistema ulaznim i izlaznim komponentama.

1.1.Istorija razvoja Android sistema


Jula 2005, Gugl kupuje malu kompaniju Android Inc. sa seditem u Kaliforniji, SAD. U to vreme, o kompaniji se znalo veoma malo, osim da se bavi razvojem softvera za mobilne telefone.Ova akvizicija je jasno ukazivala da Gugl planira da ue na trite mobilnih telefona. Sve do 5. Novembra 2007. razvoj novog operativnog sistema za mobilne ureaje od strane Gugl korporacije svodilo se na pekulacije i nagaanja ta su prave namere Gugl korporacije, mada se sa izvesnom dozom sigurnosti znalo da Gugl priprema novi operativni sistem za ulazak na mobilno trite. Tog dana svetu je predstavljena Open Handset Alliance
6

Razvoj aplikacija za operativni sistem Android

(OHA) koja je predstavljala konzorcijum vie kompanija koje su predstavljale znaajne igrae na tritu mobilnih telefona, poput: Texas Instruments, Broadcom, Google, HTC, Intel, LG, Motorola, Qualcomm i mnogie druge kompanije. OHA je otkrila svetu svoj prvi proizvod, Android, mobilnu platformu zasnovanu na Linux kernelu 2.6.
1.1.1.Android 1.0/1.1

Android OS

Prva verzija operativnog sistema Android (1.0) predstavljena je u Septembru 2008. godine. Android 1.0 je svoju premijeru doiveo na telefonu kompanije HTC, koja je u sradnji sa kompanijom Gugl razvila telefon koji e uspeno realizovati poetne zadatke koje je nova platforma imala. Jedini telefon koji je imao Android verzije 1.0 bio je HTC Dream ili T-Mobile G1.

Android 1.0 je patio od mnogih dejih bolesti, te je Gugl est meseci kasnije izbacio novu verziju sistema koja je ispravila par kritinih problema, podrku za glasovnu pretragu, mogunost plaenih aplikacija u onlajn prodavnici (Market), ispravljene probleme u vezi sa servisom Gmail i jo nekoliko sitnih prepravki. Ova aurirana verzija sistema bila je Android verzije 1.1. Kao i prethodna verzija, ova verzija je bila namenjena telefonu kompanije HTC, HTC Dream, koji je i dalje predstavljao telefon namenjen programerima i inenjerima zaduenim za razvoj sistema, a i korisnikih aplikacija.

Razvoj aplikacija za operativni sistem Android

1.1.2.Android 1.5 ("Cupcake)

Samo tri meseca kasnije, u Maju 2009. Gugl predstavlja novu verziju svog operativnog sistema za mobilne ureaje, Android 1.5 koji je imao kodni naziv Cupcake (mala torta). Od ove verzije Gugl je svakoj novijoj verziji dodeljivao naziv nekog slatkia, a skoriji dolazak nove verzije bio bi najavljivan postavljanjem skulpture sledee poslastice ispred sedita firme.
Android 1.5 Cupcake

Nova verzija donela je znaajna poboljanja sistema u vidu novih mogunosti kao to su: snimanje video sadraja podrka za stereo blutut slualice podesiva tastatura

prepoznavanje glasa mogunost koja je pruena programerima da kreiraju sopstvene aplikacije za poetni ekran (Home Screen), koje se nazivaju Videti (Widgets).

Nova verzija sistema koja se prvobitno pojavila kao nadogradnja za postojei HTC Dream, privukla je i druge proizvoae, tako da se u periodu nakon pojave verzije 1.5 javlja veliki broj novih modela telefona koji su bili pokretani Android operativnim sistemom.
1.1.3.Android 1.6 (Donut)

Nakon irokog prihvatanja Android operativnog sistema od strane mnogih proizvoaa mobilnih ureaja, koje je izazvala pojava verzije 1.5 bilo je neophodno odrati korak sa konkurencijom koja je napredovala na svakom polju. Gugl je bio svestan stanja na tritu mobilnih ureaja i nastavio strategiju konstantnog poboljanja i uvoenja novih mogunosti svog sistema. Nova verzija nazvana Krofna (Donut), donela je brojna poboljanja ve iroko prihvaenog operativnog sistema. Promene u verziji 1.6 predstavljale su jasan znak da je Gugl ceo projekat shvatio veoma ozbiljno. Najznaajnija poboljanja u verziji 1.6 su:
8
Android 1.6 (Donut)

Razvoj aplikacija za operativni sistem Android

Novi izgled Onlajn Prodavnice (Market) koji je omoguio korisnicima laki pristup i bru pretragu eljenih aplikacija Kameru i video kameru integrisanu u Galeriju, koja je sada omoguavala izbor vie datoteka za istovremeno brisanje Podrku za nove tehnologije kao to su: CDMA/EVDO, 802.1x i textto-speech Podrku za navigacione aplikacije Razna poboljanja po pitanju brzine, pretrage grafikog interfejsa, itd.

Pored svih pozitivnih strana nove verzije sistema, polako je do izraaja dolazio problem koji e pratiti Android operativni sistem sve do dananjih verzija. Kako je Gugl za telefon za razvoj sistema izabrao HTC Dream i sistem razvijao na osnovu mogunosti koje je taj telefon posedovao, prvi u redu za auriranje sistema bio je upravo HTC Dream. Meutim, problem se javio poto je veliki broj saradnika izbacio na trite svoje telefone sa do tada aktuelnom verzijom sistema 1.5. Kako je svaki proizvoa prilagodio Android okruenje svojim potrebama, odnosno izmenio okruenje tako da odgovara mogunostima svojih modela, lako auriranje nije bilo mogue, jer nova verzija sistema nije mogla da se primeni bez dodatne manipulacije od strane proizvoaa. Ovo je dovelo do usporavanja irenja nove verzije sistema, ak su se pojavljivali novi modeli sa sada starom verzijom sistema. Neki od njih su i danas ostali bez nadogradnje na novije verzije.
1.1.4.Android 2.0/2.1 (Eclair)

Kako je vreme prolazilo vremeni HTC Dream je polako zaostajao za konkurencijom po pitanju tehnikih mogunosti, naime imao je preslab hardver za vreme koje je dolazilo. Imajui u vidu dinamiku razvoja trita Gugl u saradnji sa HTC korporacijom zapoinje razvoj novog telefona koji e sluiti za razvoj operativnog sistema i aplikacija. Prvi telefon koji u oktobru dobija novu verziju operativnog sistema Motorola, koji se nazivao 2.0/2.1 Android, bio je ureaj kompanije Motorola Droid. Ovaj telefon pokretala je nova verzija Android sistema 2.0 (Eclair). Android 2.0 je smatran za prvu veliku nadogradnju sistema, koja je donela znaajne promene kako po pitanju izgleda grafikog interfejsa, tako i po pitanju brojnih novih mogunosti koje je nova verzija ukljuivala.

Android (Eclair)

Razvoj aplikacija za operativni sistem Android

Promene koje je nova verzija donela su mnogobrojne, ali kao najbitnije se mogu istai: Podrka za Microsoft Exchange koji omoguava povezivanje mobilnog telefona sa serverom koji kroz ovaj protokol omoguava laku komunikaciju izmeu npr. firme i zaposlenog (mail, calendar, outlook...) Podrka za Facebook koja integrie ovu socijalnu mreu u kontakte telefona Poboljanja veb pretraivaa Potpuno nova aplikacija za pretraivanje mapa (Google Maps), po prvi put ova aplikacija omoguava pregled satelitskis snimaka na mobilnom telefonu Novi Jutjub (Youtube) videt koji omoguava brzo postavljanje svojih snimaka na servere Jutjuba Novi nain upravljanaj kontaktima koji omoguava znatno laki pristup opcijama nego do tada...

Motorola Droid koja je imala procesor tek prosene snage, imala je zavidan grafiki procesor, tako da su znaajne firme na polju 3D igara polako poele da svoje naslove prilagoavaju sve jaim Android ureajima. I pored predstavljanja novog modela telefona sa novom verzijom operativnog sistema u saradnji sa Motorolom, Gugl je nastavio uporedni razvoj sopstvenog telefona koji e biti naslednik tada ve legendarnog HTC Dream telefana. Novi telefon bi trebalo da omogui razvojnom timu kompanije Gugl, ali i ostalim programerima da dalje unapreuje svoj sistem i aplikacije koje su za njega namenjene.

Google Nexus One

Novi telefon Gugl je ponovo razvio u saradnji sa tajvanskom kompanijom HTC, novi telefon predstavljao je poslednju generaciju tehnologije, telefon je imao procesor iji je radni takt bio 1Ghz, imao je 576MB radne memorije, podravao je microSD kartice veliine do 32GB, a to je najbitnije, dolazio je sa najnovijom verzijom Android operativnog sistema Android 2.1. Novi telefon se nazivao Google Nexus One. Novi operativni sistem koji se pojavio sa pojavom novog Guglovog telefona, nosio je oznaku 2.1, a kodni naziv je ipak zadran od strane Gugla, tako da je bio isti kao i za Android 2.0 Eclair. Android 2.1 je za razliku od prethodne verzije koja se nalazila jedino na telefonu Motorola Droid, bio osnova za ogroman broj telefona koji su se
10

Razvoj aplikacija za operativni sistem Android

pojavljivali u sledeem periodu. Ova verzija sistema je masovno prihvaena od svih proizvoaa telefona koji su bili ukljueni u Android projekat i predstavlja prvu sledeu masovnu verziju nakon verzije 1.5. I ako mnogi proizvoai nisu vrili nadogradnju 1.5 verzije na 1.6 ili pak 2.0 verziju operativnog sistema Android, ovog puta pripremali su nadogradnju za ve realizovane mobilne ureaje na verziju 2.1. Poboljanja koja su razdvajala Andorid 2.0 od verzije 2.1 su sledea: Poboljana ukupna brzina sistema Podrka za nove veliine ekrana i rezolucije istih Novi grafiki interfejs web pretraivaa i podrka za HTML5 Podrka za blic za kameru Digitalni zum Podrku za registrovanje pokreta vie prstiju od jednom, tzv. Multitouch Poboljana tastatura Podrka za blutut verzije 2.1 (blutut transfer datoteka) Live Wallpapers...

Nakon pojavljivanja Google Nexus One telefona, nastala je prava bujica novih modela gde je vodeu ulogu imala kompanija HTC. Ponovo do izraaja dolazi nemogunost centralizovanog auriranja sistema od strane Gugla, ve je nova verzija ponovo morala da proe proces prilagoavanaj od strane drugih proizvoaa. Ovaj nedostak uslovio je da i do danas mnogi modeli nisu doiveli svoju premijeru na novom operativnom sistemu, koji je sada ciljao mnogo monije telefone nego to je do tada bio sluaj. Nova verzija operativnog sistema donela je znaajna poboljanja po pitanju 3D tehnologije, odnosno aplikacija. Pojavljivanje Android 2.0 koji je pokrenuo razvoj kompleksnih 3D aplikacija za mobilne ureaje, bio je dodatno ubrzan pojavom Android 2.1 sistema. Po prvi put se ispred sedita firme jedna skulptura zadrava due od par meseci, po prvi put prolo je 7 meseci pre nego to je Gugl predstavio novu verziju, to je znailo samo jedno veliko poboljanje sistema.

11

Razvoj aplikacija za operativni sistem Android 1.1.5.Android 2.2 (Froyo)

Nakon dueg perioda bez ikakvih vesti o novoj reviziji operativnog sistema Android, ispred sedita firme, zvanino je postavljena skulptura smrznutog jogurta (Froyo) to je znailo da je nova verzija sistema spremna i da je Guglov ureaj (Nexus One) bio spreman da novi sistem pokrene. Mnogi su novu verziju predstavljali kao apsolutnu revoluciju sistema koja e Android postaviti na lidersku poziciju na tritu mobilnih telefona. Android 2.2 predstavljen na Gugl samitu u Maju 2010. godine, sadrao je najveu listu poboljanja koja je neka verzija sa svojom pojavom donela, ali moda najzaajniju od svih, ono poboljanje koje je Android distanciralo od Android 2.2 (Froyo) konkurentskih operativnih sistema jese podrka za fles animacije (Flash animation) koja je implementirana u saradnji sa kompanijom Adobe. Poboljanaj koja su ukljuena u novoj verziji su: Veliko poveanje ukupne brzine sistema, optimizacija korienja memorije Dodatno poveanje procesiranja aplikacija koja je ostvarena primenom JIT (Just in Time) skripte Integracija Chrome V8 JavaScript u veb pretraiva Poboljana podrka za Microsoft Exchange Mogunost deljenja internet konekcije sa drugim ureajima putem USB ili WiFi konekcije (Tethering) Opcija za brzo iskljuivanje mobilne mree Nova onlajn prodavnica (Market) sa mogunou automatske nadogradnje aplikacija Podrka za upload preko veb pretraivaa Podrka za instaliranje aplikacija na proirivu memoriju (microSD) Podrka za Adobe Flash 10.1 Podrka za snimanje i prikazivanje videa u visokoj rezoluciji 720p...

12

Razvoj aplikacija za operativni sistem Android

Kao to je ve navedeno, pojavu nove verzije je svakako oznaila pojava Adobe Flash playera na mobilnim ureajima, koja je bila pokretana od strane grafikog procesora. Ova podrka je izazvala burne reakcije od strane konkurenata, pre svega amerike kompanije Apple, koja nije elela da u svoje ureaje implementira podrku za flash. Tada je nastao svojevrsni medijski rati na relaciji Apple-Adobe i Apple-Google. Proces koji je zapoet verzijom 2.1, nastavljen je proces migracije starih verzija na aktuelnu. Ovog puta Gugl je imao neto drugaiji pristup, u saradnji sa ostalim proizvoaima pronaen je nain da se bee vri nadogradnja postojeih verzija na aktuelnu. Tako da su telefoni koji su prvobitno lansirani sa verzijom 2.1, ubrzo dobili nadogradnju na 2.2 verziju operativnog sistema. Sa ovom verzijom Gugl prekida dalju proizvodnju i prodaju svog telefona Google Nexus One, kako ne bi ugrozio svoje poslovne partnere i omoguio prodaju telefona iskljuivo programerima koji su radili na razvoju aplikacija za njihov operativni sistem. Konano, Android je bio dovoljno konkurentan operativnom sistemu kompanije Epl (Apple), tako da je velikom brzinom poeo da grabi trino uee. Da bi krajem iste godine doao na lidersku poziciju i trenutno zauzima najvei procenat aktivnih verzija Android mobilne platforme, a Android lidersku poziciju na tritu mobilnih operativnih sistema uopte.

13

Razvoj aplikacija za operativni sistem Android

1.1.6.Android 2.3 (Gingerbread)

Ponovo se Gugl povlai i primiruje narednih 6 meseci, pre nego to se skulptura izloena krajem Maja 2010. godine, ne zameni. 6. Decembra 2010. godine osvanula je nova maskota ispred prostorija firme, nova verzija je bila spremna. Uzmajui u obzir sve vee zahteva mobilnog trita i dolaska u prvi plan elje korisnika koje su nekad bile marginalne (poput 3D igrica), Gugl u saradnji sa juno korejskom kompanijom Samsung razvija novi telefon u svrhe razvoja sistema i aplikacija. Google Android 2.3 (Gingerbread) Nexus S je roen.Iako je prethodne verzije tzv. Gugl telefona razvijao tajvanski HTC, Gugl je ovaj put izabrao Samsung kako ne bi favorizovao nijednog od postojeih poslovnih partnera koji uestvuju u konzorcijumu OHA.

Google Nexus S predstavljen je zajedno sa najnovijom verzijom operativnog sistema Android 2.3, koji nosi kodni naziv Medenjak (Gingerbread). Izneverivi mnoga oekivanja i pekulacije, Android Gingerbread nije doao sa oznakom 3.0 kako su mnogi oekivali, ve 2.3. Verzija 3.0 kako e se kasnije saznati bila je rezervisana za ulazak Androida na novo trite, trote tablet Google Nexus S ureaja. Poboljanaj koja su dola sa novom verzijom, u odnosu na prethodnu su brojna, najznaajnija su sledea:
-

Redizajniran grafiki interfejs (UI) Podrka za ekrane rezolucije vee od 800x480 VOIP podrka Podrka za WebM/VP8 video Podrka za NFC (Near Field Communication ) Unapreena copy/paste funkcija
14

Razvoj aplikacija za operativni sistem Android -

Nova multitouch tastatura Audio, video i grafika unapreenja namenjena za programere i razvojne timove video igara Dodata podrka za nove senzore poput iroskopa Poboljana kontrola energije i aplikacija Podrka za vie kamera Zamena YAFFS EXT4 sistemom datoteka...

Do samita u Barseloni koji je zavren 18. Februara 2011. Google Nexus S, bio je jedini telefon koji je pogonjen poslednjom verzijom operativnog sistema. Trenutno aktuelna verzija je 2.3.3 koja je ispravila sistne nedostatke prvobitne 2.3 verzije. Ovde se za sada zavrava predstavljanje aktuelnih verzija operativnog sistema za mobilne ureaje Android, u sledeem poglavlju bie opisane nove najavljene verzije ovog sistema, kako za mobilne telefone, tako i za tablet ureaje.
1.1.7.Android 2.4 (Gingerbread, Ice-Cream?)

Android 2.4 ?

Android 2.3 jo nije poteno zaiveo na mobilnim ureajima (ureaji koji podravaju ovu verziju se mogu nabrojati na prste jedne ruke), Gugl ve najavljuje novu verziju svog operativnog sistema namenjenim za mobilne telefone. Nagaanja govore da e nova verzija najverovatnije zadrati isti kodni naziv kao i prethodna, ili da e se nazivati Sladoled (Ice-Cream), a da e se izmene pre svega odnositi na podrku aplikacija koje su namenjene za Android 3.0.

Podrka se odnosi na mogunost pokretanja aplikacija koje su namenjene za procesore sa vie jezgara, da se uspeno izvravaju na procesorima sa jednim jezgrom, poto trenutna verzija to ne podrava. Ipak, nova verzija se nee pojaviti do Aprila 2011. godine tako da se sve informacije svode na pekulacije i nagaanaja.
1.1.8.Dalji razvoj Android sistema

Pojavom novih ureaja na tritu mobilnih ureaja, pre svega tablet ureaja ija erupcia je nastala pojavom Eplovog (Apple) iPad reenja, sve vei pritisak na Gugl vrili su poslovni partneri kojima je bilo neophodno reenje operativnog sistema prilagoenog za rad na znatno
15

Razvoj aplikacija za operativni sistem Android

veim ekranima od onih koji su se nalazili na mobilnim telefonima. Neki partneri nisu ekali na Gulg da prilagodi svoj sistem potrebama tablet ureaja, ve su samostalno modifikovali do tada aktuelnu verziju Android operativnog sistema 2.2. Samsung je tokom 2010. godine predstavio svoj prvi tablet, Galaxy Tab koji je pokretao Froyo sa prilagoenim interfejsom posebno za tablet. Iako je Gugl tvrdio da dosadanje verzije nisu prilagoene za rad sa tablet ureajima, Galaxy Tab doivljava veliki trini uspeh, to dodatno pritiska Gugl da ubrza razvoj novog sistema za te ureaje.
Samsung Galaxy Tab

1.1.9.Android 3.0 (Honeycomb)

26. Januara 2011. Premijerno je prikazan potpuno novi operativni sistem Android verzije 3.0 koj nosi kodni naziv Sae (Honeycomb) . Za sada dostupan samo kao test verzija, ali se ve pojavljuju ureaji pokretani ovim operativnim sistemom. Promene koje donosi novi operativni sistem se odnose pre svega na prilagoenost veim ekranima i sannijim konfiguracijama Android 3.0 (Honeycomb) tablet ureaja: Novi grafiko interfejs namenjen tablet ureajima Radna povrina u tri dimenzije (3D) sa novim, redizajniranim videtima Novi nain simultanog izvravanja aplikacija (Multitasking) Veb pretraiva napravljen posebno za potrebe tablet ureaja Podrka za video askanje (Chat) koristei Gugl aplikaciju Google Chat) Interfejs koji se izvrava na nivou grafikog procesora (Hardware Acceleration) Podrka za proceore sa vie jezfara... Prvi ureaj koji koristi novu verziju operativnog sistema Android, 3.0 Honeycomb je Motorola Xoom. Ovaj ureaj poseduje procesor sa dva jezgra, nVidia Tegra2 proceor koji podrava putanje videa u pravoj HD rezoluciji 1080p.
16
Motorola Xoom

Razvoj aplikacija za operativni sistem Android

Ureaj ima i prednju kameru namenjenu za video razgovore. Sve ovo bi trebalo da predstavi oigledne prednosti u odnosu na konkurentski Apple iPad koji ima nedostatak ovih mogunosti.

1.2.Android funkcionalnosti
Osnovne funkcionalnosti Android OS: Prikaz na ureajima OS prilagoava izgled razliitim tipovima ureaja i kompatibilian je sa 2D, 3D grafikim bibliotekama Skladitenje podataka SQL lite relaciona baza podataka za upravljanje podacima Konektivnost Android podrava konektivnost sa svim standardnim tehnologijama: GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wi-Fi, LTE i WiMAX. Razmena poruka SMS i MMS Web browser WebKit browser, zasnovan na Chrome-u Java support Android aplikacije se piu u Java programskom jeziku, Dalvik virtuelna maina Podrka za multimedijalne podatke - WebM, H.263, H.264, MPEG-4 SP, AMR, AMR-WB, AAC, HE-AAC, MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF, BMP. Streaming media support - RTP/RTSP streaming (3GPP PSS, ISMA), HTML download (HTML5 <video> tag), Adobe Flash Streaming (RTMP), HTTP Dynamic Streaming Dodatna harderska podrka - kamera, touchscreen, GPS, brzinometar, iroskop, magnetometar, senzori udaljenosti i pritiska, termometri Okruenje za razvoj Android Development Plugin Trite - Android Market je online katalog aplikacija koje se mogu preuzeti i instalirati na Android ureaje, bez potrebe za raunarom. Multi-touch mogunost ureaja da prepozna tri razliite pozicije ulaznih dodira

17

Razvoj aplikacija za operativni sistem Android

Bluetooth Video poziv Multitasking multitasking aplikacija Funkcionalnosti zasnovane na glasu Pozivanje, pretraga, navigacija pomou glasa Tethering Android telefon moe da se iskoristi kao wireless hotspot

18

Razvoj aplikacija za operativni sistem Android

1.3.Arhitektura Android sistema


Arhitektura Android sistema bazira se na Linux-u 2,6 jezgru (eng. kernel) koja se koristi kao sloj apstrakcije hardvera (HAL, eng. Hardvare Abstraction Laier). Razlog za koricenje jezgra operativnog sistema Linux je dokazana pogonska podrka (eng. driver model), mogucnost upravljanja memorijom i procesima, sigurnosni model, mreni sistem, te dokazana robusnost, konstantni razvoj i unapreivanje sistema. Slika 1.1 prikazuje arhitekturu Android sistema.
Sloj aplikacije
Standardne aplikacije

Kontakti

Aplikacije proizvoaa

Pretraiva

...

Okvir aplikac. (Framework) Upravljanje aktivnostima Upravljanje paketima Upravljanje prozorima Upravljanje resursima Biblioteke Surface Manager WebKit SQLite FreeType Provajderi sadraja Upravljanje lokacijama Upravljanje obavetenjima XMPP servis

Android Runtime Biblioteke jezgra Dalvik virtuelna maina

SSL

OpenGL| ES Linux Kernel

Drajveri za displej Drajveri za USB

Drajveri za kameru Drajveri za tastaturu

Drajveri za Bluetooth WiFi drajveri

Drajveri za fle memoriju Audio drajveri

Slika 1.1. Arhitektura Android platforme

19

Razvoj aplikacija za operativni sistem Android

1.3.1.Linux jezgro

Najvaniji elementi jezgra su: pogonski program za meuprocesnu komunikaciju izmeu aplikacija i usluga (eng. service) (eng. Binder (IPC) Driver) upravljanje napajanjem (eng. Pover Management) - komponenta Androida temeljena na standardnom Linuxovom sistemu upravljanja napajanjem.

1.3.2.Izvorne programske biblioteke

Izvorne programske biblioteke (eng. native libraries) pisane su u programskim jezicima C i C++ i ine sledei sloj u arhitekturi sistema. Neke od znaajnijih su: UI - program za upravljanje grafikim interfejsom (eng. Surface Manager) - biblioteka odgovorna za pravilno iscrtavanje razliitih aplikacionih komponenti u vremenu i prostoru; OpenGL ES (eng. OpenGL for Embedded Sistems) - biblioteke koje se koriste za hardversku 3D akceleraciju (ukoliko je podrana) ili za 3D rasterizaciju; SGL (eng. Scalable Graphics Librari) - predstavlja 2D biblioteke na kojima je zasnovana vecina aplikacija. Spomenimo jo da se 2D i 3D elementi mogu kombinovano prikazivati u jednom korisnikom interfejsu; Media Framevork - grupa kodeka za snimanje i reprodukciju audio formata, video formata i nepominih slika. Omogucena je od strane PacketVidea; FreeTipe - biblioteka koja slui za vektorsku rasterizaciju oblika pisma (eng. font); SSL (eng. Secure Socket Laier) - omogucava rezervnu komunikaciju preko Interneta; SKLite - programska biblioteka koja implementira bazu podataka (eng. database engine); VebKit - Jezgro pretraivaa koji podrava JavaScript i ostale standarde na malom ureaju; Sistem C library - implementacija standardne C-ove sistemske biblioteke (libc) izvedene iz operativnog sistema BSD.

1.3.3.Radno okruenje Android Runtime (Dalvik Virtual Machine)

Iduci sloj u arhitekturi Androida je radno okruenje (eng. Android runtime)


20

Razvoj aplikacija za operativni sistem Android

kojeg ine virtuelni maina Dalvik (DVM, eng. Dalvik Virtual Machine) i jezgrene biblioteke (eng. core librari). DVM je registarski bazirana virtuelna maina, dok je klasina Javina virtuelna maina (JVM, eng. Java Virtual Machine) baziran na steku. Bazne biblioteke pisane su u programskom Jeziku Java i predstavljaju sve esencijalne klase kao to su klase za manipulaciju kolekcijama, klase za komunikaciju sa okolinom i slino. Bitna novost je i to to se Androidom jezgrene biblioteke razlikuju od biblioteka u Java Standard Edition (J2SE) i Java 2 Micro Edition (J2ME). Umesto upotrebe standardnog Java 2 Micro Edition (J2ME) kao mehanizma za pokretanje javinih aplikacija na pokretnim ureajima, Google je razvio sopstvenu virtuelnu maina za Android. DVM Je najverovatnije razvijen kako bi se zaobila problematika s dozvolama koricenjem Sunovog J2ME. Svaki pokretni ureaj koji u sebi sadri J2ME mora kod Suna licencirati bilo kakvu promenu izvornog koda J2ME-a. Virtuelna maina Dalvik dobila je ime po istoimenom Islandskom gradu u kojem su iveli preci glavnog developera DVM-a Dan Bornstein. Osnovna razlika izmeu Sun Java virtuelnih maina i DVM-a je u tome to su prvo spomenuti virtualni uredjaju bazirani na steku, dok je DVM registarski baziran virtuelni maina. Meukod (eng. bitecode) Dalvik virtuelne maine transformie se pomocu alata dk (koji je sastavni deo Android SDK-a) iz Javinih klasnih datoteka (eng. Java class file) prevedenih Javinim revodiocem u novu klasu *.dex (eng. Dalvik Ekecutable) formata. Meukod koji izvrava DVM nije Javin meukod, nego upravo spomenuti .dex oblik. Transformacija formata omogucava bolju prilagoenost za rad na manjim procesorima boljim iskoricavanjem raspoloive memorije i procesorske snage. Rezultat svega je mogucnost viestrukog instanciranja same virtuelne maine to znai da se svaka Android aplikacija pokrece kao zasebni proces, s vlastitom instancom virtuelne maine Dalvik.
1.3.4.Application Framevork

Sloj aplikativnih okvira (eng. Application Framevork) napisan je u programskom jeziku Java i sadri proiriv skup programskih komponenti kojeg koriste sve aplikacije ureaja. Framework podrava mnogobrojne open source jezike kao to su openssl, sqlite i libc. Takoe podrava i jezik Android jezgra. Sa gledita sigurnosti, framework se bazira na UNIX file system ovlaenjima koja osiguravaju da aplikacije poseduju samo one mogunosti koje im je vlasnik telefona dao pri instalaciji aplikacije. Neki od vanijih elemenata su: upravljanje aktivnostima (eng. Activiti Manager) - upravljanje
21

Razvoj aplikacija za operativni sistem Android

ivotnim ciklusom aplikacije, upravljanje programskim paketima (eng. Package Manager) sadri informaciju o aplikacijama instaliranim na sistemu upravljanje prozorima (eng. Window Manager) - upravljanje aplikacionim prozorima, upravljanje pozivima (eng. Telephone Manager) - sadri API-je koji se koriste pri izradi aplikacija za upravljanje pozivima, pruaoci sadraja (eng. Content Providers) - omogucavaju zajedniko koricenje podataka od strane vie aplikacija, upravljanje resursima (eng. Resource Manager) - slui za skladitenje delova aplikacije koji nisu kod (npr. slike), sistem grafikog prikaza (eng. Viev Sistem) - sadri bazu gotovih grafikih prikaza i alata (eng. vidget), upravljanje lokacijski zasnovanim uslugama (eng. Location Manager) i upravljanje notifikacijama (eng. Notification Manager) - upravljanje notifikacijama i dogaajima (npr. dospece poruke, nadolazeci sastanak).

Aplikativni sloj je poslednji sloj u arhitekturi sistema Android i ine ga korisnike aplikacije ureaja. Predstavlja sloj vidljiv krajnjem korisniku. UkljuuJe neke od standardnih sistemskih aplikaciJa kao to su Veb pretraiva, lista kontakata, telefon, itd.
1.3.5.Integrisani pretraiva

Google je napravio pravi potez izborom WebKit kao open source web pretraivaa. Ubacili su dva veoma bitna poboljanja, two pass layout i frame flattening. Two pass layout otvara stranicu bez ekanja na blokirajue elemente, kao to su eksterni CSS ili eksterni JavaScript, ali posle kraeg perioda ponovo otvara stranicu sa svim podacima na strani. Frame flattening konvertuje postojee okvire stranice u jedan okvir i taj okvir pokazuje na ekranu. Ova poboljanja pospeuju brzinu i korisnost surfovanja internetom preko mobilnog telefona.
1.3.6.Optimizirana grafika

Kako Android poseduje 2D grafiku i 3D grafiku zasnovanu an OpenGL ES 1.0, vrlo je mogue da emo videti Google Earth i spektakularne igre kao to je Second Life, koje dolaze na Linux sistemima. U ovom trenutku, legendarna 3D pucaka igra Doom je predstavljena na mobilnim telefonima koji imaju Android platformu.

22

Razvoj aplikacija za operativni sistem Android 1.3.7.SQLite

SQLite je veoma mali (oko 500kb) sistem za upravljanje relacionim bazama podataka, koji je integrisan u Android. Zasniva se na pozivima funkcija i jedinstvenih fajlova, gde se uvaju sve definicije, tabele i podaci. Ovaj jednostavan dizajn je vie nego pogodan za platformu kao to je Android. Postoji veliki broj karakteristika koje zavise od hardvera, kao to su velika koliina multimedijalnih fajlova, podrka konekcija, GPS, unapreena podrka za kameru i jednostavna GSM telefonija.

23

Razvoj aplikacija za operativni sistem Android

2. Instalacija i postavljanje razvojnog okruenja


Android SDK podrava Windows, Linux i Mac OS operativne sisteme. Za pisanje Android aplikacija koristi se programski jezik Java. Programer moe da izabere proizvoljno razvojno okruenje. Potrebno je napomenuti da je najjednostavnije razvijati Android aplikacije u Eclipse razvojnom okruenju, poto je Google za njega obezbedio najbolju podrku u vidu dodataka (plugins). Rad u ostalim okruenjima je komplikovaniji, zato to nisu integrisana sa Android SDK-om, te je neophodno pokretati odgovarajue alate iz konzole (komandne linije). U daljem tekstu bie opisan postupak postavljanja Android razvojnog okruenja za operativni sistem Windows. Navedeni postupak se neznatno razlikuje za Linux i MacOS operativne sisteme. Prvi korak pri postavljanju razvojnog okruenja jeste instalacija Java Development Kit paketa (JDK). Ukoliko je na raunaru prethodno ve instaliran Java Runtime Environment paket (JRE), neophodno je instalirati i JDK, poto on sadri kompajlere i alate za rad sa izvornim kodom, koji nisu prisutni u JRE paketu. Java Development Kit je mogue besplatno preuzeti sa sajta kompanije Oracle (http://www.oracle.com/technetwork/java/javase/downloads/index.html). Izgled stranice za preuzimanje JDK paketa prikazan je na slici 2.1.

Slika 2.1 Strana za preuzimanje JDK

Klikom na taster Download JDK, otvorie se stranica gde je mogue izabrati platformu za koju se preuzima paket (Slika 2 .2).

24

Razvoj aplikacija za operativni sistem Android

Slika 2.2 Izbor platforme

Nakon izbora platforme, potrebno je kliknuti na checkbox I agree i taster Continue. Sada e se otvoriti strana na kojoj je prikazan naziv fajla za preuzimanje (Slika 2 .3).

Slika 2.3 Izbor fajla za preuzimanje

Klikom na naziv fajla, zapoee sesa procesom preuzimanja. Po zavretku preuzimanja i startovanju fajla, krenue proces instalacije JDK-a (Slika 2 .4). Potrebno je pratiti instrukcije sa ekrana.

Slika 2.4 Instalacija JDK

25

Razvoj aplikacija za operativni sistem Android

Sledei korak jeste instalacija Eclipse Integrated Development Environment-a (razvojno okruenje). Njega je mogue besplatno preuzeti sa adrese http://www.eclipse.org/downloads/. Eclipse razvojno okruenje podrava Windows, Linux i MacOS X operativne sisteme, kao i itav niz programskih jezika. Mogue je koristiti bilo koju verziju Eclipse-a koja podrava Java programski jezik. Poto na sajtu za preuzimanje Eclipse razvojnog okruenja postoji veliki broj razliitih verzija, odluiemo se za najjednostavniju verziju koja podrava Java programski jezik. To je Eclipse IDE for Java Developers (Slika 2 .5).

Slika 2.5 Sajt za preuzimanje Eclipse razvojnog okruenja

Nakon izbora verzije Eclipse-a, treba izabrati i mirror sajt sa koga e se preuzimanje izviti. Od izabranog naina preuzimanja jedino zavisi brzina samog download-a, te ovaj izbor nije od presudne vanosti. Moete izabrati prvi preporueni sajt (Slika 2 .6).

26

Razvoj aplikacija za operativni sistem Android

Slika 2.6 Izbor mirror sajta sa koga e se preuzeti Eclipse IDE

Eclipse IDE nema sopstveni program za instalaciju. On se jednostavno nalazi zapakovan u okviru jedne ZIP arhive. Nakon uspenog preuzimanja, dovoljno je raspakovati tu arhivu u eljeni folder (npr. C:\, tako da e konana putanja Eclipse IDE-a biti C:\eclipse), to je prikazano na slici 2.7.

Slika 2.7 Raspakivanje Eclipse razvojnog okruenja

Poto Eclipse IDE nije instaliran na uobiajeni nain, raspakivanjem nisu postavljene preice izvrnog fajla na radnu povrinu i u Start meni. To je mogue uraditi runo. Najpre treba otii u folder C:\eclipse (odnosno u folder gde je Eclipse raspakovan) i kliknuti na fajl eclipse.exe desnim tasterom mia, a zatim

27

Razvoj aplikacija za operativni sistem Android izabrati opciju Copy. Potom treba kliknuti na prazan deo radne povrine desnim tasterom mia i izabrati opciju Paste shortcut. Sledei korak jeste instalacija Android Software Development Kit-a (SDK). Njega je mogue besplatno preuzeti sa sajta http://developer.android.com/sdk/index.html . Na navedenom sajtu je potrebno izabrati verziju za eljeni operativni sistem. U sluaju Windows-a, preporuljivo je preuzeti exe datoteku, poto je to verzija SDK sa ugraenim programom za instalaciju (Slika 2 .8). Kod drugih operativnih sistema, dovoljno je otpakovati datoteku u eljeni folder.

Slika 2.8 Izbor verzije Android SDK za preuzimanje

Sada je mogue startovati instalaciju, gde je potrebno pratiti instrukcije sa ekrana (Slika 2 .9).

28

Razvoj aplikacija za operativni sistem Android

Slika 2.9 Instalacija Android SDK

Po zavretku instalacije, startovae se SDK Manager. Ovde je mogue izabrati verzije Android API-a koje se mogu preuzeti.

Slika 2.10 SDK Manager

Izbor verzije Android API-a veoma je vaan, zato to od toga direktno zavisi da li e aplikacija raditi na odreenom mobilnom telefonu ili tablet ureaju. Na primer, ako se izabere verzija 3.0 API-a, aplikacija svakako nee raditi na starijim Android telefonima. Nove verzije API-a imaju naravno vie funcionalnosti, ali manju kompatibilnost sa starijim ureajima.

29

Razvoj aplikacija za operativni sistem Android Izborom opcije Accept All (Slika 2 .10) i klikom na taster Install zapoee se preuzimanje i instalacija svih verzija API-a, pratee dokumentacije i primera. Verzija API-a za koju e se kreirati aplikacija bira se naknadno. Nakon zavrenog preuzimanja potrebnih fajlova, instalirane komponente je mogue videti u odeljku Installed Packages. Naknadno je mogue instalirati novu verziju API-a izborom opcije Available Packages (Slika 2 .11).

Slika 2.11 Opcija Available Packages

Ovde bi trebalo izabrati Google Inc. add-ons, zato to ovi paketi ukljuuju dodatne biblioteke za rad sa Google servisima. Nakon izbora, treba kliknuti na dugme Install Selected i zatim prihvatiti licencu, ime e se potrebne datoteke preuzeti. U okviru SDK Manager-a mogue je kreirati i podesiti virtuelne Android mobilne ureaje, koji se koriste prilikom testiranja aplikacije. Potrebno je izabrati opciju Virtual Devices. Ovde se prikazuje spisak podeenih virtuelnih Android ureaja. Klikom na taster New mogue je kreirati novi ureaj (Slika 2 .12).

30

Razvoj aplikacija za operativni sistem Android

Slika 2.12 Virtuelni ureaji

U novootvorenom prozoru mogue je podesiti parametre virtuelnog ureaja. U pitanju su sledei parametri: Name proizvoljan naziv virtuelnog ureaja. Target verzija Android API-a koju koristi ureaj. SD Card podeavanja virtuelne memorijske kartice. Ukoliko se izabere opcija Size, mogue je zadati veliinu nove virtuelne memorijske kartice. Ukoliko se izabere opcija File, mogue je uitati sadraj image fajla kao virtuelnu memorijsku karticu. Snapshot ukoliko se izabere opcija Enabled, omoguie se pamenje stanja virtuelnog ureaja i kasnije uitavanje tog stanja prilikom ponovnog ukljuivanja virtuelnog ureaja. Opcija Snapshot je slina opciji Hibernate u Windows operativnom sistemu. Skin predstavlja rezoluciju ekrana virtuelnog ureaja. Moe se izabrati neka od predefinisanih standardnih rezolucija ( Built-in) ili se moe zadati proizvoljna vrednost rezolucije (Resolution). Hardware prilikom kreiranja virtuelnog ureaja, moe se izabrati virtuelni hardver koji ureaj sadri (na primer GPS prijemnik, memorijska kartica, kamera i drugo).

Na primer, kreiraemo novi virtuelni ureaj sa parametrima kao na slici 2.13. Nakon unosa vrednosti parametara, kliknuemo na taster Create AVD, ime e novi Android virtuelni ureaj biti sauvan.

31

Razvoj aplikacija za operativni sistem Android

Slika 2.13 Kreiranje novog Android virtuelnog ureaja

Sada treba izai iz SDK Manager-a i pokrenuti Eclipse razvojno okruenje. Prilikom prvog startovanja ovog okruenja, potrebno je izabrati lokaciju workspace-a. Workspace u stvari predstavlja folder u kome e se nalaziti projekti raeni u Eclipse razvojnom okruenju. Workspace se obino nalazi u okviru linog foldera operativnog sistema (Slika 2 .14). Ukoliko opcija Use this as the default and do not ask again nije izabrana, korisnik e lokaciju workspace-a birati prilikom svakog pokretanja Eclipse razvojnog okruenja. Nakon ovog podeavanja treba kliknuti na taster OK.

Slika 2.14 Izbor lokacije workspace-a

32

Razvoj aplikacija za operativni sistem Android Sada je neophodno instalirati dodatak koji omoguava integraciju Eclipse IDE-a i Android SDK-a. Potrebno je izabrati meni Help, a zatim opciju Install New Software (Slika 2 .15).

Slika 2.15 Izbor opcije Install New Software

Otvorie se novi prozor, u kome treba kliknuti na dugme Add (Slika 2 .16).

Slika 2.16 Dijalog Install New Software

U novootvorenom prozoru u polje Name treba uneti Android, a u polje Location treba upisati https://dl-ssl.google.com/android/eclipse/, kao to je prikazano na slici 2.17. Zatim treba izabrati opciju OK.

Slika 2.17 Dodavanje repozitorijuma

33

Razvoj aplikacija za operativni sistem Android Posle nekoliko trenutaka, trebalo bi da se pojavi prozor kao na slici 2.18. Potrebno je selektovati Developer Tools, ime e biti izabrane i sve podopcije, a zatim kliknuti na taster Next.

Slika 2.18 Izbor opcija

Zatim je potrebno potvrditi izbor ponovnim klikom na Next (Slika prihvatiti licence (Slika 2 .20) i na kraju kliknuti na taster Finish.

2 .19),

Slika 2.19 Potvrda izbora

34

Razvoj aplikacija za operativni sistem Android

Slika 2.20 Prihvatanje licenci

Ovim je zapoeo proces instalacije dodataka za Eclipse. Ukoliko se pojavi prozor koji obavetava korisnika da sadraj koji se preuzima nema digitalni potpis, potrebno je kliknuti na taster OK, ime se omoguava instalacija (Slika 2 .21).

Slika 2.21 Obavetenje o nepotpisanom sadraju

Nakon zavretka instalacije, potrebno je ponovo pokrenuti Eclipse razvojno okruenje (Slika 2 .22).

Slika 2.22 Obavetenje o restartovanju Eclipse IDE-a

Sada je neophodno podesiti dodatak za Android SDK. Treba izabrati opciju Window -> Preferences, a zatim opciju Android. U polje SDK Location treba uneti putanju do instaliranog Android SDK. Podrazumevana vrednost je C:\Program Files\Android\android-sdk-windows (Slika 2 .23).

35

Razvoj aplikacija za operativni sistem Android

Slika 2.23 Podeavanje dodatka za Eclipse IDE

Ovime je zavren proces podeavanja Android razvojnog okruenja i sada je mogue kreirati aplikacije za Android platformu!

2.1.Kreiranje nove Android aplikacije


Kreiranje nove Android aplikacije korienjem Eclipse razvojnog okruenja dosta je jednostavno. Nakon startovanja okruenja, potrebno je izabrati opciju New -> Other -> Android -> Android Project (belowSlika 2 .24), a zatim kliknuti na taster Next.

Slika 2.24 Kreiranje novog Android projekta

36

Razvoj aplikacija za operativni sistem Android U sledeem koraku, pojavie se novi ekran gde programer moe da unese odgovarajue parametre vezane za Android projekat (Slika 2 .25). Navedeni parametri su: Project Name Proizvoljan naziv novog Eclipse projekta. Contents Sadraj projekta. Postoji tri razliite opcije parametra Contents: o o Create new project in workspace kreiranje potpuno novog projekta. Create project from existing source uvoz postojeeg koda u novokreirani projekat. Create project from existing sample korienje gotovih primera u okviru novog projekta.

Build Target Izbor verzije Android API-a koja e se koristiti u novom projektu. Properties Dodatni parametri novog Android projekta. To su: o o Application Name Naziv aplikacije koji e biti vidljiv na ureaju. Package Name Naziv Java paketa u okviru koga e se pisati klase projekta. Create Activity Ukoliko je opcija izabrana, kreirae se nova prazna aktivnost u okviru projekta. U tom sluaju, neophodno je uneti i naziv te aktivnosti. Vie o aktivnostima moete proitati u poglavlju 4. Min SDK Version minimalna verzija Android API-a na kojoj e raditi aplikacija.

Dakle, potrebno je podesiti parametre kao na slici. Za poetak, neemo kreirati Android aktivnost. O tome e vie rei biti u poglavlju 4.2.

37

Razvoj aplikacija za operativni sistem Android

Slika 2.25 Parametri novog Android projekta

Nakon uspeno podeenih parametara, potrebno je kliknuti na taster Finish. Ovime je kreiran novi Android projekat. Kreiranjem novog Android projekta, generiu se odreeni fajlovi koji su organizovani po folderima. Svaki Android projekat ima svoj XML manifest fajl ( AndroidManifest.xml) koji opisuje prirodu aplikacije i svake njene komponente. O ovom fajlu bie vie rei u narednom poglavlju.

38

Razvoj aplikacija za operativni sistem Android U sledeoj tabeli prikazana je organizacija strukture Android projekta po folderima:
Folder src/ bin/ jni/ gen/ assets/ res/ libs/ Opis Sadri fajlove sa izvornim kodom. U ovom folderu se nalaze sve kreirane aktivnosti (u okviru odgovarajueg paketa). Ovde se nalaze kompajlovani fajlovi projekta, kao to su konani apk fajlovi (varijanta jar fajla za instalaciju na Android ureaju). Sadri izvorni kod razvijen korienjem alata Android NDK (Native Development Kit). Ukoliko se ne koristi NDK, ovaj folder ne postoji. Sadri generisane fajlove, iji sadraj ne treba runo menjati. Ovde se nalaze dodatni materijali koji se koriste u projektu. Na primer, to mogu da budu podaci koje koristi aplikacija. Na poetku je ovaj folder prazan. U ovom folderu se nalaze dodatni resursi koji se koriste u aplikaciji. Oni su organizovani po podfolderima. To mogu da budu slike, animacije, raspored elemenata korisnikog interfejsa i sl. Ovde se uvaju dodatne biblioteke koje se koriste u projektu.

Tabela 2.1 Organizacija strukture Android projekta

U korenom folderu projekta, osim fajla AndroidManifest.xml nalazi se i fajl default.properties, koji sadri opta podeavanja projekta, kao to je verzija Android API-a koju aplikacija koristi.

2.2.Fajl AndroidManifest.xml
Svaka aplikacija mora da poseduje svoj AndroidManifest.xml fajl u korenom folderu projekta. Naziv manifest fajla mora da bude AndroidManifest.xml. Manifest sadri neophodne informacije o aplikaciji i o Android sistemu. Ove informacije sistem mora da poseduje pre poetka izvravanja aplikacije. Neke od funkcija manifest fajla su: Sadri naziv Java paketa u okviru kojeg je napisan izvorni kod aplikacije. Naziv paketa predstavlja jedinstveni identifikator aplikacije. Opisuje komponente aplikacije aktivnosti, servise, primaoce poruka i provajdere sadraja. Dakle, manifest fajl sadri nazive klasa u kojima su opisane komponente aplikacije. Na primer, aplikacija se nee startovati ukoliko u manifest fajlu nije navedena njena poetna aktivnost, ak ni u sluaju da fajl sa Java izvornim kodom te aktivnosti postoji. Odreuje koji procesi e biti domaini komponentama aplikacije. Definie koje privilegije (permissions) aplikacija mora da poseduje da bi mogla nesmetano da funkcionie. Takoe definie koje privilegije moraju druge aplikacije da poseduju da bi mogle da koriste komponente aplikacije. Definie minimalnu verziju Android API-a koji zahteva aplikacija. Definie listu biblioteka koje aplikacija koristi 39

Razvoj aplikacija za operativni sistem Android Izuzetno je bitno pravilno konfigurisati manifest fajl, zato to u protivnom aplikacija nee dobro funkcionisati. U primeru 2.1 prikazan je izgled jednog manifest fajla.

<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture /> <application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias> <service> <intent-filter> . . . </intent-filter> <meta-data/> </service> <receiver> <intent-filter> . . . </intent-filter> <meta-data /> </receiver> <provider> <grant-uri-permission /> <meta-data />

40

Razvoj aplikacija za operativni sistem Android


</provider> <uses-library /> </application> </manifest>
Primer 2.1 Struktura Android Manifest fajla

U primeru 2.1 prikazani su osnovni elementi datoteke AndroidManifest.xml, a to su:


<action> opisuje akciju dodeljenu <intent-filter> elementu. Obavezan

deo <intent-filter> polja. Ukoliko se ne definie, Intent objekti ne prolaze kroz filter.
<activity>

obavezni deklariuci element za svaku aktivnost aplikacije.Podrava podelemente<intent-filter> kojima se specificiraju pojedine namere aktivnosti. Pokretanje aktivnosti koja nije definisana u AndroidManifest.xml datoteci rezultuje pojavom greke pri izvoenju ( eng. runtime error).
<activity-alias> zamenska aktivnost. Ciljanu aktivnost predstavlja kao

nezavisni entitet sa sopstvenim skupom filtera namera koji umesto definisanja namera za direktno pokretanje ciljane aktivnosti odreuju namere koji je pokrecu preko zamenske aktivnosti.
<application>

koreni element sa opisom dubine stabla koga ine komponente paketa. Takoe moe da sadri globalne i/ili unapred zadate atribute aplikacije, kao to su tema, ikona, dozvole itd. Manifest fajl moe da sadri samo jedan element ove vrste.
<category> vrsta kategorije Intent filtera. Sadran u bloku <intentfilter>.

<data> odreuje vrstu podatka Intent filtera. To mogu biti opcioni, ali

meusobno zavisni atributi MIME ili URI. Sadran u bloku <intent-filter>.


<grant-uri-permission>

odreuje garantovane dozvole podataka pruaoca sadraja. Sadran u bloku <provider>.


<instrumentation>

podskupova

raspoloive za <manifest>.

deklarie koje su instrumentacione komponente testiranje funkcionalnosti paketa. Sadran u bloku

<intent-filter> odreuje vrstu namere na koju reaguju aktivnost, usluga

iliBroadcast Receiver. Sadran alias>,<service> i <receiver>.

blokovima

<activity>,

<activity-

41

Razvoj aplikacija za operativni sistem Android


<manifest> definie komponente, bezbednosne postavke i klase za

testiranje koje ine aplikaciju. Ovo je osnovni element AndroidManifest.xml fajla.


<meta-data> par ime-vrednost dodatnih metapodataka koji mogu biti

isporueni roditeljskoj komponenti. Sadran u blokovima <activity>, <activity-alias>, <service> i <receiver>.


<permission> deklarie bezbednosne dozvole nad komponentama kojima

pristupaju druge aplikacije.


<permission-group> odreuje grupu povezanih dozvola. <permission-tree> odreuje stablo dozvola. <provider> definie pruaoca sadraja. Sadran u <application>. <receiver> definie

Broadcast Reciever koji omogucava prihvatanje namera i u sluaju kada aplikacija i njene komponente nisu pokrenute.
<service> definie usluge. Sadran u <application> bloku, a moe da

sadri<intent-filter> i <meta-data>.
<uses-library>

definie biblioteku sa povezana.Sadran u <application> bloku.

kojom

aplikacija

mora

biti

<uses-permission> deo bezbednosnog modela koji sadri bezbednosne

dozvole dodeljene od strane korisnika, a odnose se na funkcije aplikacije. Dozvole se definiu prilikom instaliranja aplikacije.
<uses-sdk> definie nivo Android API-ja na kojima se moe izvravati

aplikacija. Dozvole se definiu zbog hardverski ogranienog pristupa memoriji jednog procesa od strane drugog, te zato to je svakoj aplikaciji dodeljen specifini ID korisnika. Neke od najece koricenih dozvola su:
INTERNET pristup Internetu. READ_CONTACTSdozvola za itanje podataka kontakata. WRITE_CONTACTS dozvola za pisanje podataka kontakata. RECEIVE_SMS nadzor pristigle SMS poruke. ACCESS_COARSE_LOCATION grubo beino lociranje ili lociranje preko bazne

stanice.
ACCESS_FINE_LOCATION finije lociranje koricenjem npr GPS-a.

42

Razvoj aplikacija za operativni sistem Android FajlAndroidManifest.xmlmoe runo da se ureuje, pisanjem XML koda ili moe da se koristi ugraeni ureiva koji dolazi kao deo ADT-a.

3. Resursi i Andpird aplikacijama


Sve android aplikacije sastoje se od dve stvari: funkcionalnost predstavlja kod kako se aplikacija ponaa na neki zahtev. Ovde spadaju svi algoritmi koji pokreu aplikaciju resursi ili podaci obuhvataju tekstove, slike, audio i video fajlove, datoteke, ikone i druge podatke koje koristi aplikacija.

Resursi obuhvataju tekst u obliku stringa, slike I ikone, audio datoteke, video zapise i druge podatke koje koristi aplikacija.
43

Razvoj aplikacija za operativni sistem Android

Resursi se dele na dva tipa: resurse aplikacije i resurse sistema. Resurse aplikacije definie developer unutar fajlova Android projekta i tano su odreeni za neku aplikaciju. Resursi sistema su standardni resursi koje definie Android platforma i dostupni su svim aplikacijama kroz Android SDK. Resursi aplikacije se prave i uvaju unutar Android projekta u /res direktorijumu. Koristei ve definisanu ali fleksibilnu strukturu direktorijuma, resursi su organizovani, definisani i upakovani sa paketom aplikacije. Resursi aplikacije se ne dele sa ostatkom Anroid sistema. Svi resursi aplikacije se uvaju u strukturi direktorijuma /res i sastavljeni su u projekat u trenutku pravljenja aplikacije. Resursi aplikacije se mogu koristiti programerski. Takoe na njih se mogu odnositi resursi drugih resursa aplikacija. Svaki put kad se sauva fajl sa resursima u Eclipsu, R.java klasa fajl se ponovo sastavlja kako bi se ubacile nove izmene. Ako nije korien pravi direktorijum ili pravila o nazivu fajla, pojavie se greka u kompajleru u prozoru Eclipse Problems. Resursima aplikacije se moe pristupiti programerski koristei generisu klasu koja se zove R.java. Kako bi se dodala referenca na resurs, mora se doi do objekta resursa aplikacije koristei klasu getResources() i tako napraviti odgovarajui poziv na komandu, koji je zasnovan na tipu resursa koji eli da se doda. Developeri mogu da pristupe resursima Android sistema (kao dodatak resursima aplikacije). Mogu se deliti mnogi resursi sistema kroz vie aplikacija zbog obinog izgleda i oseaja.Na primer, klasa resursa Android sistema (android.R.string) sadri stringove za rei kao to su OK, Cancel, Yes, No, Cut, Copy i Paste. Sistemski resursi se uvaju u android paketu. Postoje klase za svaki od veih tipova resursa. Na primer, klasa android.R.string sadri string sistemskog resursa. Kako bi se dobio string sistemskog resursa za OK prvo se mora koristiti statikia komanda klase Resursa getSystem() kako bi se doveo globalni sistemski objekat Resource. Onda se poziva komanda getString() sa odgovarajuim string imenom resursa.

3.1.Upravljanje i pristup resursima


U ovom poglavlju bie prikazano kako android aplikacije skladite i pristupaju vanim resursima kao to su stringovi, grafika i ostali podaci.
44

Razvoj aplikacija za operativni sistem Android

Takoe e biti prikazano kako da organizujete android resurse u okviru projekta kako bi se na najlaki nain mogla izvriti lokalizacija i prilagoavanje aplikacija za razliite konfiguracione ureaje. Kako bi se omoguila kompatabilnost sa razliitim ureajima potrebno je resurse organizovati u folderima(direktorijumima) i podfolderima kako bi se svaki deo android aplikacije mogao odravati nezavisno od ostalih delova aplikacije. Podrazumevani stil prikazivanja aplikacije uva se na putanji res/layout/ meutim moete podesiti u konfiguracionom fajlu da kada se aplikacija pokrene na neki ureaj koji ima drugaiju rezoluciju ekrana, npr koristi Landscape orijentaciju, da tada poziva funkcije za prikaz is foldera res/layout-land/ gde e na ovaj nain sama aplikacija zavisno od rezolucije ureaja prikazati adekvatan sadraj.

Slika 3.1. Razliit prikaz za raliitu rezoluciju ureaja Korienje resursa koristei Eclipse razvojno okruenje sa dodatkom Android
Asset Packaging Tool je veoma jednostavno, nije potrebno kompajlirati resurse, to e Eclipse sam uraditi, meutim ako koristite neko drugo razvojno okuenje potrebno je sve resurse komplajlirati iz komandne linije ili pak moete napisati skriptu koja e to uraditi, potom tu skriptu moete koristiti za sve vae aplikacije.

Definisanje podataka aplikacije kao resursa je dobra veba programiranja. Grupisanje resursa aplikacije i njihovo spajanje u paket aplikacije ima sledee koristi: Kod je jasniji i laki za itanje, to dovodi do manje greaka. Resursi su organizovani po tipovima i sigurno su jedinstveni Resursi su dobro smeteni za prilagoavanje telefonima

45

Razvoj aplikacija za operativni sistem Android

3.2.Tipovi resursa
Android aplikacije koriste veliki broj razliitih tipova resursa kao to je tekst, grafika, eme u boji za dizajn korisnikog interfejsa itd. Ovi resursi se nalaze u rez/ direktorijumu vae android aplikacije. Fajlovi resursa sauvani u /res direktorijumu moraju da potuju sledea pravila: Imena fajlova resursa moraju biti napisani malim slovima Imena fajlova resursa mogu sadrati samo slova, brojeve, donju crtu, i take Imena fajlova resursa (i XML atributi imena) moraju biti jedinstveni.

U narednoj tabeli prikazano je kako se uvaju resursi koje podrava Andoird SDK. Tip resursa Strings Niz stringova Boolenas Colors Dimensions Integers Meovit niz Jednostavni elementi (Drawables) Graphics (slike) Meni XML fajlovi Izgled (Layouts) Stilovi i teme Animacija Potreban direktorijum /rez/values/ /rez/values/ /rez/values/ /rez/values/ /rez/values/ /rez/values/ /rez/values/ /rez/values/ /rez/drawable/ /rez/menu/ /rez/xml/ /rez/layout/ /rez/values/ /rez/drawable/ styles.xml themes.xml Primer. sekvenca1.xml sekvenca2.xml <style> <animationlist>, <item> Naziv strings.xml strings.xml bools.xml Colors.xml Dimens.xml integers.xml Arrays.xml drawables.xml Icon.png, logo,jpg itd Primer: mainmenu.xml helpmenu.xml XML tag <string> <string-array>, <item> <bool> <color> <dimen> <integer> <array>, <item> <drawable>

<menu>

Tabela 3.1. Kako organizovati resurse u Android projektu


46

Razvoj aplikacija za operativni sistem Android

3.3.Rad sa resursima
U ovom delu bie prikazano kako moete upravljati resursima u vaoj Andoird aplikaciji, koji formati su podrani i u kom formatu se uvaju. Neke vrste resursa kao to su tekst, boja itd. su veoma dobro podrane od strane Eclipse editora i Andoird Plug-in Resource Editor, dok drugi kao to su animirane sekvence, nisu i sa njima je lake raditi direktno editovanjem u XML datotekama.
3.3.1.Rad sa stringovima

String resursi su najjednostavniji tip resursa sa kojima moe da radi Developer. Stringove moete promeniti ili dodati editovanjem xml datoteke strings.xml. String se cuva u okviru taga <string>. U prilogu sledi primer kako izgleda strings.xml <?xml version=1.0 encoding=utf-8?> <resources> <string name=naziv_aplikacije>Moja prva aplikacija</string> <string name=test_string>Test 1,2,3</string> <string name=test_string2>Test 4,5,6</string> <string name=formatiran_text><b>Bold</b>,<i>Italic</i>,<u>Line</u></stri ng> </resources> U narednoj liniji koda prikazano je kako moete odreenom stringu u xm fajlu pristupiti i koristiti u aplikaciji: String nazivAplikacije = getResources().getString(R.string.naziv_aplikacije);
3.3.2.Rad sa nizom stringova

Android podrava rad sa nizom stringova. Ovo je veoma pogodno kada elite da u nekoj padajuoj listi prikaete vie opcija. Niz stringova se u XML fajlu definie na putanji rez/values/ i kompajlira se u trenutku izvravanja aplikacije. Niz stringova u XML-u se uva u okviru tagova <string-array> i tagom za predstavljanje elemenata niza <item>. U nastavku moete videti kako se u xml fajlu na putanji rez/values/arrays.xml uva niz stringova: <?xml version=1.0 encoding=utf-8?> <resources> <string-array name=predmeti> <item>Elektronsko poslovanje</item> <item>Internet tehnologije</item> <item>Mobilno poslovanje</item>
47

Razvoj aplikacija za operativni sistem Android

</string-array> <string-array name=Predavaci> <item>Marijana Zrakic Despotovic</item> <item>Bozidar Radenkovic</item> </string-array> </resources> Pristup resursima je veoma jednostavno, u konkretnom primeru pristup resursu predmeti radimo na sledei nain: String[] predmeti = getResources().getStringArray(R.array.predmeti);
3.3.3.Rad sa Boolean i Integer resursima

Boolean vrednosti se uvaju na putanji rez/values/bools.xml. Ovako izgleda primer uvanja Bool vrednosti: <?xml version=1.0 encoding=utf-8?> <resources> <bool name=podrzanSrpskiJezik>true</bool> <bool name=podrzanIzborJezika>false</bool> </resources> Kada se eli resursu pristupiti iz Android aplikacije to se radi na sledei nain: boolean podrzanIzborJezika getResources().getBoolean(R.bool.podrzanIzborJezika); =

Na slian nain se radi i sa Integer resursima, jedina razlika jeste tagovi koji se koriste i putanja na kojoj se uvaju integer resursi rez/values/nums.xml. <?xml version=1.0 encoding=utf-8?> <resources> <integer name=sabirakA>25</integer> <integer name=sabirakB>3</integer> </resources> Pristup integer resursima iz Android alikacije izgleda ovako: int sabirakA = getResources().getInteger(R.integer.sabirakA);

48

Razvoj aplikacija za operativni sistem Android

3.3.4.Rad sa bojama

Android aplikacija u stanju je da skladiti vrednosti RGB boje, to automatski obezbeuje da se te boje primene i na druge elemente ekrana. Vrednosti koje se uvaju, mogu se iskoristiti za podeavanje boje teksta ili pozadine ekrana apliakcije. Vrednosti za boje uvaju se u XML fajlu na putanji rez/values/colors.xml. Android podravaja rad sa sledeim formatima boja: #RGB (primer, #F00 , 12-bit boja red) #ARGB (primer, #8F00 , 12-bit boja, crvena sa transparetnosti do 50%) #RRGGBB (primer, #FF00FF, 24-bit boja, purpurcrvena) #AARRGGBB (primer, #80FF00FF , 24-bit boja, purpurcrvena sa transparetnosti do 50%)

Primer skladitenja boja: <?xml version=1.0 encoding=utf-8?> <resources> <color name=background_color>#006400</color> <color name=text_color>#FFE4C4</color> </resources> Sledea linija koda vraa vrednost odreene boje: int mojaBoja = getResources().getColor(R.color.mojaBoja);
3.3.5.Rad sa resursima koji se crtaju

Resursi koji se crtaju, kao to su slike, moraju se sauvati u /res/drawable direktorijumu projekta. Ovi tipovi resursa se onda sastavljaju u paket aplikacije i dostupne su aplikaciji. Najei resursi koji se crtaju su bitmap slike, kao to su PNG i JPG fajlovi. Ovi fajlovi se esto koriste kao ikonice aplikacije i slike dugmia ali se mogu koristiti i za veliki broj komponenti korisnikog interfejsa. Resursi slika su u klasi BitmapDrawable. Kako bi se pristupilo grafikom resursu koji se zove /res/drawable/logo.png, treba se koristiti komanda getDrawable(), po sledeem redosledu: BitmapDrawable logoBitmap (BitmapDrawable)getResources().getDrawable(R.drawable.logo); =

Veinu vremena, meutim, grafika ne mora da se otvara direktno. Umesto toga, moe se koristiti identifikator resursa kao atribut za kontrolu kao to je kontrola ImageView. Sledei kod, na primer, postavlja i otvara logo.png
49

Razvoj aplikacija za operativni sistem Android

sliku u kontroli ImageView koja se zove LogoImageView, koja mora biti definisana unutar rasporeda: ImageView logoView = (ImageView)findViewById(R.id.LogoImageView); logoView.setImageResource(R.drawable.logo); Takoe se moe kreirati specijalni XML fajl kako bi se opisale druge Drawable podklase, kao to je ShapeDrawable. Moe se koristiti klasa ShapeDrawable da bi se definisali razni oblici, kao to je pravougaonik i krug.
3.3.6.Rad sa menijima

Prilikom razvoja aplikacije, stalno se javlja potreba za kreiranjem menija funkcionalnosti. Andird podrava rad sa menijima, meni se kao i ostali resursi skladite u direktorijumu rez/menu/. Svaki resurs menija, koji predstavlja skup pojedinanih stavki menija, se skladipti kao posebno formatirana XML datoteka i kompajliraju se u vreme izvravanja aplikacije. U nastavku sledi prikaz jednostavnog menija koji je skladiten u rez/menu/speed.xml koji predstavlja meni jedne proste aplikacije : <menu xmlns:android =http://schemas.android.com/apk/res/android> <item android:id=@+id/start android:title=Startuj aplikaciju! android:orderInCategory=1></item> <item android:id=@+id/stop android:title=Stopiraj aplikaciju! android:orderInCategory=4></item> <item android:id=@+id/ubrzaj android:title=Ubrzaj aplikaciju! android:orderInCategory=2></item> <item android:id=@+id/uspori android:title=Uspori aplikaciju! android:orderInCategory=3></item> </menu>

50

Razvoj aplikacija za operativni sistem Android

Meni se moe kreirati i korienjem Eclipse dodatka koji moe pristupati konfiguracionim atributima za svaku stavku menija. U predhodnom primeru smo direktno u xml fali postavili naziv stavke menija, inae ti stringovi se takoe mogu izdvojiti iz tog fajla i kasnije lokalizovati na vie jezika. Primer menija gde su definisani samo nazivi resursa, gde se vrednost resursa uzima kasnije iz konkretnog xml fajla. <menu xmlns:android= http://schemas.android.com/apk/res/android> <item android:id=@+id/start android:title=@string/start android:orderInCategory=1></item> <item android:id=@+id/stop android:title=@string/stop android:orderInCategory=2></item> </menu> Da bi se koristio predhodno napisan meni potrebno je u aplkaciji pozvati resurs koji je skladiten na putanji rez/menu/speed.xml tako to se overajduje metoda nadreene klase onCreateOptionsMenu() u android aplikaciji. public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.speed, menu); return true; } Ovim je meni kreiran i to je sve. Sada, ako se pokrene aplikacija i pritisne taster meni dobie se meni koji je gore definisan. Postoji veliki broj atributa koji se moe dodeliti nekoj stavki menija, spisak svih stavki moete pogledati u zvaninoj dokumentaciji za Andoird SDK http://d.android.com/guide/topics/resources/menu-resource.html.

51

Razvoj aplikacija za operativni sistem Android

3.3.7.Rad sa fajlovima

Kao dodatak stringu, grafici i layout resursima, Android projekti mogu sadrati fajlove kao resurse. Ovi fajlovi mogu biti u bilo kom formatu. Meutim, neki formati su pogodniji nego drugi. XML fajl format je dobro podran na Android platformi. Proizvoljni XML fajlovi mogu biti ukljueni kao resursi. Ovi XML fajlovi se uvaju u /res/xml direktorijumu. XML fajlovi su preferirani format za bilo koje strukturisane podatke koje aplikacija trai. Kako se formatira XML fajl zavisi od developera. Razliiti XML alati su dostupni za Android platformu. Primer xml fajla: <?xml version=1.0 encoding=utf-8?> <predmeti> <predmet name=Mobilno poslovanje type=izborni /> <predmet name=Elektronsko poslovanje type=obavezan /> <predmet name=ITEH type=izborni /> </predmeti> XML resursu iz aplikacije moe se pristupiti na sledei nain: XmlResourceParser mojiPredmeti getResources().getXml(R.xml.mojiPredmeti); =

Aplikacija moe sadrati .raw fajlove kao resurse. Raw fajlovi koje aplikacija moe koristiti sadri audio, video i druge fajlove. Svi raw fajlovi resursa bi trebali biti sauvani u /res/raw direktorijum. Nema pravila ili ogranienja pri kreiranju raw fajlova (osim pravila o nazivu fajla koji je ranije pomenut). Ako treba ubaciti multimedia fajlove, treba proveriti dokumentaciju Android platforme kako bi se odredili koji su media formati i kodeci podrani za traeni mobilni telefon. Isto vai i za bilo koji drugi format koji treba da se ubaci u resurse aplikacije.Ako format fajla koji treba da se koristi nije podran u poetnom Android sistemu, aplikacija e moda zatraiti da sama odradi proveru fajlova. Da bi se pristupilo raw fajlu programerski, jednostavno treba koristiti komandu openRawResource(). Na primer, sledei kod bi napravio InputStream objekat da bi pristupio resurs fajlu /res/raw/file1.txt: InputStream iFile = getResources().openRawResource(R.raw.file1);

52

Razvoj aplikacija za operativni sistem Android

3.3.8.Rad sa rasporedom (Layout)

Veina korisnikih interfejsa Android aplikacija se definiu koristei specijalni XML fajl koji se zove layout. Resursi rasporeda su u /res/layout direktorijumu. Layout fajlovi se sastavljaju u aplikaciju kao i svaki drugi resurs. Oni esto definiu ceo ekran i povezani su sa odreenom aktivnou, ali i ne moraju da budu. Resursi rasporeda takoe mogu definisati deo ekrana i mogu biti deo nekog drugog rasporeda. <?xml version=1.0 encoding=utf-8?> <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation=vertical android:layout_width=fill_parent android:layout_height=fill_parent> <TextView android:layout_width=fill_parent android:layout_height=wrap_content android:text=@string/hello /> </LinearLayout> Ovo je obian raspored, koji se zove main.xml, koji se pravi sa svakom Android aplikacijom. Ovaj layout file opisuje korisniki interfejs jedine aktivnosti u aplikaciji. Sadri kontrolu LinearLayout koja se koristi kao skup za sve druge kontrole korisnikog interfejsa. U ovom sluaju to je kontrola TextView. Main.xml layout fajl sadri i druge resurse: string resurs @string/hello, koji je definisan u strings.xml resurs fajlu koji sadri tekst Moja prva Android aplikacija! Nakon pokretanja aplikacije, izgled ekrana je sledei:

53

Razvoj aplikacija za operativni sistem Android

Slika 3.2. Prikaz pokrenute Android aplikacije. Postoje dva naina da se formiraju resursi rasporeda. Najjednostavniji nain je da se koristi Layout Resource Editor u Eclipsu da bi se dizajnirali layout fajlovi. Takoe se mogu direktno menjati XML layout fajlovi.
3.3.9.Rad sa stilovima

Korisniki interfejs Andoird aplikacije, dizajneri mogu ureivati korienjem stilova. Kontrola rasporeda elemenata izvedena je iz View klase, koja ima veliki broj korisnih osobina. Stilovi se oznaavaju tagom <style> koji su smeteni u direktorijum rez/values/ . Stilovi se takoe definiu u XML fajlu a potom se kompajliraju u vreme izvravanja aplikacije. Stilovi se ne mogu pregledavati korienjem Eclipse Resource designer-a ali se ispravno prikazuju na emulatoru kao i na samom ureaju. U nastavku sledi jednostavan primer kako se koriste stilovi koji su smeteni u fajlu rez/values/styles.xml. Definisana su dva stila, prvi stil je za obavezna polja u formularu, dok drugi je za neobavezna polja. Obavezna polja bie predstavljena crvenom bojom i veliinom slova 14p koja e biti boldovana, dok opciona plja bie predstavljena belom bojom, iskoena i veliina 12p. <?xml version=1.0 encoding=utf-8?> <resources> <style name=obavezna_polja_style> <item name=android:textColor>#e4101a</item> <item name=android:textSize>14pt</item> <item name=android:textStyle>bold</item> </style>
54

Razvoj aplikacija za operativni sistem Android

<style name=opciona_polja_style> <item name=android:textColor>#FFFFFF</item> <item name=android:textSize>12pt</item> <item name=android:textStyle>italic</item> </style> </resources>
3.3.10. Rad sa temama

Tema predstavlja skup stilova koji se primenjuju na sve elementu neke aktivnosti. Teme se definiu na isti nain kao i stilovi, koristi se tag <style> koji se uva u rez/values/ direktorijumu. Jedina razlika to temu od stilova izdvaja jeste to to tema mora de se definie kao atribut aktivnosti u AndoirdManifest.xml fajlu.

55

Razvoj aplikacija za operativni sistem Android

3.4.Referenciranje sistemski resursa


Sistemski resursi se koriste na isti nain kao i resursi same aplikacije. Android paket sadri sve vrste resursa, koje moete pretraivati u android.R podklasu. U ovoj podklasi mogu se nai sledei sistemski resursi za: Animiranje sekvence ka unutra ili ka spolja Liste imejlova, telefona itd. Standardni sistem boja, Dimenzije i primenu slika i ikona, Sistem stilova i tema, Poruke o grekama, Kreiranje rasporeda elemenata kao i crtanje jednostavnih elemenata. Referncijaranje sistemskih resursa je na isti naina kao i kada se koriste spostveni resursi. Npr ako eli podesiti da boja teksta bude svetlo siva potrebno je podesiti atribut @android:color/darker_gray. Sistemskim resursima se pristupa na isti naain kako se pristupa resursima aplikacije.

56

Razvoj aplikacija za operativni sistem Android

4. Aktivnosti i klasa Activity


Aktivnost (Activity)predstavlja komponentu aplikacije koja se uglavnom moe poistovetiti s jednim konkretnim prozorom aplikacije u kojem je korisnik u mogucnosti da izvri odreenu radnju. Na primer, aktivnost slui da bi korisniku mobilnog telefona omoguila pozivanje odreenog broja, slikanje fotografije korienjem ugraene kamere, slanje e-mail poruke, pregled mape i dr. Aplikacija moe da sadri jednu ili vie definisanih aktivnosti, pri emu je jedna od aktivnosti uvek definisana kao primarna aktivnost. Prelaz izmeu aktivnosti odvija se tako to aktuelna aktivnost poziva novu. Iako vie aktivnosti ini jedan kompaktan korisniki interfejs, treba imati na umu da su one meusobno nezavisne. Svaka aktivnost implementira se kao zasebna klasa koja nasleuje klasu Activity, pa je sama odgovorna za uvanje svog stanja u ivotnom ciklusu aplikacije. Klasa aktivnosti je glavni deo svake Android aplikacije. Programer vei deo vremena provodi na definisanju i implementaciji aktivnosti za svaki ekran u aplikaciji. Svakoj Android aplikaciji mora biti dodeljena aktivnost unutar Android manifest fajla. Druge klase aktivnosti mogu biti oznaene u manifest fajlu da se pokrenu pri odreenim okolnostima. Ovim sekundarnim ulaznim takama se upravlja pomou Android manifest fajla sa odreenim filterima. Aplikacije mogu biti prekinute zbog raznih dogaaja vieg prioriteta, kao to je telefonski poziv. U jednom trenutku moe postojati samo jedna aktivna aplikacija. Android aplikacije su odgovorne za upravljanje njihovim stanjem, kao i njihovom memorijom, resursima i podacima. Android operativni sistem moe iskljuiti aktivnost koja je na pauzi, stopirana ili unitena kada je memorija slaba. Ovo znai da svaka aktivnost koja nije u prvom planu mora biti iskljuena. Drugim reima, Android aplikacija mora odravati stanje i biti spremna da bude prekinuta ili ak iskljuena u svakom trenutku.

4.1.ivotni ciklus aktivnosti


ivotnim ciklusom aktivnosti jedne Android aplikacije upravlja se implementacijom odgovarajuih metoda. Svaka aktivnost ima tri osnovna stanja:

Resumed (Running) 57

Razvoj aplikacija za operativni sistem Android o Aktivnost je pokrenuta i fokusirana.

Paused o Druga aktivnost je pokrenuta i fokusirana (u prvom planu), ali je tekua aktivnost i dalje pokrenuta i vidljiva. Na primer, druga aktivnost je u prvom planu, dok je tekua aktivnost vidljiva, ali ne zauzima ceo ekran. Aktivnost ije je stanje paused je potpuno iva (objekat klase Activity se nalazi u memoriji, zadrava sva stanja i ostaje u window manager-u), meutim ova aktivnost moe da bude ubijena u sluaju niske slobodne memorije.

Stopped o Aktivnost ije je stanje stopped je i dalje iva, ali radi u pozadini. Objekat klase Activity i dalje se nalazi u memoriji, uva sva stanja, ali se vie ne nalazi u okviru window manager-a. Ovu aktivnost vie ne vidi korisnik i u sluaju potrebe za memorijom sistem moe da je ubije.

ivotni ciklus jedne aktivnosti prikazan je na slici 4.1. Dakle, kao to je napomenuto na poetku ovog poglavlja, fazama ivotnog ciklusa aktivnosti upravljaju metode onCreate(), onRestart(), onStart(),onResume(), onPause(), onStop() i onDestroy(). ivotni ciklus aktivnosti zapoinje metodom onCreate(), a zavrava se zajedno sa metodom onDestroy(). U okviru metode onCreate(), programer bi trebalo da definie izgled i globalno stanje aktivnosti, kao to je raspored elemenata korisnikog interfejsa. Implementacijom metode onDestroy() trebalo bi osloboditi koriene resurse. Na primer, ukoliko vaa aktivnost koristi pozadinsku nit koja preuzima podatke sa Interneta, nit bi trebalo kreirati u okviru metode onCreate(), a zaustaviti je u okviru metode onDestroy(). Aktivnost je vidljiva (visible) izmeu poziva metoda onStart() i onStop(). Dok je aktivnost vidljiva, korisnik je vidi na ekranu i moe da vri interakciju sa njom (npr. da unosi podatke). Metoda onStop() se poziva kada se startuje nova aktivnost, a tekua aktivnost vie nije vidljiva. Aktivnost je fokusirana (u prvom planu) izmeu poziva metoda onResume() i onPause(). Tada se ta aktivnost nalazi ispred svih ostalih aktivnosti. Aktivnost moe esto da prelazi iz prvog plana u pozadinu i obrnuto. Na primer, metoda onPause() se poziva kada ureaj pree u stanje mirovanja ( sleep).

58

Razvoj aplikacija za operativni sistem Android

Slika 4.26 ivotni ciklus aktivnosti

U tabeli 4.1 prikazane su fundamentalne metode za upravljanje ivotnog ciklusa i njihov opis.

Metoda

Opis Poziva se kada se aktivnost prvi put kreira. Ovde bi trebalo kreirati poglede (views), povezati (bind) podatke sa listama i sl. Ovoj metodi prosleuje se objekat tipa Bundle koji sadri prethodno stanje aktivnosti. Poziva se posle stopiranja aktivnosti, ali neposredno pre njenog ponovnog startovanja. Poziva se neposredno pre nego to aktivnost postane vidljiva korisniku. Metoda koja se poziva posle ove moe da bude onResume() u sluaju da aktivnost prelazi u prvi plan, ili onStop() u sluaju da postaje sakrivena. Poziva se neposredno pre nego to aktivnost zapone interakciju sa korisnikom. Poziva se neposredno pre nego to sistem nastavi izvravanje druge aktivnosti. Ova metoda se obino koristi da sauva podatke, zaustavi animacije i prekine sa izvravanjem procesa koji koriste procesorsko vreme. Ova metoda se mora izvriti to je bre mogue, zato to sledea aktivnost nee biti nastavljena dok se ova metoda zavri. Metoda koja se poziva posle ove moe da bude onResume() u sluaju da aktivnost prelazi u prvi plan, ili onStop() u sluaju da postaje sakrivena. Poziva se kada korisnik vie ne vidi aktivnost. Ovo se moe dogoditi kada je u toku unitavanje aktivnosti ili zbog nastavljanja izvravanja neke druge aktivnosti. Metoda koja se poziva posle ove moe da bude

Moe da se ubije posle? Ne

Sledea metoda

onCreate()

onStart()

onRestart()

Ne

onStart() onResume() ili onStop() onPause()

onStart()

Ne

onResume()

Ne

onPause()

Da

onResume() ili onStop()

onStop()

Da

onRestart() ili onDestroy()

59

Razvoj aplikacija za operativni sistem Android


onRestart() ukoliko je potrebna ponovna interakcija aktivnosti i korisnika ili onDestroy() u sluaju da aktivnost vie nije potrebna. Poziva se neposredno pre unitavanja aktivnosti. Ovo je poslednji poziv koji e aktivnost da primi. Metoda onDestroy() moe biti pozvana kada se zavrava sa izvravanjem aktivnosti (neko je pozvao metodu finish()) ili zato to sistem privremeno unitava instancu aktivnosti da bi oslobodio prostor. Pomou metode isFinishing() moe se napraviti razlika izmeu ova dva scenarija.

onDestroy()

Da

nema

Tabela 4.2 Fundamentalne metode ivotnog ciklusa

Kolona Moe da se ubije posle? oznaava da li sistem sme da ubije proces koji omoguava pokretanje aktivnosti bilo kada nakon zavretka izvravanja date metode. Da bi se bolje ilustrovalo kako jedna aktivnost izgleda, dat je primer 4.1, u kome su fundamentalne metode.
public class MojaAktivnost extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Nova aktivnost se kreira. } @Override protected void onStart() { super.onStart(); // Kreirana aktivnost postaje vidljiva. } @Override protected void onResume() { super.onResume(); // Aktivnost je postala vidljiva (sada je u stanju "resumed"). } @Override protected void onPause() { super.onPause(); // Druga aktivnost uzima fokus (ova aktivnost je sada "paused"). } @Override protected void onStop() { super.onStop(); // Aktivnost vie nije vidljiva (sada je u stanju "stopped"). } @Override protected void onDestroy() { super.onDestroy(); // Aktivnost se unitava. } }
Primer 4.2 Primer aktivnosti sa metodama ivotnog ciklusa

60

Razvoj aplikacija za operativni sistem Android

4.2.Kreiranje aktivnosti
Da bi se kreirala nova aktivnost u okviru Android aplikacije, kreira se nova klasa koja nasleuje klasu Activity (ili njenu izvedenu klasu). U novokreiranoj klasi, neophodno je implementirati metode opisane u prethodnom poglavlju ( vidiPrimer 4 .2). Najvanije je implementiranje metoda onCreate() i onPause(). Dakle, u okviru ve kreiranog Android poglavlja ( vidi Poglavlje 2.1) potrebno je kreirati novu klasu. U okviru Package Explorera koji se najee nalazi sa leve strane u Eclipse razvojnom okruenju najpre treba izabrati folder src, a zatim kliknuti desnim tasterom mia na paket koji je kreiran zajedno sa Android projektom. U naem sluaju, to je net.myelab.android.mojaaplikacija(Slika 4 .27).

Slika 4.27 Izbor paketa u okviru projekta

Zatim treba izabrati opciju New, pa Other (Slika 4 .28).

Slika 4.28 Izbor opcije za dodavanje novog fajla

Potom je potrebno izabrati opciju za dodavanje nove klase. To je opcija Java -> Class (Slika 4 .29). Zatim treba kliknuti na taster Next.

61

Razvoj aplikacija za operativni sistem Android

Slika 4.29 Izbor opcije za kreiranje nove klase

Sada e se pojaviti ekran prikazan na slici 4.5. Ovde je neophodno uneti odgovarajua podeavanja, a to su: Source folder folder u kome se uvaju izvorni fajlovi projekta. Obino je to src. Package naziv paketa u kome se kreira klasa. Ovde bi trebalo da stoji naziv paketa koji je kreiran zajedno sa novim Android projektom. U ovom sluaju, to je net.myelab.android.mojaaplikacija. Name naziv klase. Ovde unosimo eljeni naziv aktivnosti koju kreiramo. U naem sluaju, neka taj naziv bude Aktivnost. Modifiers modifikatori pristupa. Za aktivnost, ova vrednost bi trebalo da bude public. Superclass nadreena klasa. Za aktivnost, to bi trebalo da bude android.app.Activity.

62

Razvoj aplikacija za operativni sistem Android

Slika 4.30 Podeavanja nove klase

Nakon unetih vrednosti, potrebno je kliknuti na taster Finish. Sada je potrebno implementirati neke od ranije pomenutih metode. Aktivnost koju smo kreirali predstavljae Hello World primer. Najpre emo implementirati metodu onCreate():
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello world"); setContentView(tv); }
Primer 4.3 Implementacija metode onCreate()

Jedini ulazni parametar ove metode je objekat tipa Bundle koji predstavlja neko prethodno stanje aktivnosti ukoliko je aktivnost bila ranije pokrenuta. Na poetku se poziva metoda onCreate() nadreene klase (klasa Activity), kojoj se prosleuje parametar tipa Bundle. Zatim se kreira novi pogled (View). Pogled u stvari predstavlja osnovnu jedinicu korisnikog interfejsa Android aplikacije. Android aktivnost moe da koristi vie razliitih pogleda, a o njima e biti rei u narednom poglavlju. Tekstualni sadraj se ubacuje korienjem metode setText(). Konaan izgled klase Aktivnost prikazan je u narednom primeru: 63

Razvoj aplikacija za operativni sistem Android

package net.myelab.android.mojaaplikacija; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class Aktivnost extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello world"); setContentView(tv); } }
Primer 4.4 Klasa Aktivnost

Da bi aplikacija bila funkcionalna, neophodno je ubaciti podatke o kreiranoj aktivnosti u Android manifest fajl. Nakon izmena, fajl AndroidManifest.xml treba da izgleda ovako:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.myelab.android.mojaaplikacija" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Aktivnost" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Primer 4.5 Manifest fajl projekta

Tag <activity>omoguava android aplikaciji da zna da navedena klasa predstavlja aktivnost, s obzirom da je mogue koristiti i pomone klase. U okviru taga <intent-filter> definisano je koja aktivnost predstavlja poetnu aktivnost u aplikaciji. Sada je mogue startovati aplikaciju. Izborom opcije Run -> Run As -> Android Application startuje se aplikacija na odgovarajuem Android virtuelnom ureaju. 64

Razvoj aplikacija za operativni sistem Android Startovanje virtuelnog ureaja predstavlja dug proces koji moe potrajati i vie od 5 minuta. Proces kreiranja Android virtuelnog ureaja opisan je u poglavlju 2. Ukoliko je napravljeno vie Android virtuelnih ureaja, eljeni ureaj je mogue izabrati pomou opcije Run -> Run Configurations , a zatim je potrebno izabrati opciju Android Application -> Naziv Projekta, pa karticu Target (Slika 4 .31).

Slika 4.31 Izbor Android virtuelnog ureaja

Ukoliko je fiziki Android ureaj povezan sa raunarom korienjem USB porta, izborom opcije Run nee doi do startovanja virtuelnog ureaja, ve e se aplikacija instalirati na fiziki ureaj i potom automatski startovati na njemu. Uspeno startovana aplikacija na virtuelnom ureaju prikazana je na sledeoj slici:

65

Razvoj aplikacija za operativni sistem Android

Slika 4.32 Aplikacija na virtuelnom ureaju

5. Elementi korisnikog interfejsa


Postoje dva deklarativno. naina dizajniranja korisnikog interfejsa: proceduralno i

Proceduralni dizajn odnosi se na pisanje Java koda, a deklarativni na pisanje XML (eng. Extensible Markup Language) koda. U praksi se za kreiranje grafikog korisnikog interfejsa uglavnom koristi XML.Primer 4 .4 predstavlja primer proceduralnog dizajna. Kreiranjem interfejsa aktivnosti dobijaju svoju funkcionalnost, tj. vidljivost na ekranu ureaja i na taj se nain omogucava interakciju sa korisnikom. Osnovne jedinice korisnikog interfejsa su objekti pogled ( View) i grupe pogleda (ViewGroup): pogled objekat ija prenos struktura u sebi nosi zapis izgleda i sadraja odreenog pravougaonog podruja na ekranu, upravlja iscrtavanjem elemenata, pomeranjem sadraja na ekranu (scrolling) i ostalim faktorima koji utiu na izgled definisanog dela ekrana. U hijerarhijskom stablu objekti pogled su listovi stabla. Android raspolae sa vec gotovim skupovima objekata ove vrste kao to su dugmad, kvadratici za odabir (eng. checkbok) i slino. Ovi objekti nasleuju klasu View; grupe pogleda posebna vrsta objekta pogled koja sadri i upravlja grupom zavisnih objekata pogleda i grupe pogleda ime je omogucena kompleksnost prikaza korisnikog interfejsa. Objekti ove vrste su inastance klase ViewGroup. 66

Razvoj aplikacija za operativni sistem Android

Slika 5.33 Hijerarhijski prikaz elemenata korisnikog interfejsa

Iscrtavanje elemenata stabla zapoinje od korena stabla tako to aktivnost prvo poziva svoju setContentView() metodu i Android operativnom sistemu predaje referencu na koreni objekat. Svaki podvor iscrtava se sam pozivanjem draw() metode i to pod uslovom da vor sam postavlja zahtev za lokacijom i veliinom, ali roditeljski vor (grupa pogleda) donosi konanu odluku o veliini prostora za iscrtavanje podvora i njegovoj lokaciji na ekranu. Svaka grupa pogleda je odgovorna za renderovanje prikaza svojih podvorova.

5.1.XML layout
Naa prva Android aplikacija (Primer 4 .4) koristila je najjednostavniji pogled TextView koji slui za prikaz teksta i bila je dizajnirana proceduralno, to znai da nije korien XML prilikom dizajniranja korisnikog interfejsa. S obzirom da je poeljno koristiti deklarativan dizajn prilikom kreiranja sloenijeg korisnikog interfejsa, u daljem tekstu bie opisan postupak kreiranja Hello world aplikacijekorienjem XML tehnologije za dizajn korisnikog interfejsa. Jedna od najveih prednosti deklarativnog dizajna jeste potpuna odvojenost dizajna korisnikog interfejsa od aplikacione logike. To znai da male promene u kodu nee uticati na dizajn aplikacije i obrnuto. Deklarisanje TextView pogleda pomou XML-a obavlja se na sledei nain:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="fill_parent"

67

Razvoj aplikacija za operativni sistem Android


android:text="@string/zdravo"/>
Primer 5.6 XML prikaz TextView pogleda

Ovo predstavlja XML layout fajl, u kome je opisan dizajn korisnikog interfejsa. Struktura ovog fajla je jednostavna. U pitanju je stablo sainjeno od XML elemenata, gde svaki njegov vor u stvari predstavlja pogled koji se koristi u aplikaciji (naziv View klase). U ovom primeru naveden je samo jedan View element, a to je TextView. U okviru XML layout fajla mogue je koristiti bilo koju klasu koja je izvedena (nasleena) iz klase View, to podrazumeva i korisnike izvedene klase. U primeru 5.1 korien je samo jedan element TextView sa svojih pet atributa. Znaenje ovih atributa prikazano je u sledeoj tabeli:
Atribut xmlns:android Znaenje Ovo predstavlja naziv XML imenskog prostora. Poto je vrednost ovog atributa android, to znai da e se koristiti atributi deklarisani u okviru Android imenskog prostora. vorovi najvieg hijerarhijskog poloaja u Android layout fajlu moraju da poseduju ovaj atribut. Ovaj atribut dodeljuje jedinstveni identifikator elementu TextView. Dodeljeni ID je mogue koristiti za referenciranje ovog pogleda u izvornom kodu ili drugim XML deklaracijama. Ovaj atribut odreuje koliko e ovaj pogled da zauzme irine ekrana. U ovom sluaju, ovo je jedini pogled koji se koristi, te je mogue zauzeti itav ekran, to oznaava vrednost atributa "fill_parent". Ovaj atribut se ponaa slino atributu android:layout_width. Razlika je u tome to se atribut android:layout_height odnosi na dostupnu visinu ekrana. Ovde se ubacuje eljeni tekst koji TextView treba da prikae. U ovom primeru, koristi se resurs tipa string (umesto direktno unete vrednosti stringa). Ovaj string je definisan u fajlu res/values/strings.xml . Prilikom ubacivanja stringova u aplikaciju preporuuje se korienje resursa, a ne direktni unos vrednosti stringova. Ovo je dobra praksa zato to omoguava lokalizaciju aplikacije, odnosno mogunost viejezinosti, bez imena koda layout fajla.

android:id

android:layout_width android:layout_height

android:text

Tabela 5.3 Znaenje atributa elementa TextView

XML layout fajlovi nalaze se u folderu /res/layout/ u okviru projekta. Dodatak za Eclipse automatski kreira podrazumevani layout fajl, main.xml. U primeru 5.1 ovaj fajl je ignorisan, a sam layout je kreiran direktno u kodu. Da bi se koristio XML layout, neophodno je nainiti odgovarajue izmene. Najpre je potrebno otvoriti fajl /res/layout/main.xml, u njega ubaciti kod prikazan u primeru 5.1 i sauvati izmene. Zatim treba otvoriti fajl /res/values/strings.xml. Ovde se nalaze vrednosti stringova koji se koriste u aplikaciji. Potrebno je ubaciti sledei kod:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="zdravo">Hello world!</string> <string name="app_name">Hello world application</string> </resources>
Primer 5.7 Fajl strings.xml

68

Razvoj aplikacija za operativni sistem Android String zdravo se prikazuje u okviru TextView-a, a string app_name se odnosi na naziv same aplikacije koji e se prikazivati na Android ureaju. Sada je potrebno promeniti sadraj klase Aktivnost. Neophodno joj je staviti do znanja da treba da koristi XML layout. Nakon izmena, klasa Aktivnost izgleda ovako:
package net.myelab.android.mojaaplikacija; import android.app.Activity; import android.os.Bundle; public class Aktivnost extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
Primer 5.8 Klasa Aktivnost

Dakle,

XML layout-ima se pristupa pozivanjem atributa R.layout.naziv_layouta, to predstavlja reprezentaciju kompajlovanog objekta odgovarajueg XML layout-a. Ovi objekti se uvaju u okviru fajla /gen/paket/R.java, koji ne treba runo modifikovati. Izmenjenu aplikaciju je sada mogue pokrenuti na standardni nain. U daljem tekstu bie prikazano vie grupa pogleda (layouta) i pogleda (views) koji se mogu koristiti prilikom dizajniranja korisnikog interfejsa. Uz svaki pogled priloen je izvorni kod odgovarajueg primera.

odgovarajuim

5.2.Layouts
5.2.1.LinearLayout
LinearLayout predstavlja grupu pogleda koja prikazuje vie pogleda, horizontalno

ili vertikalno. Ukoliko se koristi ugnjedavanje vie LinearLayout-a, bolje je umesto njega koristiti RelativeLayout.

69

Razvoj aplikacija za operativni sistem Android

Slika 5.34 LinearLayout

Sadraj fajla res/layout/main.xml:


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <TextView android:text="red" android:gravity="center_horizontal" android:background="#aa0000" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/> <TextView android:text="green" android:gravity="center_horizontal" android:background="#00aa00" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/> <TextView android:text="blue" android:gravity="center_horizontal" android:background="#0000aa" android:layout_width="wrap_content" android:layout_height="fill_parent"

70

Razvoj aplikacija za operativni sistem Android


android:layout_weight="1"/> <TextView android:text="yellow" android:gravity="center_horizontal" android:background="#aaaa00" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"/> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <TextView android:text="row one" android:textSize="15pt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:text="row two" android:textSize="15pt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:text="row three" android:textSize="15pt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:text="row four" android:textSize="15pt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> </LinearLayout>
Primer 5.9 Sadraj fajla res/layout/main.xml

U opisu ovog layout-a postoji koreni element LinearLayout. On definie vertikalnu orijentaciju i ima dva izvedena vora tipa LinearLayout. Prvi vor je horizontalne orijentacije, a drugi vertikalne. Svaki od ovih vorova poseduje svoje izvedene TextViewvorove koji prikazuju neki sadraj. Sada je potrebno kreirati poetnu aktivnost projekta i podesiti manifest fajl. Izvorni kod aktivnosti:
public void onCreate(Bundle savedInstanceState) {

71

Razvoj aplikacija za operativni sistem Android


super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Primer 5.10 LinearLayout aktivnost

Sada se aplikacija moe pokrenuti.

72

Razvoj aplikacija za operativni sistem Android

5.2.2.RelativeLayout
RelativeLayoutpredstavlja grupu pogleda koja prikazuje vie View elemanata

korienjem relativnih pozicija. Pozicije su relativne u odnosu na element istog nivoa hijerarhije ili u odnosu na celo podruje RelativeLayout-a.

Slika 5.35 RelativeLayout

Sadraj fajla res/layout/main.xml:


<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Type here:"/> <EditText android:id="@+id/entry" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" android:layout_below="@id/label"/> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/entry" android:layout_alignParentRight="true" android:layout_marginLeft="10dip"

73

Razvoj aplikacija za operativni sistem Android


android:text="OK" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/ok" android:layout_alignTop="@id/ok" android:text="Cancel" /> </RelativeLayout>
Primer 5.11 Sadraj fajla res/layout/main.xml

Dakle, za opisivanje pozicije elemenata koriste se atributi layout_alignParentRighti layout_toLeftOf.

layout_below,

Sada je potrebno kreirati poetnu aktivnost projekta i podesiti manifest fajl. U sledeem kodu prikazana je samo onCreate() metoda ove aktivnosti:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Primer 5.12 RelativeLayout aktivnost

74

Razvoj aplikacija za operativni sistem Android

5.2.3.TableLayout
TableLayoutje grupa pogleda koja prikazuje svojeView elemente u redovima i

kolonama.

Slika 5.36 TableLayout

Sadraj fajla res/layout/main.xml:


<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1"> <TableRow> <TextView android:layout_column="1" android:text="Open..." android:padding="3dip" /> <TextView android:text="Ctrl-O" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:layout_column="1" android:text="Save..." android:padding="3dip" /> <TextView android:text="Ctrl-S" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow>

75

Razvoj aplikacija za operativni sistem Android


<TextView android:layout_column="1" android:text="Save As..." android:padding="3dip" /> <TextView android:text="Ctrl-Shift-S" android:gravity="right" android:padding="3dip" /> </TableRow> <View android:layout_height="2dip" android:background="#FF909090" /> <TableRow> <TextView android:text="X" android:padding="3dip" /> <TextView android:text="Import..." android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="X" android:padding="3dip" /> <TextView android:text="Export..." android:padding="3dip" /> <TextView android:text="Ctrl-E" android:gravity="right" android:padding="3dip" /> </TableRow> <View android:layout_height="2dip" android:background="#FF909090" /> <TableRow> <TextView android:layout_column="1" android:text="Quit" android:padding="3dip" /> </TableRow> </TableLayout>
Primer 5.13 Sadraj fajla res/layout/main.xml

Primeujemo da nain formiranja tabele u ovom layout-u podsea na formiranje tabele u HTML-u. Element TableLayout analogan je tagu <table> u HTML-u, a 76

Razvoj aplikacija za operativni sistem Android element TableRow analogan je elementu <tr>. Kao elije tabele mogu se koristiti bilo koji View elementi. U ovom sluaju se koristi TextView. Na kraju, ostaje kod poetne aktivnosti, koji je isti kao u prethodna dva primera. Ovde je samo prikazana onCreate metoda ove aktivnosti:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Primer 5.14 RelativeLayout aktivnost

77

Razvoj aplikacija za operativni sistem Android

5.2.4.GridView
GridViewpredstavlja grupu pogleda koja prikazuje elemente u dvodimenzionalnoj

mrei sa mogunou skrolovanja. Elementi se ubacuju pomou ListAdapter-a. U ovom primeru bie prikazano kreiranje mree sa malim slikama (thumbnails). Kada se izabere neka od njih, toast poruka e prikazati poziciju slike.

Slika 5.37 GridView

Sadraj fajla res/layout/main.xml:


<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center"/>
Primer 5.15 Sadraj fajla res/layout/main.xml

Zatim je neophodno kreirati podrazumevanu aktivnost. Njena onCreate() metoda prikazana je u sledeem primeru:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

78

Razvoj aplikacija za operativni sistem Android

GridView gridview = (GridView) findViewById(R.id.gridview); gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show(); } }); }
Primer 5.16 RelativeLayout aktivnost

Nakon podeavanja podrazumevanog (main) layout-a za prikaz sadraja, aplikacija odgovarajui GridView pogled preuzima iz layout-a uz pomo metode findViewById(int). Metoda setAdapter() postavlja odgovarajui izvor podataka koje e prikazati GridView. U ovom primeru se koristi ImageAdapter. Klasa ImageAdapter bie definisana u narednom koraku. Da bi bilo mogue reagovati na dogaaj kada se izabere stavka mree, poziva se metoda koja oslukuje te dogaaje. Njen naziv je setOnItemClickListener(), a prosleuje joj se dogaaj OnItemClickListener. U ovom primeru, prilikom samog poziva metode kreira se instanca tog dogaaja. Konano, definie se prikaz toast poruke sa indeksom izabranog elementa. Sada je potrebno definisati klasu ImageAdapter koja definie nain popunjavanja mree:
public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } // create a new ImageView for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView;

79

Razvoj aplikacija za operativni sistem Android


if (convertView == null) { // if it's not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } // references to our images private Integer[] mThumbIds = { R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 }; }
Primer 5.17 Klasa ImageAdapter

Najpre

se

implementiraju

metode

roditeljske

klase

BaseAdapter.

Metoda

getCount() vraa ukupan broj elemenata ovog adaptera. Metoda getItem() vraa

element koji se nalazi na prosleenoj poziciji. Metoda getItemId() vraa id reda elementa. U ovom primeru se ove metode ne koriste (vraaju respektivno null i 0). Metoda getView() kreira novi pogled za svaku sliku iz ImageAdapter-a. Njoj se prosleuje pogled za koji se proverava da li je null. Ukoliko jeste, ImageView je instanciran i konfigurisan. Ukoliko ova vrednost nije null, to znai da je ImageView ranije instanciran i u tom sluaju se koristi taj objekat. Metode setLayoutParams(), setScaleType() i setPadding() respektivno podeavaju dimenzije pogleda, tip skaliranja i razmak izmeu elemenata. Na kraju bi trebalo napomenuti da je neophodno ubaciti eljene slike u folder res/drawable/.

80

Razvoj aplikacija za operativni sistem Android

5.2.5.TabLayout Korienje kartica (tabova) prilikom izrade korisnikog interfejsa veoma je popularno. Android platforma omoguava dva razliita pristupa prilikom izrade ovakvog korisnikog interfejsa. Prvi pristup jeste jednostavna promena pogleda u okviru iste aktivnosti prilikom izbora eljene kartice, a drugi pristup je promena itave aktivnosti prilikom izbora kartice. U bilo kom sluaju, neophodno je korienje klasa TabHostiTabWidget. TabHost predstavlja koreni vor layout-a. U okviru njega nalaze se elementi TabWidget za prikaz dostupnih kartica i FrameLayout za prikaz sadraja izabrane kartice.

Slika 5.38 TabLayout

U ovom primeru, svakoj kartici bie dodeljena razliita aktivnost. Najpre je neophodno kreirati tri razliite aktivnosti. To su ArtistsActivity, AlbumsActivity iSongsActivity. Svaka od njih e biti prikazana u posebnoj kartici. Za poetak, svaka aktivnost e prikazivati odreenu poruku. Na primer:
public class ArtistsActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textview = new TextView(this); textview.setText("This is the Artists tab"); setContentView(textview); } }
Primer 5.18 RelativeLayout aktivnost

81

Razvoj aplikacija za operativni sistem Android Prethodni na aktivnost ArtistsActivity. Za aktivnosti AlbumsActivity i SongsActivity koristi se isti kod, uz izmenu poruke koja e se prikazati. Treba uoiti da aktivnosti ne koriste XML layout, ve pomou koda pozivaju TextView. Naravno, ove aktivnosti je neophodno ubaciti u Android manifest fajl.Za svaku karticu potrebno je pripremiti dve ikone. Jedna se prikazuje u sluaju kada je kartica izabrana, a druga kada kartica nije izabrana. kod odnosio se

Slika 5.39 Primer izgleda ikona za kartice

U ovom primeru, ista ikona e se koristiti za svaku karticu. Slike ikona bi trebalo ubaciti u folder res/drawable/. U istom folderu treba kreirati novi XML fajl i nazvati ga ic_tab_artists.xml. Kod koji treba ubaciti u fajl je sledei:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Ikona koja se koristi za izabranu karticu --> <item android:drawable="@drawable/ic_tab_artists_grey" android:state_selected="true" /> <!-- Ikona koja se koristi za ostale kartice --> <item android:drawable="@drawable/ic_tab_artists_white" /> </selector>
Primer 5.19 Fajl ic_tab_artists.xml

U fajl koji opisuje layout (res/layout/main.xml) treba ubaciti sledei kod:


<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" /> </LinearLayout> </TabHost>

82

Razvoj aplikacija za operativni sistem Android


Primer 5.20 Sadraj fajla res/layout/main.xml

Ovaj layout e prikazati kartice i omoguiti navigaciju izmeu svih ranije kreiranih aktivnosti. Element TabHost zahteva elemente TabWidget i FrameLayout unutar sebe. U zavisnosti od eljenog rasporeda ovih elemenata, mogu se koristiti razliiti layout-i za njihovo pozicioniranje. Na primer, za njihovo vertikalno pozicioniranje moe se koristiti LinearLayout. Element FrameLayout trenutno je prazan zato to se sadraj trenutne kartice uzima iz tekue aktivnosti koja se odnosi na tu karticu. Treba primetiti elementi TabWidget i FrameLayout imaju svoje identifikatore. To su tabs i tabcontent, respektivno. Ova imena moraju da se koriste kada neko referencira ove elemente. Sada treba napraviti jo jednu aktivnost. Moe se izabrati njen proizvoljan naziv, ali je vano da se u Manifest fajlu definie da je u pitanju poetna aktivnost. Ova aktivnost e se razlikovati od ostalih, ranije spominjanih aktivnosti, zato to ona nasleuje klasu TabActivity. U nastavku je dat skraeni kod poetne aktivnosti (nije prikazan paket kojem klasa pripada, kao ni uvezene klase):
public class HelloTabWidget extends TabActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Resources res = getResources(); // Uzimaju se resursi TabHost tabHost = getTabHost(); // Aktivnost TabHost TabHost.TabSpec spec; // TabSpec za svaku karticu Intent intent; // Intent za svaku karticu // Instanciranje Intent-a intent = new Intent().setClass(this, ArtistsActivity.class); // Instanciranje TabSpec-a za svaku karticu i dodavanje TabHost-u spec = tabHost.newTabSpec("artists").setIndicator("Artists", res.getDrawable(R.drawable.ic_tab_artists)) .setContent(intent); tabHost.addTab(spec); // Sledi isti postupak za ostale kartice intent = new Intent().setClass(this, AlbumsActivity.class); spec = tabHost.newTabSpec("albums").setIndicator("Albums", res.getDrawable(R.drawable.ic_tab_albums)) .setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, SongsActivity.class); spec = tabHost.newTabSpec("songs").setIndicator("Songs", res.getDrawable(R.drawable.ic_tab_songs)) .setContent(intent); tabHost.addTab(spec); tabHost.setCurrentTab(2); } }
Primer 5.21 Poetna aktivnost aplikacije sa karticama

83

Razvoj aplikacija za operativni sistem Android Poslednja linija koda podeava koja kartica predstavlja poetnu karticu u aplikaciji.

5.2.6.ListView
ListViewpredstavlja

grupu pogleda koja kreira listu sastavljenu od vie elemenata, sa mogunou skrolovanja. Elementi kojima se lista popunjava definiu se pomou ListAdapter-a.

Slika 5.40 ListView

Prvo je potrebno napraviti layout. Fajl sa sledeim sadrajem treba snimiti kao fajl /res/layout/list_item.xml. Navedeni layout definie izgled svakog elementa pojedinano u listi.
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textSize="16sp" > </TextView>
Primer 5.22 Sadraj fajla res/layout/main.xml

Zatim treba kreirati poetnu aktivnost, koja umesto klase Activity nasleuje klasu ListActivity. Priloenom kodu treba dodati naziv paketa u kome se nalazi i uvezene klase, odnosno pakete.
public class HelloListView extends ListActivity { @Override

84

Razvoj aplikacija za operativni sistem Android


public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES)); ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } }); } static final String[] COUNTRIES = new String[] { "Srbija", "Madjarska", "Bugarska", "Rumunija", "Italija" }; }
Primer 5.23 Glavna TabView aktivnost

Primetiemo da navedeni kod ne uitava layout fajl vezan za aktivnost, to se obino radi metodom setContentView(). Umesto toga, metoda setListAdapter() omoguava prikaz pogleda ListView preko itavog ekrana tekue aktivnosti. ArrayAdapter omoguava popunjavanje liste elementima odreenog niza. Konstruktor klase ArrayAdapter prihvata parametre konteksta (Context) aplikacije, referencu na layout svakog elementa ( main.xml, Primer 5 .22) i referencu ka nizu u kome se nalaze elementi koje elimo da prikaemo u ovoj listi. U ovom sluaju, taj niz se zove COUNTRIES i kreiran je posle metode onCreate(), u klasi aktivnosti. Metodom setTextFilterEnabled() omoguuje se filtriranje liste. Ukoliko je vrednost postavljena na true, omoguava se filtriranje liste kada korisnik aplikacije ukuca deo naziva odreenog elementa. Zatim se oslukuju onItemClick() dogaaji. Ukoliko nastupi ovaj dogaaj (korisnik izabere odreeni element liste), prikazuje se toast poruka. Ovime je zavrena aplikacija koja prikazuje listu. Ubacivanje vrednosti kljunih varijabli u kod nije dobro reenje. Mnogo je bolje vrednost niza koji popunjava listu ubaciti u neki XML fajl u okviru resursa. Na primer, moemo kreirati fajl res/values/strings.xml, sa sledeim sadrajem:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="countries_array"> <item>Srbija</item>

85

Razvoj aplikacija za operativni sistem Android


<item>Madjarska</item> <item>Bugarska</item> <item>Rumunija</item> <item>Italija</item> </string-array> </resources>
Primer 5.24 Sadraj fajla res/values/strings.xml

Da bi se koristili elementi iz XML fajla umesto niza koji je definisan u klasi aktivnosti, potrebno je promeniti liniju koda:
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));

Umesto te linije, potrebno je ubaciti sledei kod:


String[] countries = getResources().getStringArray(R.array.countries_array); setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, countries));
Primer 5.25 Kod za referenciranje resursa iz eksternog XML fajla

Ovim kodom omoguava se uzimanje resursa iz definisanog XML fajla. Sadraj i funkcionalnosti aplikacije se ovim nee promeniti.

86

Razvoj aplikacija za operativni sistem Android

5.3.Meni
Za pristup meniju aplikacije najece se koristi taster MENU koji se nalazi na samom ureaju (ukoliko je hardverski podrano) ili se meni moe prikazati ukoliko se odabere neka od komponenti aplikacije. Strukturu menija, koja je hijerarhijska, nije potrebno runo konfigurisati nego se isto postie definisanjem povratnih (eng. callback) metoda onCreateOptionsMenu() ili onCreateContextMenu() s listom stavki menija za odreenu aktivnost. Upravljanje dogaajima takoe se odvija automatski pozivanjem metoda onOptionsItemSelected() ili onContextItemSelected() od strane sistema.

5.4.Dogaaji u okviru korisnikog interfejsa


Kako bi se znalo da je korisnik uopte odabrao neku od aktivnosti ili stavku u meniju interfejsa, potrebno je definisati nain na koji korisnik vri interakciju s odreenim komponentama interfejsa. Postoje dva naina: oslukivanje dogaaja (event listener). View klasa sadri kolekciju grupisanih interfejsa on<event>Listener od kojih svako sadri povratne metodu on<event>() pri emu dogaaj moe biti ili odabir odreenog elementa ili dodir ekrana ili neto trece. redefinisanje (override) postojece povratne metode za View klasu - koristi se u sluaju implementiranja vlastite View klase i oslukivanja posebnih dogaaja koji se u njoj pojavljuju.

5.5.Dodatne mogucnosti
Osim osnovnih komponenti aplikacija moe sadrati mnotvo dodatnih elemenata i njihovih varijacija. Spomenucemo adaptere, te stilove i teme. Adapteri su vrsta podklase ViewGroup koja se koristi za prikaz gotovih pohranjenih podataka (za razliku od iscrtavajucih grupa i nizova). Kao deo aplikacionog sistema postoje vec gotovi stilovi i teme, no takoe je moguce stvoriti i vlastite. Stil je skup jednog ili vie atributa za oblikovanje pojedinanih elemenata u prikazu (npr. definisanje odreene veliine prikaza i boje slova). Tema je skup jednog ili vie atributa za oblikovanje koji se primenjuju na jednu ili sve aktivnosti u aplikaciji (npr. definisanje odreenih pozadinskih boja, izgleda teksta za odreenu aktivnost). 87

Razvoj aplikacija za operativni sistem Android

5.6.Dijalozi
Android omoguava prikazivanje interaktivnih dijaloga koji u sebi mogu da sadre bilo koje elemente korisnikog interfejsa. Neke vrste dijaloga dolaze sa predefinisanim izgledom i namenom, a mogue je definisati i spostveni layout za dijalog ili ak napraviti sopstvenu klasu na osnovu klase Dialog koja predstavlja zajedniku nadklasu za sve vrste dijaloga. Bez obzira na klasu dijaloga, potrebno je obratiti panju na nain njihovog kreiranja. Najjednostavniji nain je da se dijalog kreira u samom kodu, tamo gde je potrebno i zatim prikae pozivanjem metode show() nad objektom dijaloga. Ovaj pristup je problematian, jer se o takvom dijalogu moramo sami starati u sluaju promene konfiguracije telefona (tipino: u sluaju rotacije iz Portrait u Landscape i obrnuto).
Dialog mojDijalog = new MojaKlasaDijaloga() mojDijalog.show();

Bolja varijanta je da staranje o dijalogu prepustimo naoj aktivnosti u kojoj e dijalog biti prikazan. Da bi to postigli, prvo moramo da implementiramo metodu onCreateDialog(int) ili onCreateDialog(int, bundle). Int parametar u oba sluaja predstavlja neki na ID dijaloga kojeg treba prikazati, a opcioni bundle parametar predstavlja paket podataka koji se mogu proslediti pri kreiranju dijaloga.
@Override protected Dialog onCreateDialog(int id, Bundle args) { Dialog rezultat; switch(id) { case 1: rezultat = new MojaKlasaDijaloga(); break; case 2: rezultat = new NekiDrugiDijalog(); break; } return rezultat; }

U ovoj metodi proveravamo koji dijalog se trai (npr. dijalog sa IDjem 1 je upozorenje korisniku da se greka desila, a dijalog sa IDjem 2 mu nudi izbor OK/CANCEL), pa zavisno od toga kreiramo odgovarajui dijalog i vraamo ga kao rezultat. Ova metoda e automatski biti pozvana kada korisnik prvi put pozove metodu showDialog(int) ili showDialog(int, bundle). Pri sledeim pozivanjima e biti upotrebljen postojei, ve kreirani dijalog. Ako doe do promene konfiguracije, sama aktivnost e se postarati za ponovno iscrtavanje dijaloga. 88

Razvoj aplikacija za operativni sistem Android


showDialog(1, null); // hocemo prikaz greske (ID 1), ne saljemo Bundle

Ako nam je neophodno da napravimo neke izmene na dijalogu pri svakom prikazivanju (npr. svaki put prikazujemo drugaijio tekst greke), onda moemo pored onCreateDialog da implementiramo i metodu onPrepareDialog koja se zove svaki put po pozivu metodu showDialog. 5.6.1.Kreiranje AlertDialog-a Vri se pomou klase AlertDialog.Builder. Moe se odrediti tekst poruke koja e biti prikazana metodom setMessage, kao i broj dugmia (1/2/3), tekst na njima i listeneri koji e reagovati na klik. Dugmii i njihovi listeneri se dodaju metodama setNeutralButton, setPositiveButton i setNegativeButton. Sve navedene metode vraaju referencu na samog Buildera pa je omogueno pozivanje vie metoda u jednom redu builder.metoda1().metoda2().metoda3();
AlertDialog.Builder builder = new AlertDialog.Builder(roditelj); Dialog dijalog = builder.setMessage(idTeksta) .setNeutralButton(R.string.standardOK, null) .create();

5.6.2.Kreiranje dijaloga sa sopstvenim layout-om U ovoj varijanti moramo prvo da kreiramo svoj layout fajl u res/layout, a zatim, pri kreiranju dijaloga prosledimo ID layouta koji elimo da se koristi. Dalja procedura je ista kao pri radu sa layout-om aktivnosti - vadimo reference na elemente layouta i dodeljujemo im vrednosti/listenere po elji.
Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.moj_lejaut); dialog.setTitle(R.string.KvizKraj); TextView polje1 = (TextView) dialog.findViewById(R.id.dijalog_polje1); polje1.setText("tekst polja 1"); TextView polje2 = (TextView) dialog.findViewById(R.id.dijalog_polje2); polje2.setText("tekst polja 2");

Korien layout (moj_lejaut.xml):


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="fill_parent"

89

Razvoj aplikacija za operativni sistem Android


android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dijalog_polje1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dijalog_polje2" /> </LinearLayout>

5.6.3.Druge vrste dijaloga Druge, specifine vrste dijaloga je uglavnom dovoljno samo kreirati uz odgovarajue parametre pri konstrukciji poto im je izgled predefinisan.

Primeri drugih vrsta dijaloga:

6. Intents
Intent (svrha, namera) omogucava prelaz izmeu ekrana aplikacija. Ustvari

predstavlja nameru za obavljanjem odreene radnje. Objekat Intent predstavlja zahtev koji koristi Android operativni sistem. Kada se koristi komanda startActivity() sa Intent parametrom, Android sistem uparuje Intent sa odgovarajuom aktivnou na Android sistemu. Ta aktivnost se tada pokree. Android sistem upravlja svim Intent odlukama. Intent moe biti veoma specifian, ukljuujui zahtev za pokretanje odreenih aktivnosti, zahtev da se pokrene aktivnost koja odgovara nekom kriterujumu i dr.
Intent se koristi za prosleivanje podataka izmeu aplikacija tako to tada

obuhvata i dodatne podatke (extras). Da bi se dodatni podaci vezali za intent koristi se komanda putExtra() sa odgovarajuim tipom objekta koji se dodaje. 90

Razvoj aplikacija za operativni sistem Android Aplikacija moe pokretati samo one klase aktivnosti koje su definisane u njenom paketu. Ipak, sa odgovarajuim doputenjima, aplikacija moe takoe da pokrene eksternu klasu aktivnosti u drugoj aplikaciji. Drugim reima, Intent predstavlja posebnu poruku (ili okida) koja aktivira neku od kljunih komponenata aplikacija (aktivnost, servis ili prijemnik poruka). Sam objekat tipa Intent predstavlja pasivnu strukturu podataka koja uva apstraktnu definiciju operacije koja e biti izvrena. Za startovanje aktivnosti, koristi se metoda
Context.startActivity()

ili

Activity.startActivityForResult(). Ulazni parametar ovih metoda jeste objekat

tipa Intent. Za startovanje servisa, koristi se metoda Context.startService() kojoj se prosleuje Intent objekat. Za povezivanje servisa sa tekuom aktivnou koristi se metoda Context.bindService(). Pomou metoda Context.sendBroadcast(), Context.sendOrderedBroadcast() ili Context.sendStickyBroadcast()mogue je prosleivanje Intent-a prijemnicima poruka.

6.1.Pokretanje aktivnosti
Da bismo pokrenuli novu aktivnost, neophodno je prei sledee korake: 1. Napraviti novu aktivnost 2. Napraviti layout za novu aktivnost 3. Dodati zapis o novoj aktivnosti u manifest 4. Odrediti kada se startuje nova aktivnost (tipino po nekom dogaaju) 5. Napraviti Intent za startovanje nove aktivnosti i opaliti ga.

6.1.1.Pravljenje nove aktivnosti Kreiramo novu java klasu NovaAktivnost i deklariemo da nasleuje klasu Activity, to je klasa koju svaka korisnika aktivnost mora da nasleuje. Dodajemo metodu onCreate koja se automatski poziva po kreiranju aktivnosti i iz nje pozivamo setContentView kako bismo podesili korisniki interfejs na osnovu layout fajla kojeg pravimo u sledeem koraku.
public class NovaAktivnost extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.nova_aktivnost); } }

91

Razvoj aplikacija za operativni sistem Android 6.1.2.Pravljenje layouta za novu aktivnost U res/layout dodajemo novi xml layout fajl koji e za sada sadrati samo jedan TextView sa porukom korisniku.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="POZDRAV OD NOVE AKTIVNOSTI!"/> </LinearLayout>

6.1.3.Dodavanje zapisa u manifest Ukoliko pokuamo da startujemo aktivnost koja nije dodata u manifestu nae aplikacije, dobiemo poruku o greci. Zato je neophodno dodati zapis o aktivnosti u manifest:
<activity android:label="Naslov ove aktivnosti" android:name="NovaAktivnost"> </activity>

6.1.4.Startovanje aktivnosti Kada je aktivnost kreirana i zapis o njoj dodat, moemo da je pozovemo iz neke druge aktivnosti. Za to nam je potreban objekat klase Intent. Postoji vie konstruktora za objekte ove klase, ali nama je potreban onaj koji zahteva dva paramtera: kontekst i klasu koju elimo da startujemo. Intent kreiran na ovaj nain e funkcionisati kao eksplicitni intent. Da bi startovali aktivnost, pozivamo metodu startActivity i dajemo joj Intent koji smo kreirali kao parametar.
nekoDugme.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent namera = new Intent(Pocetna.this, NovaAktivnost.class); startActivity(namera); } }

6.2.Slanje podataka novoj aktivnosti


esto je potrebno proslediti nekakve podatke iz jedne aktivnosti drugoj. Na primer, moda imamo aktivnost koja lista sve drave sveta u jednom spisku pa se klikom na neku od drava pokree druga aktivnost sa detaljnim opisom izabrane drave. Slanje podataka vri se pomou Intent-a kojim startujemo aktivnost; sve podatke koje elimo da poaljemo dodajemo Intent-u pre nego to ga opalimo. 92

Razvoj aplikacija za operativni sistem Android Podaci se dodaju pomou niza metoda putExtra(kljuc, vrednost). Postoje varijante ove metode za razliite tipove vrednosti - integere, booleane, stringove itd.
Intent namera = new Intent(Pocetna.this, NovaAktivnost.class); namera.putExtra("KLJUC_PODACI", "Neki String podatak"); startActivity(namera);

Sa druge strane, startovana aktivnost treba nekako da izvadi podatke po pokretanju. To se ini pozivom metode getIntent koja vraa Intent koji je startovao aktivnost, dakle onaj intent koji smo napunili nekakvim podacima. Nad tim intentom zovemo metodu getExtras koja nam vraa Bundle objekat, tj. paketi sa podacima. Podatke onda vadimo pomou neke od get metoda getInt, getBoolean, getString itd.
String dobijeniPodaci = getIntent().getExtras().getString("KLJUC_PODACI");

6.3.Vraanje podataka iz aktivnosti


Kao to je mogue poslati podatke iz aktivnosti-pokretaa u pokrenutu aktivnost, mogue je i obrnuto, tj. aktivnost moe po zavretku da vrati neke podatke onoj aktivnosti koja ju je pokrenula. Da bi se ovo postiglo, prvo treba izmeniti nain na koji se pokree aktivnost. Umesto metode startActivity, treba koristiti metodu startActivityForResult. Ova metoda, pored Intent-a, prima i ID koji elimo da dodelimo novoj aktivnosti, to je neophodno u sluaju kada startujemo vie razliitih aktivnosti iz poetne.
startActivityForResult(namera, 1);

Pokrenuta aktivnost odreuje koji podaci e se vratiti nazad pozivom metode setResult. Postoje dve varijante ove metode; prva kao parametar uzima tzv. result code, za kojeg postoje predefinisane konstante RESULT_OK i RESULT_CANCEL, a mogue je i koristiti neke svoje kodove. Ovo je zgodno u stiuacijama kada hoemo da javimo aktivnosti-pokretau da li je korisnik napravio neke izmene koje treba snimiti ili odbaciti, najee zavisno od toga koje dugme je kliknuo (OK/CANCEL). Druga varijanta ove metode prihvata jo jedan parametar - Intent - koji se u ovom sluaju ne koristi za startovanje aktivnosti ve samo za smetanje podataka pomou metode putExtra.
Intent povratniPodaci = new Intent(); povratniPodaci.putExtra("POVRATNI", 12345678); setResult(RESULT_OK, povratniPodaci);

Na kraju, da bi aktivnost-pokreta preuzela ove podatke, ona mora da reaguje kada se pokrenuta aktivnost zavri. Ovo se postie implementiranjem metode onActivityResult. Ova metoda po zavretku pokrenute aktivnosti dobija kod

93

Razvoj aplikacija za operativni sistem Android aktivnosti (u naem primeru 1), result code (u naem primeru smo ga podesili na RESULT_OK) i Intent objekat sa podacima.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 1) { if(resultCode == RESULT_OK) { int dobijeniPodatak = data.getExtras().getInt("POVRATNI"); unos.setText(Integer.toString(dobijeniPodatak)); } } super.onActivityResult(requestCode, resultCode, data); }

U ovoj metodi proveravamo da li je kod aktivnosti koja se zavrila 1 (ili neki drugi, ako startujemo vie aktivnosti), eventualno proveravamo result code, i zatim vadimo podatke iz dobijenog Intent objekta pomou metode getExtras().

6.4.Implicitni Inent-ovi
Kao to je pomenuto ranije, implicitni intentovi ne specificiraju koja aktivnost treba da se pokrene, ve to obavlja Android sistem na osnovu akcije i podataka u intentu. Najjednostavniji primer implicitnog Intent-a bi bio Intent koji sadri samo akciju:
Intent namera = new Intent(Intent.ACTION_VIEW); startActivity(namera);

Ovakav, neodreen Intent potencijalno moe imati vei broj aktivnosti sposobnih da ga prihvate, pa e sistem u listi prikazati sve odgovarajue aktivnosti.

94

Razvoj aplikacija za operativni sistem Android

Ovako je mogue startovati i bilo koju standardnu aktivnost androida. U primeru e biti prikazano startovanje aktivnosti za prikaz i izbor kontakta. Prvo treba dodati uses-permission stavku u AndroidManifest kojom govorimo sistemu da e naa aplikacija zahtevati pristup kontaktima:
<uses-permission android:name="android.permission.READ_CONTACTS"/>

Zatim u neki od listenera, npr. u sluaju klika na neko dugme, dodajemo kod koji poziva prikaz kontakata (poto nastavljamo na prethodni primer, koristimo drugi kod za startovanu aktivnost - 2):
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, 2);

Intent u ovom primeru izraava nau nameru da izaberemo kontakt. Klasa Intent sadri veliki broj konstanti za predefinisane akcije, a mi koristimo Intent.ACTION_PICK za akciju izbora. Ono to elimo da izaberemo je kontakt, i to specificiramo drugim parametrom - konstantom. Kada elimo da koristimo mogunosti Android sistema, kao to je listanje kontakata, moramo prvo da se informiemo sa kakvim vrstama podataka emo raditi; u ovom sluaju konstante koje definiu vrste podataka (kontakte i informacije o njima) se nalaze u okviru klase ContactsContract. Aktivnost startujemo metodom startActivityForResult poto emo na kraju dobiti podatak koji kontakt je izabran od strane korisnika. Shodno tome, u metodu onActivityResult dodajemo:

95

Razvoj aplikacija za operativni sistem Android


if(requestCode == 2) { Uri podaci = data.getData(); Cursor c = managedQuery(podaci, null, null, null, null); if (c.moveToFirst()) { String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); labela1.setText(name); } }

Kada smo razmenjivali podatke meu svojim aktivnostima, direktno smo smetali i podatke u Intent pomou putExtra i vadili ih pomou getInt/String/itd. Postoji i drugi, neto sloeniji nain za razmenu podataka koji se esto koristi u samom Android sistemu gde se umesto podataka prosleuju njihove adrese u obliku URI-ja. Ovaj nain rada sa podacima e biti objanjen u nekom od narednih poglavlja; ovde je samo bitno primetiti da se umeto getExtras().get* metoda koristi getData() metoda koja vraa URI.

96

Razvoj aplikacija za operativni sistem Android

7. Rad sa obavetenjima Notifications


Aplikacije imaju potrebu da komuniciraju sa korisnikom i kada za to ne postoji zahtev, tj kada aplikacije nije pokrenuta, ve radi u pozadini. Upozorenje korisnicima moe da se alje u vidu teksta, zvuka, vibracija, treprenje svetla itd. Andoird podrava rad sa obavetenjima ili popularno reeno notifikacijama. Aplikacije koriste notifikacije kako bi omoguile korisniku to bolje zadovoljstvo i iskustvo sa aplikacijom. Primer: E-mail aplikacija moe da obavesti korisnika da je stigla nova poruka; Aplikacije za vremensku prognozu, mogu da obaveste korisnika o promenama vremena; Aplikacije za berzu, mogu da obaveste korisnika ako je nastala neka promena cena nekih akcija; Itd. Korisnici znaju da cene ova obavetenja, jer dolaze do potrebnih informacija bez da pokrenu aplikaciju. Meutim, postoji granica izmeu dobrog obavetajnog sistema i onog koji preteruje sa notifikacijama, ne treba korisnika stalno uznemiravati. Svako obavetenje treba da bude uraeno tako da na korisnika deluje samo pozitivno. Android platforma nudi nekoliko naina kako se mogu obavetavati korisnici. Obavetenje se esto prikazuje u statusnoj liniji u gornjem delu ekrana. Obavetenje moe da podrazumeva: Tekstualne informacije Grafika Zvuk Vibracija ureaja Kontrola nad svetlosnim indikatorom Napomena: prilikom rada sa notifikacijama bitno je da se zna da ne podravaju svi android ureaji npr rad sa vibracijom ili sfetlosnim efektima telefona.

7.1.Obavetenja na statusnoj liniji


Standardna lokacija za prikaz obavetenja na andorid ureajima jeste statusna linija koja se nalazi na vrhu ekrana. Statusna linija prikazuje infomracije kao to su datum i vreme. Takoe se na toj statusnoj liniji prikazuje i obavetenje kada je stigala nova SMS poruka. Programeru je bitno da zna, kada eli svoju aplikaciju da obogati sa obavetenjima, koje su bitne komponetne jednog obavetenja: Ikona pojavljuje se na statusnoj liniji Tekst pojavljuje se na statusnoj liniji 97

Razvoj aplikacija za operativni sistem Android Naslov obavetenja pojavljuje se u punom prikazu obavetenja Telo ili sadraj obavetenja - pojavljuje se u punom prikazu obavetenja Namera, odnosno detaljnije aktivira se ako korisnik klikne da vidi kompleno obavetenje

7.2.Korienje NotificationManager-a
Sva obavetenja se kreiraju pomou NotificationManager-a. NotificationManager je sistem usluga koji mora biti ukljuen. U nastavku sledi kod kako se dobija aktinvi NotificationManager objekat koristei metodu getSystemService(). NotificationManager notifikacija = getSystemService(Context.NOTIFICATION_SERVICE); (NotificationManager)

Pomenuti objekat kontrolie ta e se prikazati ako je potrebno korisniku prikazati neko novo obavetenje. Sadri tekst koji se prikazuje na statusnoj liniji, nekoliko redova teksta koji se prikazuju na proirenoj statusnoj liniji, ikona koja se prikazuje na oba mesta kao i vreme kada se poslednji dogaaj desio.

7.3.Kreiranje jednostavne tekst notifikacije sa ikonom


Sledee obavetenje bie prikazano na statusnoj liniji na vrhu ekrana, prilikom kreiranja koristie se NotificationManager objekat. Notification notify = new Notification( R.drawable.android_32, "Pozdrav svima!", System.currentTimeMillis()); Nakon toga moemo izvrite neka podeavanja obavetenja, kao to je ikona, naslov, kao i akcija ta se deava nakon toga: notify.icon = R.drawable.android_32; notify.tickerText = "Pozdrav svima!"; notify.when = System.currentTimeMillis(); Pre nego to se pozove metoda notify() potrebno je da se podese jo neke informacije. Treba da se pozove metoda setLastEventInfo() koja setuje informacije o psolednjem dogaaju: Intent nameraObavestenje = new Intent (SimpleNotificationsActivity.this, SimpleNotificationsActivity.class); PendingIntent nameraPovratnoObavestenje = PendingIntent.getActivity (SimpleNotificationsActivity.this, 0, nameraObavestenje, 0); notify.setLatestEventInfo(SimpleNotificationsActivity.this, "Dobar dan!", "Ovo je jos samo jedan tekst.", nameraPovratnoObavestenje);

98

Razvoj aplikacija za operativni sistem Android

7.4.Obavetenje u vidu vibriranja telefona


Vibracija predstavlja odlian nain da obavesti korisnika kada se korisnik nalazi u nekom bunom okruenju gde svetlosni i tekstualni efekti nisu od pomoi. Bitna stavka za programere, pre nego to aplikacije moe da koriste obavetenja u vidu vibracije, mora se to dozvoliti izreito u XML manifest fajlu AndroidManifest.xml: <uses-permission android:name="android.permission.VIBRATE" /> Bez ove dozvole vibracija na aplikaciji nee raditi. Sledei kod predstavlja jednostavno podeavanje kako se pokree vibracija kada treba da se poalje neko obavetenje korisniku ako se desio neki dogaaj: notify.vibrate = new long[] {0, 200, 200, 600, 600}; Navedeni kod je podeen da vibracija vibrira 200 milisekundi, a potom prestaje na 200 milisekundi, nakon toga vibrira 600 milisekundi a zatim prestaje. Moe se podesite da vibracija ne prestaje sve dok korisnik ne obrie obavetenje. notify.flags |= Notification.FLAG_INSISTENT; Vibracija moe da koristi razliite obrasce za vibriranje, sve zavisno od potrebe korisnika.

99

Razvoj aplikacija za operativni sistem Android

8. Rad sa servisima Services


Vana kompenenta android aplikacije koja u mnogome moe da pobolja aplikaciju jeste Services, odnosno servisi. Android servis se moe koristi da obavlja funkcije u pozadini a da za to nije potrebno uputstvo ili pak da dostavi infomracije nekoj drugoj aplikaciji. Ovaj servis u okviru Android Software Development Kit (SDK) moe da znai dve stvari. Prvo, servis moe da znai proces u pozadini, koji obavlja neke korisne informacije u redovnim intervalima. Drugo, servis moe biti interfejs za udaljeni objekat koji se zove u okviru vae aplikacije. U oba sluaja servis objakat proiruje klasu Service u okviru Andoird SDK, i to moe da bude samostalna komponenta ili deo aplikacije sa kompletnim korisnikim interfejsom. Ovaj servis Andoird platforme moe se koristit u sledeim situacijama: Kada aplikacija obavlja neke duge i zahtevne procese, a da ne postoji potreba da korisnik pokrene pomenuti proces, Aplikacija mora da obavlja neke rutinske operacije ili operacije u odreenim redovnim intervalima, Itd.

8.1.ivotni ciklus Servisa


Pre nego to se krene u detaljno objanjenje kako kreirati servis, mora se prvo razumeti na koji nain servis ima interakciju sa Andorid operativnim sistemom. Prilikom kreiranja servisa, bitno je da se zna, da se pomenuti servis mora prvo regitrovati u manifest fajlu koji aplikacija koristi u okviru taga <service>. U okviru implementacije servisa moraju se definisati dozvole potrebne za pokretanje, zaustavljanje i povezivanje na servis, kao i neophodni poziv servisa. Nakon to je servis implementaran, servis se moe koristiti korienjem metode Context.startService(). Ako je usluga servisa ve pokrenuta, kasnijem korienjem metode startService(), usluga se ne pokree ponovo. Servis funkcionie sve dok se ne pozove metoda Context.stopService() ili servis zavri sa radom i sam pozove funkciju za prestanak rada stopSelf(). Da bi neke aplikacije koje ele da koriste servis, moraju da pozovu funkciju Context.bindService() za uspostavljanje veze sa servisom. Ako servis nije pokrenut, on se pokree u tom trenutku, ako je servis ve pokrenut, alikikacije mogu da alju zahteve za izvravanje odreenih usluga ako za to imaju dozvolu.

100

Razvoj aplikacija za operativni sistem Android

8.2.Kreiranje servisa
Kreiranje servisa i njegov rad e biti demostrirano na primeru servisa koji reaguje na pomeranje korisnika, tj. promenu njegovih koordinata (latitude i longitude). Prvo emo napraviti obinu android aplikaciju sa jednom aktivnou koju emo nazvati ServisKontroler. Ova aktivnost e se koristiti da pokrene/ugasi na servis, pa emo u skladu sa time aktivnosti dodati dva dugmeta u lejaut fajl a zatim pokupiti reference na njih u kodu. Lejaut aktivnosti (main.xml): <?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" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dugmeStart" android:text="START"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dugmeStop" android:text="STOP"/> </LinearLayout> Kod aktivnosti (ServisKontroler.java): public class ServisKontroler extends Activity { Button dugmeStart, dugmeStop; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dugmeStart = (Button)findViewById(R.id.dugmeStart); dugmeStop = (Button)findViewById(R.id.dugmeStop); } Ovim dugmiima emo kasnije dodati listenere za pokretanje i zaustavljanje aktivnosti. Da bi kreirali novi servis, treba da nasledimo klasu Service i implementiramo njene metode onCreate, onStart/onStartCommand i onDestroy. onStartCommand je novija verzija metode onStart koju treba izbegavati osim ako elimo da nam aplikacija bude kompatibilna i sa starijim verzijama Android sistema. Za poetak emo napraviti samo kostur servisa. Kod servisa (MojServis.java): public class MojServis extends Service { 101

Razvoj aplikacija za operativni sistem Android private LocationManager lokacija = null; private NotificationManager notifikator = null; @Override public void onCreate() { super.onCreate(); } @Override public void onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, startId); } @Override public void onDestroy() { super.onDestroy(); } } Ove tri metode su nam bitne - onCreate se poziva po kreiranju servisa, onStartCommand po pozivu startService() iz neke aktivnosti, a onDestroy kada servis zavri pruanje usluge. Potrebno je da u manifestu naglasimo da e naa aplikacija koristiti servis (MojServis), a takoe i da e nam trebati dozvola za pristupanje lokaciji korisnika: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application> ... <service android:name="MojServis" ></service> ... </application> Da bismo povezali aktivnost i servis, tj. da bismo startovali/gasili aktivnost iz servisa, treba samo da pozovemo startService ili stopService metode, to emo uiniti kada korisnik klikne na odgovajue dugme: dugmeStart.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent namera = new Intent(ServisKontroler.this, MojServis.class); startService(namera); } }); dugmeStop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent namera = new Intent(ServisKontroler.this, MojServis.class); 102

Razvoj aplikacija za operativni sistem Android stopService(namera); } }); Sada emo prei na pisanje konkretnog koda u servisu. Prvo emo implementiramo metodu onCreate: public void onCreate() { super.onCreate(); lokacija = (LocationManager) getSystemService(Context.LOCATION_SERVICE); notifikator = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } Pri kreiranju servisa emo ugrabiti reference na LocationManager-a koji e nam kasnije potreban za odreivanje lokacije i NotificationManager-a kojeg emo koristiti da prikaemo notifikacije kada se korisnik pomeri. Ovde je bitno naglasiti da prilikom razvoja servisa, obavezno se mora testirati aplikacija da li je kompatabilna sa raznim verzijama Andoird SDK platforme. Da bi sve bilo kompatabilno aplikacija mora biti uraena u skladu sa SDK 5 platforme. Ponaanje servisa definie se u metodama onStart() i/ili onStartCommand(). Dalje emo implementirati metodu onStartCommand koja startovanju servisa: @Override public int onStartCommand(Intent intent, int flags, int startId ) { Criteria kriterijum = new Criteria(); kriterijum.setAccuracy(Criteria.NO_REQUIREMENT); kriterijum.setPowerRequirement(Criteria.POWER_LOW); se poziva po

// dobili provajder lokacije koji najvie odgovara traenim kriterijumima String best = lokacija.getBestProvider(kriterijum, true); // zahtevamo periodino informisanje o promeni lokacije lokacija.requestLocationUpdates(best, 60000, 5, this); // aljemo notifikaciju da je zapoeto praenje lokacije Notification obavestenje = new Notification(android.R.drawable.stat_notify_more, "GPS pracenje", System.currentTimeMillis()); obavestenje.flags |= Notification.FLAG_AUTO_CANCEL; Intent toLaunch = new Intent(getApplicationContext(), ServisKontroler.class); toLaunch.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0, toLaunch, 0); obavestenje.setLatestEventInfo(getApplicationContext(), "GPS pracenje", "Pracenje je zapocelo ", intentBack); notifikacije.notify(1, obavestenje); } 103 // 1 - ID notifikacije

Razvoj aplikacija za operativni sistem Android

Prvo kreiramo objekat klase Criteria. Poto jedan telefon moe imati vie naina da odredi svoju lokaciju (pomou mobilne mree, pomou GPS-a, pomou interneta itd.), koristimo objekte ove klase da specificiramo kakav mehanizam za odreivanje lokacije bi nam najvie odgovarao. U ovom sluaju specificiramo da nam treba mehanizam sa malim utrokom baterije, a bez ikakvih posebnih zahteva po pitanju preciznosti. Poto smo to podesili u Criteria objektu, predajemo objekat LocationManager-ovoj metodi getBestProvider a kao rezultat dobijamo ime mehanizma koji najbolje odgovara onome to smo traili. Da bi bili informisani o promeni lokacije, pozivamo metodu requestLocationUpdates() LocationManager-a i kao parametre joj dajemo ime eljenog provajdera, minimalno vreme izmeu dva obavetenja, minimalnu razdaljenost koja treba da bude preena da bi bila registrovana i referencu na klasu koja e biti periodino pozivana. Poto smo tu prosledili this kao parametar, moraemo kasnije da implementiramo LocationListener interfejs u naem servisu i njegovu metodu onLocationChanged. Preostale linije koda se odnose na sastavljanje i slanje notifikacije, to je pokazano u ranijim poglavljima. Ova notifikacija treba da javi korisniku da je snimanje zapoeto. Dalje emo pogledati metodu onLocationChanged koju treba implementirati: @Override public void onLocationChanged(Location location) { Notification obavestenje Notification(android.R.drawable.stat_notify_more, "GPS pracenje", System.currentTimeMillis()); obavestenje.flags |= Notification.FLAG_AUTO_CANCEL; Intent toLaunch = new Intent(getApplicationContext(), ServisKontroler.class); toLaunch.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0, toLaunch, 0); // Saljemo notifikaciju sa vrednostima latitude i longitude obavestenje.setLatestEventInfo(getApplicationContext(), "GPS "Lokacija: " + location.getLatitude() + "," + location.getLongitude(), intentBack); notifikacije.notify(1, obavestenje); } U ovoj metodi ponavljamo proceduru sa slanjem notifikacije, jedina je razlika to sada u tekst naih notifikacija stavljamo vrednosti latitude i longitude koje dobijamo kao parametar metode onLocationChanged u okviru objekta Location. Nakon korienja servisa potrebno je jo oistiti servis nakon korienja. U nastavku sledi primer kako se to radi: pracenje",

new

104

Razvoj aplikacija za operativni sistem Android @Override public void onDestroy() { // odjavljujemo se od prijema obavestenja o promeni lokacije if (lokacija != null) { lokacija.removeUpdates(this); lokacija = null; } // saljemo notifikaciju da je servis ugasen Notification obavestenje = new Notification(android.R.drawable.stat_notify_more, "GPS pracenje", System.currentTimeMillis()); obavestenje.flags |= Notification.FLAG_AUTO_CANCEL; Intent toLaunch = new Intent(getApplicationContext(), ServisKontroler.class); PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0, toLaunch, 0); obavestenje.setLatestEventInfo(getApplicationContext(), "GPS pracenje", "Pracenje je stopirano!", intentBack); notifikacije.notify(1, obavestenje); super.onDestroy(); } Na kraju odjavljujemo servis od primanja obavetenja o promeni lokacije i aljemo notifikaciju o tome.

8.3.Implementacija udaljenog interfejsa


U veini sluajeva postoji potreba da se ima vea kontrola nad sistemom i servisima, koji servis je pokrenut ili stopiran. Andoird SDK platforma sadri korisne alate i formate za kreiranje korisnikog interfejsa za ove potrebe. Da bi se daljinski interfejs definisao, potrebno je da se interfejs objavi u AIDL fajlu, potom da se implmentira interfejs, a zatim da se vrati instanca interfejsa kada se poziva onBind() metoda. U nastavku sledi kod koji je smeten u AIDL fajlu za interfejs: interface IRemoteInterface { Location getLastLocation(); } Kada se koristi Eclipse za razvoj, AIDL fajl se veoma lako i jednostavno definie. U nastavku sledi kod koji definie interfejs: private final IRemoteInterface.Stub mRemoteInterfaceBinder = new IRemoteInterface.Stub() { public Location getLastLocation() { 105

Razvoj aplikacija za operativni sistem Android Log.v(interface, getLastLocation() je pozvana); return lastLocation; } }; @Override public IBinder onBind(Intent intent) { //svi servisi imaju sam jedan interfjs, konkretno u ovom slucaju tako da nije potrebno nikakvo //dodatno navodjenje i proveravanje, vec samo vratimo instancu return mRemoteInterfaceBinder; } U okviru AndroidManifest.xml fajlu mora se dodati sledei kod kako bi se omoguio rad sa interfejsima: <action android:name =com.androidbook.services.IRemoteInterface /> Nakon podeavanja u manifest fajlu servis se moe koristiti, potrebno je jo samo definisati glavne metode za konekciju i diskonekcija sa servisa. public void onServiceConnected(ComponentName name, IBinder service) { mRemoteInterface = IRemoteInterface.Stub.asInterface(service); Log.v(ServiceControl, Interfejs se povezao.); } public void onServiceDisconnected(ComponentName name) { mRemoteInterface = null; Log.v(ServiceControl, Udaljeni interfejs se diskonektovao!); } Nakon poziva metode onServiceConnected() interfjs je spreman za korienje i potom se moe koristiti. Kod za korienje izgleda ovako: Location lokacija = mRemoteInterface.getLastLocation();

106

Razvoj aplikacija za operativni sistem Android

9. Skladitenje podataka
Android nudi nekoliko opcija za skladitenje podataka. Koji nain e se koristiti zavisi od specifinih potreba, da li su podaci dostupni drugim aplikacijama ili su privatni, kao i koliko prostora zauzimaju ti podaci. Andoird nudi sledee opcije za skladitenje podataka: Zajednika podeavanja uvanje primitivnih podataka u obliku kljuvrednost Inerne memorije uvanje podataka na memoriji ureaja Eksterne memorije spoljne deljenje memorije SQLite baze podataka lokalno uvanje podataka u privatnoj bazi podataka Network Connection uvanje podataka na nekom od web servera

Andoird nudi mogunost deljenja i privatnih podataka sa drugim aplikacijama uz korienje preko provajdera sadraja. Vie o ovome moete pronai na adresi http://developer.android.com/guide/topics/providers/content-providers.html

9.1.Zajednika podeavanja
Klasa SharedPreferences daje opti okvir ua uvanje primitivnih tipova podataka koji su upareni klju-vrednost. Ova klasa se moe koristiti za uvanje podataka koji su tipa: boolean, floats, int, long, i string. Ovi podaci se pre svega koristi i proimaju kroz sesije. Da bi kreirali obejakt SharedPreferences koristi se jedan od dole dva navedena naina: getSharedPreferences() ova opcija se koristi ako su potrebne vie preferencija datoteka koji su odreenim prvim parametrom koji predstavlja identifikator getPreferences() opcija se koristi ako je potrebno dobiti samo jednu preferenciju datoteke za eljenu aktivnost

U nastavku sledi primer koda kako se uvaju podaci na ovaj nain, konkertno prikazan je primer kako se uva vrednost koja je uneta prilikom izraunavanja kod kalkulatora:

107

Razvoj aplikacija za operativni sistem Android

public class Kalkulator extends Activity { public static final String PREFS_NAME = "mojPref"; @Override protected void onCreate(Bundle stanje){ super.onCreate(stanje); ... // vrati preference SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // svi objekti su sa android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // potvrdimo promene editor.commit(); } }

108

Razvoj aplikacija za operativni sistem Android

9.2.Interne memorije
Interne memorije omoguavaju da se skladite podaci direktno na memoriju ureaja. Podrazumevano je da podaci koji se koriste na memoriji ureaju su privatni i ostale aplikacije tim podacima ne mogu pristupiti. Kada se apliakcija ukloni sa ureaja, nestaju i podaci. Da bi upisali podatke na internoj memoriji koriste se sledee metode: openFileOutput() write() close()

String NAZIVFAJLA = "moj_prvi_fajl"; String string = "Dobar dan svima!"; FileOutputStream fos = openFileOutput(NAZIVFAJLA, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); Argument MODE_PRIVATE kreirae novi fajl ili pak zameniti postojeu datoteku novim ako je isto ime. Ostali modovi koji su jo dostupni prilokom upisivanja u fajl su: MODE_APPEND, MODE_WORLD_READABLE, i MODE_WORLD_WRITEABLE. Da bi se proitali podaci sa interne memorije potrebno je koristiti sledee metode: openFileInput() ovde se definie ime datoteke koja se ita read() ita bajtove iz datoteke close() zatvara tok za itanje.

Metode koje se jo koristi prilikom itanja i pisanja u datoteku: getFilesDir() vraa absolutnu putanju direktorijuma gde se datoteka uva u memoriji getDir() kreira ili otvara ve postojei direktorijum u okviru unutranjeg prostora deleteFile() brie datoteke koje se uvaju na internoj memoriji fileList() vraa listu datoteka koje su sauvane na memoriji

109

Razvoj aplikacija za operativni sistem Android

9.3.Skladitenje podataka na spoljanoj memoriji


Svaki android ureaj podrava deljeno eksterno skladite, koje se moe koristiti za uvanje podataka. Ovde spadaju prenosivi mediji za skladitenje podataka, kao to su CD kartice. Datoteke koje se uvaju na ovakvom ureaju su svetski kompatabilni i itljivi, to dalje govori da se prilikom povezivnja na USB podaci mogu preneti na neki drugi ureaj. Pre nego to krene da se radi bilo ta sa spoljanom memorijom, potrebno je predhodno da se proveri da li je spoljani mediji dostupan uz pomo metode getExternalStorageState(). Dostupnost medija se proverava na sledei nain: boolean mSpoljnaMemorijaAvailable = false; boolean mSpoljnaMemorijaWriteable = false; String stanje = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(stanje)) { // sada se moze citati i upisivati na memoriju mSpoljnaMemorijaAvailable = mSpoljnaMemorijaWriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(stanje)) { // u ovom slucaju moguce je samo citati podatke mSpoljnaMemorijaAvailable = true; mSpoljnaMemorijaWriteable = false; } else { // nastala je neka greska, mozda uredjaj nije dobro povezan ili nesto slicno mSpoljnaMemorijaAvailable = mSpoljnaMemorijaWriteable = false; } Da bi se pristuplo datotekama na spoljanom skladitu ako se koristi API 8 ili noviji, koristi se metoda getExternalFilesDir(). Ova metoda prihvata parametar koji odreuje tip poddirektorijuma koji se eli otvoriti, kao to je DIRECTORY_MUSIC ili DIRECTORY_RINGTONES. Ako direktorijum ne postoji, ova metoda e automatski kreirati novi. Ako se koristi API 7 ili stariji, koristi se metoda getExternalStorageDirectory(), da bi se otvorila datoteka koja predstavlja root ekterne memorije. U tom sluaju podaci se uvaju na sledeoj putanji: /Android/data/<package_name>/files/ Ako se eli sauvati neka datoteka, koja se nee obrisati sa deintaliranje aplikacije, potrebno je tu datoteku sauvati na javnom delu skladita. Ovi direktorijumi su postavljeni u root-u direktorijumu eksternog skladita Music/, Pictures/, Ringtones/, i drugi.

110

Razvoj aplikacija za operativni sistem Android

9.4.Rad sa bazom podataka SQLite


Kada se javi potreba za skladitenje podataka, Andoird platforma podrava rad sa SQLite bazom, koja spada u relacione baze podataka, to je sama po sebi veoma pogodna i idealna za skladitenje podataka na Android platformi. Koristei SQLite bazu podataka, koja je privatna u smislu pristupa podacima i podaci iz nje se ne mogu na ovaj nain deliti sa drugim aplikacijama. Za deljenje podataka potreban je drugi mehanizam koji e kasnije biti objanjen. Andoird SDK sadri veliki broj korisnih klasa sa kojima se moe upravljati SQLite bazom podataka. Mnoge od ovih klasa se nalaze u android.database.sqlit paketu. U okviru ovih klasa mogu se nai alati za upravljanje bazom podataka, klase za kreiranje i izvravanje sql upita, kao i razne pomagae za ispravno kreirane sql upite. U okviru ovog paketa moete nai i veliki broj generiikih klasa koje slue za upravljanje podacima iz vie izvora podataka. 9.4.1.Kreiranje SQLite baze podataka U okviru Android sistema, baza podataka moe se kreirati na vie naina. Najjednostavniji nain da se kreira nova baza podataka je da se koristi openOrCreateDatabase() metoda: import android.database.sqlite.SQLiteDatabase; ... SQLiteDatabase mDatabase; mDatabase = openOrCreateDatabase( my_sqlite_database.db, SQLiteDatabase.CREATE_IF_NECESSARY,null); U ovom sluaju putanja baze podataka je sledea: /data/data/com.androidbook.SimpleDatabase/databases/my_sqlite_database.db Moe se pristupiti bazi podataka, korienjem sqlite3 interfejs komadne linije za navedenu putanju. Da bi se baza podataka mogla koristiti mora se ispravno konfigurisati: import java.util.Locale; ... mDatabase.setLocale(Locale.getDefault()); mDatabase.setLockingEnabled(true); mDatabase.setVersion(1); 9.4.2.Kreiranje tabela Kreiranja tabela je veoma jednostavno kao i formiranje i izvravanje sql upita. Izraz CREATE TABLE SQL slui za kreiranje nove tabele. U nastavku bie kreirana tabela tbl_autori koja e imati 3 polja, id autora, ime i prezime. CREATE TABLE tbl_autori ( id INTEGER PRIMARY KEY AUTOINCREMENT, 111

Razvoj aplikacija za operativni sistem Android ime TEXT, prezime TEXT); SQL upit moe se izvrii pozivanjem metode mDatabase.execSQL(SQL). Metoda execSQL() se moe koristiti za izvravanje bilo kog sql upita. Moe se koristiti za kreiranje, brisanje, auriranje tabela, pogleda itd. U nastavku sledi kod za kreiranje tabele tbl_knjige CREATE TABLE tbl_knjige ( id INTEGER PRIMARY KEY AUTOINCREMENT, naslov TEXT, datumdodavanja DATE, autorid INTEGER NOT NULL CONSTRAINT autorid REFERENCES tbl_autori(id) ON DELETE CASCADE); SQLite ne proverava skup ogranienja za spoljni klju, zato se moraju koristiti odreeni sql trigeri koji e to proveravati: private static final String CREATE_TRIGGER_ADD = CREATE TRIGGER fk_insert_knjige BEFORE INSERT ON tbl_knjige FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, insert on table \tbl_knjige\ violates foreign key constraint \fk_autorid\) WHERE (SELECT id FROM tbl_autori WHERE id = NEW.autorid) IS NULL; END;; Kada je definisan triger, onda je potrebno samo pozvati metodu execSQL() da se izvri sql upit: mDatabase.execSQL(CREATE_TRIGGER_ADD); Da bi se veza ojaala izmeu autora i knjige potrebno je jo definisati okidae, odnosno trigere za auriranje i brisanje iz tabele. 9.4.3.Unos, promena i brisanje podataka iz tabele Klasa SQLiteDatabase, ima u sebe ugraene metode za unos, promenu i brisanje podataka. Nazivi metoda su veoma jednostavni insert(), update(), i delete(). 9.4.4.Unos podataka insert() Za definisanje vrednosti koje se unose u tabelu koristi se klasa ContentValues koja uparuje imena kolona u tabeli za vrednostima koje se ele uneti. import android.content.ContentValues; ... ContentValues vrednosti = new ContentValues(); vrednosti.put(ime, Aleksandar); vrednosti.put(prezime, Nastevski); long noviAutorId = mDatabase.insert(tbl_autori, null, vrednosti);

112

Razvoj aplikacija za operativni sistem Android Metoda insert() vraa id unetog sloga u bazu, u ovom sluaju vraa id novog autora. 9.4.5.Promena podataka update() Podaci u bazi se mogu promeniti uz pomo update() metode. Ova metoda prihvata 4 parametara: Naziv tabele koja se aurira ContentValues objekat sa auriranim podacima Opciona WHERE naredba Niz argumenata za Where naredbu Trei i etvrti argumenti su opcioni, ne koriste se npr kada se ele promeniti svi rekordi u bazi. U nastavku sledi metoda koja menja naslov knjige za id knjige koji se prosledi: public void promenaNaslovaKnjige(Integer knjigaId, String noviNaslov) { ContentValues vrednosti = new ContentValues(); vrednosti.put(naslov, noviNaslov); mDatabase.update(tbl_knjige, vrednosti, id=?, new String[] { knjigaId.toString() }); } U gore navedenom promenili smo samo naslov, to je i dozvoljeno. Ako se eli promeniti vie polja u tabeli, potrebno je samo navesti dodatne podatke u ContentValues objektu. 9.4.6.Brisanje podataka delete() Zapis iz baze se moe ukloniti koristei delete() metodu. Metoda prihvata tri argumenta: Naziv tabele u kojoj se briu podaci WHERE klauzula koja je opciona, ako se ne koristi onda se briu svi podaci u tabeli Niz argumenata za WHERE klauzulu, gde je id niza zapravo naziv kolone u bazi, dok drugi paramatar je vrednost. Naredba kojom se briu svi slogovi iz baze izgleda ovako: mDatabase.delete(tbl_autori, null, null); Meutim u praksi je ei sluaj da briemo pojedinane slogove iz baze, za to se moraju koristiti identifikatori. U nastavku bie prikazan primer koji brie knjigu za prosleenu vrednost za id knjige. public void brisanjeKnjige(Integer knjigaId) { mDatabase.delete(tbl_knjige, id=?, new String[] { knjigaId.toString() }); } 9.4.7.Rad sa transakcijama

113

Razvoj aplikacija za operativni sistem Android esto postoji potreba da se izvravaju vei skup operacija zajedno, tj da se celokupan proces desi ispravno ili da se opte nita ne desi. U tom sluaju mogu se koristiti SQL transakcije, koje u sluaju greke mogu da ponite sve operacije i vrate na poetno stanje. U nastavku sledi osnovni prikaz transakcije: mDatabase.beginTransaction(); try { // unos novih rekorda, promena, brisanje mDatabase.setTransactionSuccessful(); } catch (Exception e) { // nastala je greska prilikom izvrsavanje transakcije, radi sta je u tom slucaju potrebno } finally { mDatabase.endTransaction(); } Transakcija uvek poinje naredbom mDatabase.beginTransaction(); a potom se koristi try/catch blok naredbi. Ako se transakcija izvrila uspeno onda se poziva metoda setTransactionSuccessful(), dok na kraju izvraavanja transakcije poziva se metoda endTransaction(). 9.4.8.Upiti SQLite baze podataka Baze podataka su odlini mehanizmi za skladitenje velikog broja podataka, ali korienje tih podataka predstavlja vanu komponentu, to se samu po sebi bazu ini monom. Android nudi veliki broj naina kako se mogu izvravati i formirati sql upiti. Kada se dobije rezultat izvravanja sql upita, podacima se pristupa pomou objekta klase Cursor koji je smeten u paketu android.database.Cursor. Cursor objekti su slini kao i pokazivai, uz pomo kojih se moe pristupiti rezultatima nakon izvravanja sql upita. Cursor objekat sadri korisne metode poput metode koja vraa ukupan broj rekorda, metoda koja vraa nazive kolona itd. Curser se pre svega koristi za jednostavnije sql upite, i bitno je naglasiti da nakon korienja, obavezno se Cursor mora zatvoriti naredbom close() kao to je to prikazano u kodu ispod: // jednostav upit: select * from tbl_knjige Cursor c = mDatabase.query(tbl_knjige,null,null,null,null,null,null); // ovde sada se moze nesto uraditi sa objektom c.close(); Prilikom korienja Cursor objekta mora se voditi rauna i o ivotnom ciklusu obejkta. Kada se apliakcija gasi ili puzira, kursor mora da se deaktivira pozivom metode deactivate(), dok kada se aplikacija ponovo pokree, kursor bi morao da se ozvei pozivanjem metode requery(). Kada kursor vie nije potreban za rad, u tom sluaju potrebno je osloboditi resurse pozivajui metodu close(). Programer prilikom rada moe koristiti sledee metode za upravljanje ivotnim ciklusom Cursora onPause(), onResume(), i onDestroy(). Meutim, postoji mogunost da pokrenete i menadera koji e automatski voditi rauna o ivotnom ciklusu Cursora, koristei aktivnost metodu startManagingCursor() koja u ovom sluaju kontrolie sve sama. U svakom trenutku, postoji mogunost da se 114

Razvoj aplikacija za operativni sistem Android ree na runo upravljanje stopManagingCursor(). ivotnog ciklusa Cursora, pozivajui metodu

Cursor ima ugraene u sebi i metode koje omoguavaju za interativno prolaenje kroz sve rekorde koji su dobijeni izvravanje upita nad bazom. U tom konetkstu moe se koristiti funkcije kako bi se kretali kroz listu, da se postavipokaziva na prvi rekord, da se pomeri pokaziva na sledei rekord i da se pita da li ima neto posle poslednjeg rekorda, moveToFirst(), moveToNext(), i isAfterLast(). Na sledeem primeru bie pokazano kako se pristupama podacima iz Cursor objekta, gde e se uz pomo ugraenih metoda doi do informacije o tekuem kursoru, sledeem, nazivu kolone, broj kolena itd.

115

Razvoj aplikacija za operativni sistem Android

public void informacijeOCursoru(Cursor c) { Log.i(DEBUG_TAG, *** Cursor start *** + Rezultat: + c.getCount() + Kolone: + c.getColumnCount()); // stampanje imena kolona String zaglavljeReda = || ; for (int i = 0; i < c.getColumnCount(); i++) { zaglavljeReda = zaglavljeReda.concat(c.getColumnName(i) + || ); } Log.i(DEBUG_TAG, Kolone + zaglavljeReda); // stampanje rekorda c.moveToFirst(); //postavljamo pokazivac na prvi rekord while (c.isAfterLast() == false) { String rezultatReda = || ; for (int i = 0; i < c.getColumnCount(); i++) { rezultatReda = rezultatReda.concat(c.getString(i) + || ); } Log.i(DEBUG_TAG, Red + c.getPosition() + : + rezultatReda); c.moveToNext();//pomeramo pokazivac na sledeci rekod } Log.i(DEBUG_TAG, *** Cursor End ***); } 9.4.9.Brisanje tabela i ostalih SQLite objekata Brisanje tabela i ostalih SQLite obejkata radi se na isti nain kao i njihove kreiranje. Potrebno je formirati odgovarajue SQL upite i izvriti ih. U nastavku sledi prikaz koda za brisanje tabele tbl_knjige, kao i brisanje tabele tbl_autori, na kraju briemo i triger. mDatabase.execSQL(DROP TABLE tbl_knjige;); mDatabase.execSQL(DROP TABLE tbl_autori;); mDatabase.execSQL(DROP TRIGGER IF EXISTS fk_ubaci_knjigu;); Bitno je napomenuti, da kada baza podataka se ne koristi, potrebno je zatvoriti konekciju ka njoj. To se radi pozivanjem metode close(). mDatabase.close(); Da bi izbrisali kompletnu bazu podataka, najbolje je koristiti metodu deleteDatabase(), ipak treba voditi rauna o korienju ove metode jer ona brie kompletne podatke iz baze podataka koja je navedena. deleteDatabase(moja?prva_sqlite_baza.db);

116

Razvoj aplikacija za operativni sistem Android

10. Internet
Android ureaji obino imaju vie naina za uspostavljanje konekcije sa internetom, pa se i mnoge aplikacije oslanjaju na tu mogunost ili su kompletno izgraene oko nje. Programerima Android aplikacija se na raspolaganju nalazi nekoliko alata: 1. Klasnine Java biblioteke za rad sa soketima i streamovima 2. Apache HTTP klijent 3. HttpURLConnection Rad sa soketima se u Androidu ni najmanje ne razlikuje od rada u klasinom Java okruenju pa nee detaljnije biti opisan ovde. Appache HTTP biblioteka je dosta obimna i kvalitetna i preporuuje se za upotrebu na starijim verzijama Androida. HttpURLConnection je jednostavniji za upotrebu i kontinualno se radi na njegovom poboljavanju pa je preporuka da se koristi u novijim verzijama. Da bi vaa aplikacija mogla da koristi internet, potrebno je prvo u manifestu dodati:
<uses-permission android:name="android.permission.INTERNET"/>

10.1.

HttpURLConnection

Osnovni objekat za komunikaciju je ovde HttpURLConnection objekat. Da bi se kreirao ovaj objekat, prvo kreiramo objekat klase URL koji e predstavljati adresu koju elimo da otvorimo, a zatim nad njime pozivamo metodu openConnection.
URL url = new URL("http://www.fon.rs"); HttpURLConnection con = (HttpURLConnection) url.openConnection();

Poto smo dobavili konfigurisanje:

HttpURLConnection

objekat,

prelazimo

na

con.setConnectTimeout(1500); con.setReadTimeout(1000); con.setRequestMethod("GET"); con.setDoInput(true);

Podeavamo koliko milisekundi ekamo na uspostavljanje konekcije i prijem podataka iz uspostavljene konekcije. Biramo koja metoda e se koristiti (GET/POST) i da li e biti dozvoljeno slanje podataka u telu zahteva. Kada zavrimo sa time, moemo da zatraimo stranicu i preemo na itanje dobijenog odgovora:
con.connect(); BufferedReader reader = new InputStreamReader(con.getInputStream(), "UTF-8")); BufferedReader(new

117

Razvoj aplikacija za operativni sistem Android String odgovor = null; rezultat = ""; while((odgovor = reader.readLine())!=null) { rezultat += odgovor; } reader.close();

Pozivom metode getInputStream() nad HttpURLConnection objektom, dobijamo klasini InputStream koji moemo da konvertujemo u Reader kako bismo itali tekstualne znake umesto bajtova i obmotamo BufferedReaderom radi bolje efikasnosti. Dalje itamo red po red sadraj dobijenog streama dokle god postoji neto u njemu.

11. Korienje Google Maps-a


Budui da je Android u vlasnitvu Google-a, obezbeena je kvalitetna podrka za jednostavno korienje popularnog Google-ovog servisa Google Maps-a. U ovom odeljku emo pokazati kako je mogue jednostavno manipulisati mapom u okviru nae aktivnosti. Da bi koristili Google Maps, moramo jo pri kreiranju aplikacije u Eclipse-u da izaberemo jedan od Google API-ja umesto nekog od obinih API-ja koje smo koristili do sada. Razlog za ovo je to je kod za manipulaciju mapama vlasnitvo Google-a pa nije deo standardnih API-ja; za svaku standardnu verziju API-ja (npr. 2.2) postoji i odgovarajua verzija Google API-ja i moe se skinuti iz Android SDK Manager-a.

118

Razvoj aplikacija za operativni sistem Android

Pored ovoga, potrebno je da i ureaj na kom nameravamo da pokrenemo nau aplikaciju takoe koristi istu verziju Google API-ja:

119

Razvoj aplikacija za operativni sistem Android

U manifest aplikacije treba specificirati da e se koristiti odreivanje lokacije i internet, kao i da e se koristiti dodatna googleova biblioteka za mape:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > ... <uses-library android:name="com.google.android.maps" /> ... <application/>

Aktivnost u kojoj emo prikazivati mapu mora da nasleuje MapActivity umesto obine Activity klase; takoe, u layoutu mora da ima MapView:
<com.google.android.maps.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="kljuc" android:clickable="true" />

Da bismo mogli da koristimo Google Maps, moramo da dobavimo odgovarjui API key, u ovom sluaju klju koji e biti specifino namenjen emulatoru; za izdavanje aplikacije na marketu potrebno je nabaviti drugaiji klju. Prvo treba nai debug.keystore fajl koji se nalazi na nekoj od sledeih putanja: - Windows Vista: C:\Users\<user>\.android\debug.keystore Windows XP: C:\Documents and Settings\<user>\.android\debug.keystore - OS X and Linux: ~/.android/debug.keystore Zatim treba pronai keytool.exe fajl koji se obino nalazi na sledeoj putanji: C:\Program Files\Java\<JDK_version_number>\bin Korienjem ovog programa treba izgenerisati tzv. fingerprint koji e se koristiti za dobijanje apija. To se postie izvrenjem sledee naredbe u komandnoj liniji: keytool.exe -list -alias androiddebugkey -keystore "putanja_do_fajla\debug.keystore" -storepass android -keypass android Po izvrenju dobiete tzv. Fingerprint koji treba kopirati:
120

Razvoj aplikacija za operativni sistem Android

I uneti na lokaciji: http://code.google.com/android/maps-api-signup.html Ovime ete konano dobiti API key koji moete da ubacite u xml layoutu:
android:apiKey="dobijeni_kljuc"

Sada moemo da ubacimo kod za manipulaciju mapom u nau aktivnost:


private MapController kontroler; private MapView mapa; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapa = (MapView) findViewById(R.id.map); kontroler = mapa.getController(); mapa.setSatellite(true); mapa.setBuiltInZoomControls(true); final MyLocationOverlay overlay = new MyLocationOverlay(this, mapa); overlay.enableMyLocation(); //overlay.enableCompass(); // kompas ne radi u emulatoru overlay.runOnFirstFix(new Runnable() { public void run() { // Zoom in to current location kontroler.setZoom(8); kontroler.animateTo(overlay.getMyLocation()); } }); mapa.getOverlays().add(overlay); }

Prvo to radimo je da uzmemo reference na mapu i na MapController objekat pomou koga moemo da pomeramo i zumiramo mapu. Metodom setSatellite se prebacujemo u prikaz satelitskog snimka a metodom setBuiltInZoomControls prikazuje kontrole za zoom in/out. Ove kontrole se
121

Razvoj aplikacija za operativni sistem Android

mogu ugasiti (ako ne elimo da korisnik implementiramo neki metod zumiranja itd.)

koristi

zum, ako sami

Ako elimo da prikaemo korisnikovu lokaciju na mapi dobijenu preko GPSa ili nekog drugog provajdera lokacije, pravimo MyLocationOverlay objekat koji je zaduen za kontinualno iscrtavanje korisnikove tekue pozicije. Pozivom metode enableMyLocation nad tim objektom, ukljuujemo praenje korisnikove pozicije. Metoda runOnFirstFix nam dozvoljava da definiemo ta e se uraditi kada sistem dobije poziciju na kojoj se nalazimo; u ovom primeru podeavamo zum i pomeramo lokaciju mape. Na kraju, dodajemo MyLocationOverlay objekat meu Overlay-e koji e se iscrtavati nad mapom. Ako elimo da iscrtamo neke druge lokacije na mapi i da ih oznaimo nekim naim markerima, koristimo Overlay klasu. Na mapu moemo da dodamo vie overlay objekata, a svaki od njih moe da definie vie lokacija i markera kojima e biti obeleeni. MyLocationOverlay koji smo koristili za iscrtavanje pozicije korisnika je takoe usko specijalizovani Overlay.

Korienjem Overlay objekata moemo da nacrtamo bilo kakvu sliku iznad mape. Potrebno je definisati svoju klasu koja nasleuje Overlay objekat, a onda u njenoj metodi onDraw iscrtati neto. U ovom primeru uzimamo neku fiksnu taku i iscrtavamo ikonicu androida na toj poziciji.
private class MyOverlay extends com.google.android.maps.Overlay { @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); 122

Razvoj aplikacija za operativni sistem Android

if (!shadow) { Point point = new Point(); GeoPoint geoPoint = new GeoPoint(52334822, 4668907); mapView.getProjection().toPixels(geoPoint, point); Bitmap bmp R.drawable.ic_launcher); = BitmapFactory.decodeResource(getResources(),

int x = point.x - bmp.getWidth() / 2; int y = point.y - bmp.getHeight(); canvas.drawBitmap(bmp, x, y, null); } } }

12. AndroidMarket
12.1. Primeri uspenih aplikacija

12.1.1. PhotoWall - Live wallpaper Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details? id=com.larvalabs.photowall&feature=featured-apps 123

Razvoj aplikacija za operativni sistem Android Opis: PhotoWall - Live Wallpaper prikazuje vae slike na glavnom ekranu vaeg telefona. Osim toga pridodaje vizuelne efekte slikama, prikazuje ih kao pozadinu na ekranu, moe menjati slike po izboru. Potrebno je samo odabrati folder iz kog elite da se prikazuju slike, npr. folder sa SD kartice, ili slike sa Facebook-a(moe i tagovane), ili galerija kamere sa telefona. Postoji i podeavanje iskakanja slika(pop-out). Takoe mogu se kombinovati slike, tj. vie slika u jednom prikazu.

12.1.2. PdfReader Adresa na kojoj moete nai ovu aplikaciju: http://www.androidpit.com/en/android/market/apps/app/com.spk.PdfReader/PdfR eader Opis: PdfReader je aplikacija za itanje dokumenata za platforme Androida. Najvanije mogunosti apliakcije su: manevrisanje kroz strane dokumenta, go-to-page, zumiranje, pretraga po dokumentu, rotacija sadraja dokumenta, bookmarkovanje strana i dokumenata, i jo drugih. Screenshots:

124

Razvoj aplikacija za operativni sistem Android

125

Razvoj aplikacija za operativni sistem Android 12.1.3. File Manager Adresa na kojoj moete nai ovu aplikaciju: http://www.androidapps.com/tech/apps/384293-file-manager-joydao Opis: File Manager je aplikacija za Android kojom se manevrie fajlovima, tj. Slui za organizaciju podataka. Glavne funkcije ove aplikacije su: deljenje fajlova preko LAN mree, pretraga fajlova, otvaranje, preimenovanje, brisanje, kopiranje, prosleivanje, cut-ovanje fajlova, setovanje pozadina(wallpaper-a), pretraga i pregled foldera, sortiranje fajlova poi menu, tipu podataka, veliini fajla i po vremenu editovanja fajla. Pregle fajlova je omoguen u thumbnail i tile. Aplikacija ima direktan instalacioni paket. Takoe je mogue deliti (share) podatke, odnosno fajlove preko ove aplikacije. Screenshots:

12.1.4. Last.fm Adresa na kojoj moete nai ovu aplikaciju: http://www.androidapps.com/apps/297688-last-fm-last-fm-ltd Opis:

126

Razvoj aplikacija za operativni sistem Android Nauite neto o svojim omiljenim muzikim izvoaima, pronaite neki lokalni dogaaj (koncert, muziki dogaaj), delite vau muziku i va muziki ukus sa Last.fm. Sinhronizujte vae kontakte sa Last.fm prijateljima. Aplikacija koristi GPS da bi pronala i prikazala muzike dogaaje u vaoj blizini. Kontakti se mogu sinhronizovati sa omiljenim sadrajima na Last.fm, kao i prijatelji Last.fm-a sa vaim kontaktima. Logovanje se koristi da bi se izvrila provera greaka. Neki telefoni moraju da instaliraju media plejer koji podrava Last.fm.

Screenshots:

12.1.5. Super Sudoku Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details?id=com.kiwifruitmobile.sudoku&feature=topfree Opis: Super Sudoku je, kao to sama re kae, Sudoku aplikacija za Android. Ova aplikacija predstavlja kreaciju igre Sudoku, za koju veina poznaje pravila. Super Sudoku aplikacija je dovedena do perfekcije, i predstavlja intuitivni nacin zabave. 127

Razvoj aplikacija za operativni sistem Android Igra ima touch-screen tablu kojom je jednostavno upravljati i zanimljivo je igrati. Dodatak za automatsku anotaciju je koristan za poetnike, ako imate nebrojano neuspenih pokuaja reavanja. Pratite svoje igre preko zanimljivih statistika i unapredite mo zakljuivanja. Aplikacija ima 5 nivoa teine igranja sudokua. Ima opcije za ponitavanje (Undo/Redo), kao i opciju automatskog uvanja (Autosave). Pored standardnog sudokua, postoje i sudoku-x, Hyper-sudoku, Percent-sudoku, Color-sudoku i drugi. Screenshots:

12.1.6. Google Maps Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details? id=com.google.android.apps.maps&feature=top-free Opis: Da vie nikada ne nosite papirnu mapu sa sobom. Google Maps aplikacija otvara razliite mogunosti: navigaciju,, pronalaenje eljenih lokacija, lociranje prijatelja, i druge. Navigacija ima ugraenu glasovnu podrku GPS navigacionom sistemu. Hotpot je opcija kojom moete pronai eljene lokacije, oceniti zanimljivost tih lokacija, kao i dobiti preporuke koje lokacije su atraktivne. 128

Razvoj aplikacija za operativni sistem Android Latitude opcija vam pomae pri lociranju prijatelja i pronalaenju mesta. Kljune rei: Google Maps, Navigation, Places, Hotpot, Latitude, directions Screenshots:

12.1.7. YouTube Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details? id=com.google.android.youtube&feature=top-free Opis: YouTube aplikacija za Android omoguava korienje YouTube portal na Android platformama. Nudi novi korisniki interfejs, znaajno bolji i lepi od prethodnih. Mogunost pregleda strane dok se gleda klip (npr. citanje komentara dok ide video). Aplikacija ima nove kontrole plejera. Takoe ima mogunost rotiranja fullscreen moda gledanja klipova. Screenshots:

129

Razvoj aplikacija za operativni sistem Android

12.1.8. Facebook for Android Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details?id=com.facebook.katana&feature=top-free Opis: Ostanite uvek u kontaktu sa prijateljima. Facebook aplikacija za Android vam omoguava pristup vaem Facebook nalogu i manevrisanje podacima sa njega. Promena statusa na poetnoj strain, pregled novih vesti, pregled dolazeih dogaaja, pogled na prijateljev zid, upload slika, deljenje linkova, provera poruka, gledanje klipova i mnogo drugih mogunosti. Ukoliko to nije sve to oekujete o dove apliakcije, probajte neki od dodataka ispod screenshot-ova. Screenshots:

130

Razvoj aplikacija za operativni sistem Android

Dodaci: Facebook Extreme - https://market.android.com/details?id=com.drennan.fe Flow for Facebook id=uk.co.senab.blueNotifyFree Free https://market.android.com/details? https://market.android.com/details?

Facebook Friends Checker id=com.pomo.android.friendchecker

131

Razvoj aplikacija za operativni sistem Android Go!Chat for Facebook id=com.spartancoders.gtok (Ads) https://market.android.com/details?

12.1.9. Titanium Backup (root) for Android Adresa na kojoj moete nai ovu aplikaciju: http://www.matrixrewriter.com/android/ Opis: Aplikacija za upravljanje drugim aplikacijama na Androoidu. Opcije: brzo listanje aplikacija; sortiranje poo imenu, poslednjem backup-u i slino; filtriranje poi menu, tipu, statusu, labelama; backup/restore za regularne, zatiene i sistemske aplikacije; un-install opcije za aplikacije; alati za desktop; nedeljni ili dvo-nedeljni zakazani backup; vraa linkove za AndroidMarket kada vraa aplikacije; korisniki definisane liste aplikacija sa filtriranjem, bojenjem i zakazivanjem Jedina ekstremno mona alatka koja radi backup, restore i freeze aplikacija i podataka. Screenshots:

12.1.10. Walk and Text Adresa na kojoj moete nai ovu aplikaciju: http://www.appbrain.com/app/walk-and-text/com.incorporateapps.walktext 132

Razvoj aplikacija za operativni sistem Android Opis: Aplikacija koja slui za kucanje poruka u hodu. Moe se videti ta se deava ispred vas kada kucate poruku. Korisno npr. kada se sputate niz stepenice ili prelazite ulicu. ta sve nudi: QWERTY tastatura preko ekrana ostljivog na dodir(vidi na slikama ispod), dok hodate i kucate poruku kamera prikazuje ta je ispred vas u pozadini ekrana, mooe raditi u portret ili landscape modu, poruke se mogu pisati i slati direktno iz aplikacije, kontakti se mogu dodavati direktno iz aplikacije, promena pozadine i boje teksta kojim kucate, promena boje tastature na ekranu, stopiranje kamere dok kucate, ukoliko imate fiziku tastaturu moete i bez nje kucati, sakrivanje ikonica zbog boljeg pregleda, full-screen mod, flash-baterijska lampa, brojac karaktera u tekstualnoj poruci Notifikacije: Portrait mod je beta verzija, moe doi do problema na nekim verzijama Androida, aplikacija se koristi samo za slanje tekstualni poruka a ne SMS,Email, flashlight moda na nekim telefonima ne radi Screenshots:

133

Razvoj aplikacija za operativni sistem Android

12.1.11. Easy Reminder Adresa na kojoj moete nai ovu aplikaciju: http://labs.edges.it/en/reminder.php Opis: Koliko puta niste uli telefon ili niste videli poruku? Easy Reminder aplikacija slui za ba takve sluajeve. Mogunost periodinog ponavljanja alarma pri neodgoovorenim pozivima i neproitanim porukama. Lako upravljanje aplikacijom i podeavanje vremena na koliko se ponavlja alarm, kog tipa je alarm, biranje zvuka za alarm i slino. Screenshots:

12.1.12. Alarm Clock Xtreme free Adresa na kojoj moete nai ovu aplikaciju: http://alarmclockxtreme.blogspot.com/ Opis: Koristi se koa i svaki drugi alarm. Ali ima mnogo opcija: opcija za spreavanje sluajnog gaenje i iskljuivanja alarma, opcija automatskog iskljuivanja ukoliko idete u kolu ili na posao(koristei GPS). Mogunosti koje ukljuuje: neogranien broj alarma, ponavljanje alarma, muziki alarmi, nasumice izabrana pesma za alarm, lagano povienje tona alarma, spreavanje snooze(odlaganje) opcije pri tranju, treenju telefona, snooze 1-60 min, smanjenje snooze vremena pri svakom odlaganju alarma, auto-snooze, maksimalni broj odlaganja alarma, telefon je zakljuan pri alarmu Notifikacija: GPS je neophodan za neke opcije (npr. minimum speed to disable). Alarm nee raditi ako je prenese na SD karticu. Keywords: alarm clock, nap timer Screenshots:

134

Razvoj aplikacija za operativni sistem Android

12.1.13. Money Manager Adresa na kojoj moete nai ovu aplikaciju: http://www.mjsoft.com.au/action/moneymanager Opis: Money Manager je aplikacija koja slui za praenje potroenog novca. Nema nekih kompleksnih operacija, samo je potrebno da se svaki potroeni, ili svaki 135

Razvoj aplikacija za operativni sistem Android zaraeni novac navede i zabelei. Vrlo lako i brzo organizovanje prihoda i rashoda. Ubrzo saznate koliko novca troite kog dana, nedeljno, meseno, pa ak i godinje. Screenshots:

12.1.14. Touch Calendar Adresa na kojoj moete nai ovu aplikaciju: http://olilan.co.uk/touchcalendar Opis: Touch Calendar je novi naain pregleda kalendara na Android telefonima. Omoguava lak i jednostavan rad sa opcijama kalendara. Opcije: dvaput pritisnite za zumiranje, jednom za pregled dogaaja, pritisnite i drite na odreeni datum za kreiranje novog dogaaja, pritisnite na scroll za pregled datuma unapred i unazad, jump-to opcija za skakanje na specifian datum, opcija pretrage kalendara u meniju, setovanje fonta i velicine slova, kao i podrazumevajua vrednost zumiranja takoe u meniju pod Settings. Screenshots: 136

Razvoj aplikacija za operativni sistem Android

12.1.15. Rhythm Runner Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details?id=it.cloudspace.rhythmrunner Opis: Rhythm Runner je idealna za doging i tranje. Aplikacija poredi vae korake u minuti sa ritmom pesme i motivie trkaa. Koristi dinamiku plej-listu kojom uparuje muziku sa vaim ubrzanjem. Ubrzanje se meri preko GPS mapa, preene 137

Razvoj aplikacija za operativni sistem Android razdaljine i brzine, tj. vremena koje je potrebno da se ta razdaljina pree. Za one koji vole tranje, est problem je neprikkladna muzika pri tranju. Ova aplikacija reava taj problem. Koristei ugraen brzinomer, Google maps, poredi brinu kretanja sa brzinom i ritmom pesme.

138

Razvoj aplikacija za operativni sistem Android

139

Razvoj aplikacija za operativni sistem Android

12.1.16. Skype for Android Adresa na kojoj moete nai ovu aplikaciju: http://www.skype.com/intl/en-us/get-skype/on-your-mobile/download/skype-forandroid/ Opis: Skype aplikacija za Android omoguava sve ono za ta se inae koristi Skype. Za lako ostajanje u kontaktu sa prijateljima i porodicom na udaljenim lokacijama. Razgovaranje je potpuno besplatno. Primanje i slanje brzih poruka gde god da ste je jedna od pogodnosti. Mogunosti: Razgovor sa drugim Skype korisnikom, brze poruke(Instant Messages), pozivanje mobilnih i fiksnih telefona, pronalaenje prijatelja, prosleivanje poziva, unos kontakta, online brojevi, govorna posta, prikazivanje callerID-a. On the move with Skype for Android 12.1.17. Google Translate Adresa na kojoj moete nai ovu aplikaciju: https://market.android.com/details? id=com.google.android.apps.translate&feature=top-free Opis: Google Translate aplikacija za Android omoguava prevoenje izmeu preko 50 jezika. Na osnovu unite rei, pokazuje vam se rezultat iz renika. Rezultati se postavljaju po tome koji se najvie koristi i u kom kontekstu. Mogue je dobiti kako se izgovara neki tekst. Mogue je uneti tekst priom.

140

Razvoj aplikacija za operativni sistem Android

12.2.

Objavljivanje aplikacije na AndroidMarket

141

You might also like