Prošli put smo demonstrirali osnove korištenja Googleovog alternativnog alata za razvoj Android aplikacija namijenjenog neprogramerima i „malo manje spretnim programerima“. App Inventor for Android, kako je njegov naziv, pokazao se sasvim prikladnim za stvaranje elementarne Android aplikacije (nešto slično klasičnom Hello World primjeru), a danas ćemo probati prikazati da je upotrebljiv za bitno složenije projekte.

Odgovorimo prvo na nekoliko najvažnijih pitanja povezanih s korištenjem alata na razvoju složenijih projekata. Najvažnije pitanje koje se nameće samo po sebi je potencijalna složenost dovršene aplikacije. Tu odmah treba biti izravan te reći da se pomoću alata App Inventor for Android ne može napraviti baš sve što i s službenim razvojnim alatom, ali da se može puno toga – može se. Osim brojnih komponenti za razvoj različitih dijelova sučelja (što smo djelomice pokazali u u prošlom uvodnom tekstu o alatu), na raspolaganju su najvažnije programske strukture poput foreach, while, if-else (iako u nešto slikovitijem obliku nego je to uobičajeno u programskim jezicima), a moguća je i komunikacija s web servisima te svojevrsnim spremištem podataka. Od važnijih tehnologija karakterističnih za mobilne uređaje današnjice, trenutno nije podržan samo Bluetooth, ali se prema tvrdnjama proizvođača intenzivno radi i na tom segmentu.

Basic komponente: Predstavljaju osnovne grafičke elemente aplikacije.

Ako vam slučajno ni sve nabrojano nije dovoljno za izradu vlastite aplikacije, onda alat skoro neograničeno možete nadopunjavati izradom vlastitih komponenti u Javi. To znači da morate ipak biti nešto vještiji u programiranju, a onda se neminovno postavlja pitanje zašto ne bi sve skupa ipak programirali u standardnom SDK razvojnom sustavu. Ako pomoću alata App Inventor for Android možete sami odraditi veći dio projekta, onda ima smisla da za manji nedostajući segment vlastite aplikacije angažirate Java programera da vam pomogne.

Trenutno dva najveća nedostatka alata odnose se na nemogućnost izravne objave aplikacije na globalnom tržištu Android aplikacija (Android Market), te ograničenost aplikacije na samo jedan prikaz (raspored kontrola). Google obećava kako će prvi problem biti uskoro riješen pa se zato njime nećemo previše baviti. Napišimo zato nekoliko riječi o drugom problemu. Na trenutnom stupnja razvoja alata ne može se izvoditi prebacivanje između više različitih vrsta prikaza ili rasporeda kontrola. To na prvi, drugi i treći pogled predstavlja zbilja veliko ograničenje u razvoju aplikacija, ali ga je ipak moguće prevazići jednim od slijedeća dva trika.

  1. Naizmjeničnim „paljenjem i gašenjem“ kontrola, to jest izmjenom vidljivosti različitih komponenti postavljenih na jedini dostupni prikaz kontrola.
  2. Međusobnim višestrukim povezivanjem više App Inventor for Android aplikacija, od kojih svaka može imati različite rasporede kontrola na osnovnom zaslonu. Kad su prije koje desetljeće nešto slično mogli raditi autori složenih igara na strojevima poput ZX Spectruma ili Commodorea 64 te kasetofonom kao uređajem vanjske memorije, nema nikakvog razloga zašto se to ne bi moglo napraviti i danas sa znatno modernijim hardverom.

Media komponente: Komponente za upravljanje različitim multimedijalnim dijelovima mobilnog uređaja.

Iako slijedeća vijest nema nikakve veze s prethodnom točkom, današnjim tekstom, pa čak ni cijelim serijalom u cjelini, ipak ću je spomenuti na ovom mjestu, ako je do sada već niste sami negdje pročitali. Kultni Commodore 64 je prije kratkog vremena doživio svoju inkarnaciju s istim izgledom izvana, ali ultramodernim hardverom i softverom iznutra. Narudžbe se mogu napraviti već sada, a isporuka se očekuje u petom mjesecu. Morao sam to jednostavno spomenuti – prve ljubavi se teško zaboravljaju, makar to bila i računala.

Vratimo se sada ponovo današnjoj temi. Ključne dijelove aplikacije možemo podijeliti u dvije velike skupine:

  1. Komponente ili kontrole
  2. Blokove

Komponente su osnovni grafički dijelovi aplikacije, a međusobno se osim po izgledu razlikuju prije svega po svojoj namjeni. Osnovna grupa komponenti pod nazivom Basic obuhvaća zbilja osnovne komponente karakteristične za moderna korisnička sučelja poput gumbi, oznaka i slika. Ako ste ikad probali napisati bilo kakvu aplikaciju u nekom modernijem razvojnom alatu, trebali bi znati o čemu je riječ, pa se zato i nećemo previše baviti njihovim karakteristika. U istoj grupi kontrola nalaze se još dvije složenije kontrole, a one ipak zahtijevaju poneku dodatnu riječ. To su Canvas i TinyDB.

Animation komponente: Preduvjet za njihovo korištenje je postojanje komponente Canvas.

Kontrola Canvas zamišljena je kao dvodimenzionalno područje za crtanje likova pomoću programskog koda, odnosno za pomicanje sličica („sprites“). Budući da je to isto područje osjetljivo na dodir, sasvim je razumljivo da predstavlja temeljni dio većine različitih igara razvijenih u ovom alatu. Svaka od lokacija na komponenti Canvas označava se uobičajenim matematičkim zapisom za dvodimenzionalne površine – kao koordinate x i y. O važnosti navedene kontrole u razvoju aplikacija najbolje govori činjenica da je u zadnjoj reviziji alata od strane Googlea s kraja trećeg mjeseca, veliki dio poboljšanja dodan upravo u Canvas kontrolu.

Neka od tipičnih svojstava i metoda Canvas kontrole, čija imena govore sama za sebe su:

BackgroundImage, LineWidth, Touched(number x, number y, boolean touchedSprite), Clear(), DrawLine(number x1, number y1, number x2, number y2), DrawCircle(number x, number y, number r).

Tijekom pisanja igara kontrola Canvas se vrlo često upotrebljava u kombinaciji s kontrolom Clock kako bi se osiguralo odvijanje operacija u zadanim vremenskim intervalima. Spomenimo na ovom mjestu kako kontrola Clock ujedno pripada grupi „nevidljivih“ kontrola, što znači da se ne vidi tijekom izvođenja aplikacije, ali mora biti nacrtana na osnovnoj formi kako bi se mogle koristiti njezine mogućnosti.

Kontrola TinyDB namijenjena je trajnom spremanju podataka iz aplikacije u mobilni uređaj. Prilikom svakog prekida izvršavanja aplikacije gubi se sadržaj svih korištenih kontrola te se ponovo puni inicijalnim vrijednostima kod slijedećeg pokretanja aplikacije. Ako prilikom novog pokretanja aplikacije treba krenuti od njezinog zadnjeg stanja, onda treba postojati nekakav mehanizam za spremanje vrijednosti iz aplikacije u Android uređaj, te njihovo ponovno čitanje (na primjer, postavke aplikacije, stanje bodova u privremeno prekinutoj igri i slično). Upravo za takvu namjenu zamišljena je kontrola TinyDB, odnosno njezine dvije jedine dostupne metode:

StoreValue(oznaka, vrijednost)

Sprema vrijednost (niz znakova ili popis) pod određenim nazivom u spremište na mobilnom uređaju.

GetValue(oznaka)

Čita vrijednost sa zadanim nazivom iz spremišta. U slučaju da tražena oznaka ne postoji u spremištu (npr. kod prvog pokušaja čitanja vrijednosti na novom uređaju), onda metoda vraća prazan niz znakova.

U slučaju da treba obrisati spremište od starih vrijednosti, onda se to izvodi na telefonu standardnom naredbom Settings → Applications → Manage Applications.

U grupi kontrola pod nazivom Media nalazi se 5 komponenti  slijedećih naziva: Camera, ImagePicker, Player, Sound i VideoPlayer. Svaka od kontrola zadužena je za upravljanje odgovarajućim hardverskim ili softverskim resursom, pa su u skladu s tim i dodijeljeni nazivi svojstava odnosno metoda (npr. TakePicture ili AfterPicture za kontrolu Camera, odnosno Start, Stop ili Pause za kontrolu Player).

Grupa kontrola Animation te njezine dvije jedine komponente Ball odnosno ImageSprite, koriste se u kombinaciji s prije spomenutom kontrolom Canvas za aplikacije u kojima je potrebno izvoditi različite vrste pokretanja grafičkih objekata (dakle najčešće igre). Na priloženoj slici uz tekst vidi se da je preduvjet za korištenje kontroli iz ove grupe upravo postojanje kontrole Canvas. Pomoću svojstava kontrola poput Interval, Speed ili Rotates upravlja se učestalošću, brzinom i rotacijom „sličica ili loptica“ u vlastitoj aplikaciji. Budući da u jednoj aplikaciji može biti više Canvas kontrola, nema nikakvog razloga da njihovim inteligentnim paljenjem i gašenjem na jednom jedinom zaslonu (prije istaknuto ograničenje trenutne verzije razvojnog alata) napravite prilično kompleksnu igru.

Social komponente: Zadužene su za pristup i korištenje različitih socijalnih podataka iz mobilnog uređaja.

Posljednja grupa kontrola koju ćemo spomenuti u današnjem nastavku su kontrole iz grupe Social zadužene za pristup i korištenje različitih socijalnih podataka iz mobilnog uređaja (ContactPicker, EmailPicker, PhoneCall, PhoneNumberPicker, Texting i Twitter). Pomoću ovih kontrola moguće je postići da vlastite aplikacije upravljaju telefonskim pozivima, slanjem sms i/ili email porukama, odnosno korištenjem usluga Twittera (npr. korištenjem metoda poput DirectMessage, RequestDirectMessage ili RequestFriendTimeLine).

U slijedećem nastavku napravit ćemo pregled preostalih dostupnih kontrola, a onda napraviti nekoliko složenijih primjera, koji bi trebali prikazati kako ovim alatom doista nije problem brzo napraviti i znatno složenije aplikacije.

Piše: Nenad Crnko