Škola Android programiranja časopisa Vidi
Android programiranje #15: Izrada složenijih aplikacija
Nakon što smo u prošlih nekoliko nastavaka predstavili najvažnije dijelove Googleovog alata za razvoj aplikacija namijenjenog korisnicima neprogramerima, odnosno malo manje vještim programerima, došao je trenutak da pokažemo kako se ti dijelovi zaista koriste u vlastitim aplikacijama. Za razliku od prve demo aplikacije, kad smo vrlo detaljno riječju i slikom opisivali kako se izvode sve operacije potrebne da se dobije dovršena aplikacija, u današnjem nastavku ćemo samo naznačiti glavne smjernice u pripremi aplikacije, a na vama je da probate sami dovesti projekt u funkcionalno stanje. Tako ćemo odmah pripremiti i svojevrsnu vježbanju u korištenju alata.
Iako se danas mobilni uređaji koriste za izvođenje više desetaka različitih operacija – od planiranja vlastitog vremena, preko slušanja muzike i gledanja filmova pa sve do igranja različitih vrsta igara, mogućnost izvođenja starog, dobrog telefonskog poziva (ili bar odgovaranja na njega) još uvijek ostaje jedna od najbitnijih namjena većine mobilnih telefona. Zato ćemo u prvom primjeru nešto složenije aplikacije demonstrirati što možemo napraviti u Googlevom razvojnom alatu po tom pitanju, ako ne želimo koristiti već ugrađene mogućnosti u sam uređaj.
Pretpostavka za uspješno izvođenje slijedeće aplikacije na konkretnom Android uređaju je da taj uređaj podržava izvođenje telefonskih poziva, a ne samo različite internet orijentirane načine vlastitog korištenja (pregled web stranica, razmjena email poruka i slično). Također, u spremište kontakata u uređaju trebalo bi biti upisano bar nekoliko telefonskih brojeva, a nekima od brojeva trebale bi biti dodijeljenje slike njihovih vlasnika. Čak i ako svi nabrojeni zahtjevi budu zadovoljeni, može se dogoditi da na nekim uređajima primjer ipak ne djeluje kako se očekuje. Razloge treba tražiti u tome što u trenutnoj fazi razvoja alat App Inventor for Android još uvijek nije ni testiran ni optimiziran za sve dostupne uređaje na tržištu. Googleovi razvojni inženjeri obećavaju kako će takve „porođajne muke“ biti riješene u bliskoj budućnosti kad razvojni alat više ne bude u fazi svojevrsnog testiranja.
Za uspostavu telefonskog poziva iz Android uređaja, kao što to već znate, treba kreirati novi prazan projekt te mu dodijeliti nekakav naziv koji simbolizira namjenu projekta. U pripremi primjera povezanog s ovim tekstom korišten je naziv VidiPhoneCall, ali nema apsolutno nikakvog razloga da ne odaberete neki drugi mnogo „razumljiviji“ naziv (npr. APC 4MM – Android PhoneCall System for Modern Manager). Od dostupnih Android komponeti u projektu su nam na samom početku potrebne samo dvije: komponenta PhoneCall iz grupe Social te komponenta Button iz grupe Basic. U nastavku teksta ćemo slične konstrukcije skraćeno pisati Social -> PhoneCall, odnosno Basic -> Button.

Social -> Phone Call: Temeljna komponenta za izvođenje telefonskog poziva iz vlastite Android aplikacije.
Svakoj komponenti postavljenoj na osnovni zaslon razvojni alat automatski dodjeljuju naziv sastavljen od naziva komponente te rednog broja takve vrste komponente unutar projekta. U slučaju jednostavnijih projekta takvi nazivi se mogu izravno koristiti za dovršetak projekta, ali dobra praksa iskusnijih programera predlaže njihovo preimenovanje u daleko razumljivije nazive, kako bi se kasnije olakšalo snalaženje u projektu. Što se u nekom projektu koristi više različitih komponenti (to vrijedi i za sve druge razvojne alate), to je važnije imati smislenije nazive, da bi se programer što brže i jednostavnije mogao snaći u naknadnoj analizi i izmjeni programskog koda. Dobro, kod alata App Inventor zapravo ni ne možemo govoriti baš o „pisanju programskog koda“, jer je prije riječ o nećemu nalik slaganju komada slagalice sastavljene od dostupnih događaja i metoda korištenih komponeti, ali nema nikakvog razloga da ignoriramo pravilo o imenovanju komponenti.
Preimenovanje komponente postavljene na osnovni zaslon projekta izvodi se njezinim označavanjem, te klikom na gumb <Rename> u razvojnoj okolini alata. Za potrebe ovog projekta komponentu PhoneCall1 preimenovali smo u TelefonskiPoziv, a komponetu Button1 u UspostaviPoziv. Još jednom ponavljamo – budući da bi rad na ovom projektu trebao ujedno biti vaša samostalna vježba korištenja Googleovog razvojnog alata, nazive komponenti možete izabrati prema vlastitim sklonostima. Za komponentu TelefonskiPoziv može se izmijeniti i početna vrijednost svojstva PhoneNumber na željeni broj pozivatelja (ako se pozivi najčešće upućuju na taj broj), dok komponenti UspostaviPoziv treba izmijeniti svojstvo Text, kako bi zamjena za podrazumijevanu vrijednost Text for Button1 preciznije pokazivala namjenu gumba.
U ovom trenutku je dovršeno „crtanje“ korisničkog sučelja, a sad preostaje još samo to da se „napiše odgovarajući programski kod“, odnosno dovrši slagalica u inovativnom Googleovom sučelju za tu namjenu (o čijem korištenju je bilo više riječi u prvom nastavku serijala). Sasvim konkretno – u ovom slučaju potrebno je napraviti povezivanje bloka Click iz kontrole UpostaviPoziv s blokom MakePhoneCall iz kontrole TelefonskiPoziv. Na taj način dovršena je prva verzija aplikacije koja omogućava uspostavu telefonskog poziva iz Android uređaja s upisanim odredišnim brojem nakon što korisnik pritisne kontrolu (gumb) UspostaviPoziv. Djelovanje programa možete (ili ipak ne možete) provjeriti sami na vlastitom komadu Android hardvera, već prema tome kako je on trenutno podržan od strane Googleovih razvojnih inženjera.
Na trenutnom stupnju razvoja naše nove aplikacije trebalo bi biti moguće uspostaviti telefonski poziv, ali aplikacija još uvijek „nema pojma“ o podacima zapisanim u bazu kontakata u okviru samog uređaja, nego se svi telefonski brojevi moraju upisivati u cijelosti. Budite iskreni pa priznajte sami sebi koliko često u praksi zaista izvodite operaciju upisivanja broja pozivatelja u odnosu na učestalost biranja dostupnih brojeva iz baze kontakata. Zato aplikaciju treba dodatno proširiti tako da postane „svjesna“ ranije pripremljenih telefonskih brojeva.

Dovršeno sučelje aplikacije za telefoniranje: Omogućava korištenje podataka iz spremišta kontakata u samom uređaju.
U drugoj verziji aplikacije ćemo na osnovni zaslon aplikacije dodati još jednu novu kontrolu: Social -> PhoneNumberPicker, a onda joj izmijeniti predloženi naziv u IzaberiBroj, odnosno tekst koji se prikazuje na kontroli s početne vrijednosti Text for PhoneNumberPicker1 za hrvatsku verziju aplikacije primjereniji oblik Izaberi broj. Kontrola tipa PhoneNumberPicker predstavlja svojevrsnu verziju običnog gumba, s tom razlikom da pritisak na kontrolu automatski izaziva prikaz podataka iz postojeće baze kontakata u uređaju. Kad smo napisali „prikaz podataka“, onda smo zaista mislili samo na to, jer odabir telefonskog broja iz prikazanih podataka još uvijek nije moguć, bar ne tako dugo dok se ponovo ne pripremi odgovarajuća „slagalica“ za upravljanje izvođenjem programa.
Da bi se na temelju izabranog podatka iz popisa kontakata zaista ostvario telefonski poziv, potrebno je spojiti blok AfterPicking kontrole IzaberiBroj s blokom MakePhoneCall iz kontrole TelefonskiPoziv. Potrebno je napraviti još prijenos odgovarajućeg parametra (izabranog telefonskog broja) između te dvije kontrole, što se izvodi dodatnim vezanjem bloka PhoneNumber kontrole IzaberiBroj s prije navedenim blokom MakePhoneCall. Ovim korakom, ako je sve pravilno izvedeno, trebala bi biti dovršena druga faza u razvoju aplikacije. Sada je aplikacija spremna za izvođenje telefonskih poziva na temelju prije spremljenih podataka u bazu kontakata.
U smislu poboljšanja grafičkog izgleda aplikacije moguće je u aplikaciju dodati još poneki detalj. Premda se u trenutnoj verziji broj iz baze kontakata zaista može izabrati kao temelj za telefonski poziv, korisnik aplikacije još uvijek ne može vidjeti o kojem je telefonskom broju riječ. Da ne spominjemo nemogućnost prikaza slike vlasnika telefonskog broja, ako takva postoji u uređaju. Unapređenje korisničkog sučelja aplikacije može se postići tako da se u okviru istog bloka AfterPicking kontrole IzaberiBroj, naprave dva dodatna povezivanja. Blok PhoneNumber iz kontrole IzaberiBroj treba povezati s blokom Text ranije opisanog gumba UspostaviPoziv, a blok Picture iz kontrole IzaberiBroj spojiti s blokom Image, također svojstvom gumba UspostaviPoziv. Navedenim operacijama je aplikacija poboljšana u vizualnom smislu pa osim zahtijevane funkcionalnosti sada posjeduje i odgovarajuće korisničko sučelje.
Trenutna verzija aplikacija se i dalje može nadograđivati, pa evo nekoliko ideja koje možete probati napraviti sami:
- Osim prijenosa broja koji se poziva iz baze spremljenih kontakata, probajte prenijeti još neke podatke na osnovni zaslon aplikacije (prije svega prezime i ime korisnika). Razmislite prvo trebaju li vam kakve dodatne kontrole na sučelju, da bi to zaista mogli napraviti. Ova točka ne bi trebala biti prezahtijevna za realizaciju.
- Podaci o uspostavljenim pozivima mogli bi se sačuvati za kasniju analizu. Kako je u ovom slučaju riječ o malo zahtijevnijem postupku, o njemu će više riječi biti neki drugi put.
Na kraju, ambiciozniji čitatelji mogu probati sami napraviti sličan projekt ispočetka tako da se umjesto uspostave telefonskog poziva izvodi slanje dobre, stare SMS poruke. U tom slučaju temeljnu kontrolu za rad aplikacije (Social -> PhoneCall), treba zamijeniti nečim drugim, ali vam to sada nećemo otkriti, nego vam ostavljamo da na temelju prethodnih nastavaka serijala i vlastitog eksperimentiranja sami pronađe o čemu je riječ. U svakom slučaju preporučamo vam da sami probate „odraditi“ cijeli posao oko današnje aplikacije, kako bi mogli lakše pratiti slijedeći projekt, gdje ćemo još manje detaljizirati oko biranja kontrola i njihovog korištenja nego što je to bi slučaj danas. Budući da ćemo raditi na mnogo složenijem projektu jednostavno moramo pretpostaviti da su vam dobro poznate osnovne stvari oko korištenja Googleovog alata za neprogramere.
Piše: Nenad Crnko
| Print article | This entry was posted by Ivan Kišić on 25/10/2011 at 18:53, and is filed under Škola. Follow any responses to this post through RSS 2.0. Both comments and pings are currently closed. |
Comments are closed.
