Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Fakulteta za elektrotehniko, računalništvo in informatiko Smetanova ulica 17
2000 Maribor, Slovenija
Mobilna aplikacija za
organizacijo dogodkov
UM FERI
Maribor, junij 2014
Mobilna aplikacija za organizacijo dogodkov
ii
MOBILNA APLIKACIJA ZA
ORGANIZACIJO DOGODKOV
Diplomsko delo
Študent: Blaž Vantur
Študijski program: Visokošolski študijski program
Računalništvo in informacijske tehnologije
Mentor: doc. dr. Matej Črepinšek
Lektor: Mojca Poropat
Mobilna aplikacija za organizacijo dogodkov
vi
Zahvala
Zahvaljujem se mentorju doc. dr. Mateju
Črepinšku za vso pomoč pri izdelavi
diplomske naloge.
Posebna zahvala gre moji družini, ki me je
podpirala in mi omogočila študij.
Mobilna aplikacija za organizacijo dogodkov
vii
MOBILNA APLIKACIJA ZA ORGANIZACIJO DOGODKOV
Ključne besede: Mobilna aplikacija, Android, SMS sporočanje, dogodki
UDK: 004.728.8:005.551(043.2)
Povzetek:
Cilj diplomske naloge je preučiti mobilni operacijski sistem Android in njegovo delovanje,
izdelava preproste mobilne aplikacije za ustvarjanje dogodkov ter pošiljanje vabila preko
SMS sporočila. V njej bomo opisali zgradbo Android sistema in funkcionalnosti, ki smo jih
uporabili pri razvoju naše aplikacije.
Mobilna aplikacija za organizacijo dogodkov
viii
MOBILE APPLICATION FOR EVENT ORGANIZATION
Key words: Mobile application, Android, SMS messaging, events
UDK: 004.728.8:005.551(043.2)
Abstract: Goal of this task was to examined mobile operating system Android and his
functions, and construction of simple mobile application, for creating events and sending
invitations via SMS. In it, we describe the structure of the Android system, and functionality,
we used in development of our application.
Mobilna aplikacija za organizacijo dogodkov
ix
Kazalo vsebine
1 Uvod ................................................................................................................................... 1
2 Android ............................................................................................................................... 2
2.1 Zgodovina .................................................................................................................... 2
2.2 Lastnosti ....................................................................................................................... 3
2.2.1 Vmesnik ............................................................................................................... 3
2.2.2 Aplikacije ............................................................................................................. 4
2.2.3 Upravljanje spomina ............................................................................................ 4
2.3 Razvoj .......................................................................................................................... 5
2.3.1 Verzije operacijskih sistemov Android ................................................................ 6
2.4 Življenska doba aplikacije ........................................................................................... 7
2.5 Dizajn ........................................................................................................................... 8
2.5.1 9-patch .................................................................................................................. 9
3 Aplikacija SMSDogodek .................................................................................................. 10
3.1 Zgradba programske strukture ................................................................................... 11
3.2 Programska koda ....................................................................................................... 12
3.2.1 Android Manifest ............................................................................................... 12
3.2.2 Nastavitve v programu ....................................................................................... 13
3.2.3 Globalni razred ................................................................................................... 13
3.2.4 Glavna aktivnost ................................................................................................. 14
3.2.5 Fragment ............................................................................................................. 15
3.2.6 Dialog ................................................................................................................. 16
3.2.7 Adapter ............................................................................................................... 17
3.2.8 Database ............................................................................................................. 18
3.2.9 Contacts .............................................................................................................. 18
3.2.10 Pogled po meri ................................................................................................... 21
Mobilna aplikacija za organizacijo dogodkov
x
3.2.11 Pošiljanje povabil ............................................................................................... 22
3.3 Grafični vmesnik ....................................................................................................... 25
3.4 Delovanje programa .................................................................................................. 26
3.4.1 Primerjava konkurence ....................................................................................... 28
3.5 Testiranje ................................................................................................................... 30
3.5.1 Samsung Galaxy Note 2 ..................................................................................... 31
3.5.2 HTC Sensation Z710e ........................................................................................ 31
3.5.3 Motorola Moto G ............................................................................................... 32
4 Zaključek .......................................................................................................................... 34
Mobilna aplikacija za organizacijo dogodkov
xi
Kazalo slik
Slika 2.1: Uradni logo Android OS [6] ...................................................................................... 2
Slika 2.2: Razširjena vrstica stanj sistema Android [5] ............................................................. 4
Slika 2.3: Delež uporabe verzij Android sistema na napravah [12] ........................................... 6
Slika 2.4: Prikaz življenske dobe aplikacije [22] ....................................................................... 8
Slika 2.5: Primer izdelave 9-patch slike [10] ............................................................................. 9
Slika 3.1: Pozdravna stran ........................................................................................................ 10
Slika 3.2: Zgradba programske strukture ................................................................................. 11
Slika 3.3: Uporaba globalnega razreda .................................................................................... 14
Slika 3.4: Začetni pogled aplikacije ......................................................................................... 15
Slika 3.5: Dialog za nastavitev ure dogodka ............................................................................ 16
Slika 3.6: Primer prikaza kontakta v seznamu ......................................................................... 17
Slika 3.7: Izbira Gmail računa .................................................................................................. 19
Slika 3.8: Dostop do Gmail računa .......................................................................................... 20
Slika 3.9: Številski izbirnik ...................................................................................................... 21
Slika 3.10: Programska koda pošiljanja SMS sporočil ............................................................ 23
Slika 3.11: Pošiljanje sporočila z SMSManager ...................................................................... 24
Slika 3.12: Pošiljanje sporočila preko privzete Android aplikacije za SMS ............................ 24
Slika 3.13: Potek pošiljanja sporočil ........................................................................................ 25
Slika 3.14: Seznam preteklih dogodkov ................................................................................... 27
Slika 3.15: Dodajanje novega dogodka (obrazec) .................................................................... 28
Slika 3.16: Izgled aplikacije Povabi.si ..................................................................................... 30
Slika 3.17: Samsung Galaxy Note II [16] ................................................................................ 31
Slika 3.18: HTC Sensation Z710e [17] .................................................................................... 32
Slika 3.19: Motorola Moto G [20] ........................................................................................... 33
Mobilna aplikacija za organizacijo dogodkov
xii
Seznam uporabljenih kratic
SMS – Short Message Service
VM – Virtual machine
OS – Operation system
SDK – Software Development Kit
SMSC – Short Message Service Center
PDU – Protocol Discription Unit
iOS – iPhone Operation system
APK – Application package file
GPS – Global positioning system
AOT – Ahead of time
GC – Garbage collection
API – Application program interface
GHz - Gigahertz
Mobilna aplikacija za organizacijo dogodkov
1
1 Uvod
Mobilni operacijski sistem Android dominira na trgu mobilnih OS. To potrjuje s 85 %
deležem tržišča pametnih telefonov in z 255-imi milijoni prodanih enot v drugi četrtini leta
2014[18]. K njegovim konkurentom sodita operacijski sistem podjetja Apple iOS in
Microsoftov sistem Windows Mobile. Prav zaradi takšne popularnosti sistema Android je
razvijanje programov in igric zanj zelo razširjeno in obetavno. K tej popularnosti je prav
gotovo pripomogla zgradba sistema, ki uporabnikom omogoča prilagoditev njihovim željam.
Cilj te diplomske naloge je prikaz izdelave uporabniškega vmesnika in njegove uporabe za
mobilno aplikacijo z imenom SMSDogodek, s pomočjo katere organiziramo dogodke. Za
njeno izdelavo je dobro vedeti več o mobilnem operacijskem sistemu Android (njegovo
zgodovino, zgradbo, delovanje in ostale pomembne stvari). Predstavili bomo tudi delovanje
fragmentov in njihov vpliv na življenjski cikel aplikacije. Vse to bo opisano v naslednjem
poglavju.
Za izdelavo takšne aplikacije smo se odločili, ker prirejamo veliko zasebnih dogodkov in smo
razmišljali, na kakšen način bi poenostavili delo pri tem. Prišli smo do rešitve in se
dogovorili, da razvijemo mobilno aplikacijo, s katero bi lahko brez internetne povezave
povabili osebe na nek dogodek. Povabilo bi bilo poslano preko SMS storitve, preko katere bi
prejemnik potem odgovoril s preprostim pritrdilnim ali odklonilnim odgovorom. Edini
podoben izdelek na tržišču je mobilna aplikacija z imenom Povabi.si.
Glavni problem diplomske naloge je načrtovanje in izdelava mobilne aplikacije za
organizacijo SMSDogodek. Opisali bomo njeno delovanje in predstavili implementacijo le-te.
Kot dopolnilno funkcijo aplikacije smo ustvarili možnost povezave z Gmail računom in
prenosom kontaktov, ki so shranjeni na njem. Predstavili bomo kako smo izdelali uporabniški
vmesnik in na kak način se uporablja. Tukaj bomo tudi predstavili glavno težavo pri
implementaciji aplikacije, in sicer pošiljanje SMS sporočila večim uporabnikom.
Zadnje poglavje bo namenjeno testiranju aplikacije in predstavitvi njenih rezultatov.
Mobilna aplikacija za organizacijo dogodkov
2
2 Android
Android je odprtokodni mobilni operacijski sistem za prenosne naprave, kot so prenosni
telefoni in tablični računalniki. Zgrajen je na Linuxovem jedru. Za njegov razvoj je najbolj
zaslužno podjetje Google, ki je s tem namenom združil več podjetij z imenom Open Handset
Alliance in z njim vzel pod okrilje podjetje Android [2].
Slika 2.1: Uradni logo Android OS [6]
2.1 Zgodovina
Ustanovitelji Android sistema so bili Andy Rubin, Rich Miner, Nick Sears in Chris White, ki
so ga ustvarili leta 2003. Kot cilj so si zadali razviti napreden operacijski sistem za digitalne
kamere, ampak so hitro ugotovili, da je trg za te naprave premajhen in so se posvetili
mobilnim napravam. V tistem času sta bila najbolj pogosta mobilna operacijska sistema
Symbian in Windows Mobile. V letu 2005 je Google pridobil Android v svojo last in s tem
napovedal vstop na mobilno tržišče. 5. novembra 2007 je Android predstavil svojo prvo
platformo za mobilne naprave, ki jo je kot prvi telefon poganjal HTC Dream, ki je bil na voljo
v naslednjem letu [3].
Mobilna aplikacija za organizacijo dogodkov
3
2.2 Lastnosti
Razvijalci sistema Android so morali čim bolj poenostaviti sistem za uporabo vmesnika,
aplikacij in upravljanja s pomnilnikom, da se še tako nevešči uporabniki znajdejo v njem.
2.2.1 Vmesnik
Sistem temelji na neposredni manipulaciji, ki jo izvajamo z dotiki, potegi in drugimi fizičnimi
akcijami. Odziv na akcijo uporabnika je takojšen in jo sistem večkrat pospremi z vibracijo ali
zvokom. S tem zagotavlja povratno informacijo uporabniku za izvedeno akcijo. Telefon, ki
želi delovati na platformi Android, mora vsebovati določene senzorje kot so pospeškometer,
giroskop in senzor bližine. V večini te senzorje izkoristijo pri aplikacijah, kjer je njihova
uporaba smiselna, kot so dirkalne igre, kjer vijugamo z avtomobilom z vrtenjem naprave v
desno in levo ali prilagajnaje zaslona glede na to, ali imamo telefon v navpičnem ali
vodoravnem položaju [3].
Tako kot ima Microsoftov Windows namizje, je tudi pri Android sistemu prvotno stanje oz.
začetni pogled, iz katerega lahko dostopamo do vseh možnih funkcionalnosti sistema.
Medtem, ko se premikamo po sistemu, nas ves čas povsem na vrhu spremlja vrstica stanja,
kjer je zapisana ura, nivo baterije, moč signala in ostale informacije o napravi. Prikazuje pa
tudi zgrešene klice, prejeta sporočila in opozorila aplikacij ter oseb. S potegom te vrstice od
zgoraj navzdol se nam prikaže vrstica s hitrimi nastavitvami, kjer lahko vklapljamo in
izklapljamo določene funkcionalnosti ter preberemo kakšno opozorilo ali sporočilo, ki je bilo
prejeto [3].
Kar se tiče grafičnega dela sistema si lahko uporabnik do neke mere sam prilagodi videz
sistema. Tako lahko vpliva na način ozadja. To pomeni, da ima na izbiro ozadje z animacijo,
navadno sliko ali pa sliko, ki jo je posnel uporabnik sam. Na voljo so tudi teme, s katerimi
lahko povsem spremenimo grafično obliko sistema.
Mobilna aplikacija za organizacijo dogodkov
4
Slika 2.2: Razširjena vrstica stanj sistema Android [5]
2.2.2 Aplikacije
Popularnost sistema se kaže tudi po številu aplikacij, ki jih je mogoče namestiti preko trgovin,
kot je na primer Google Play. V tej trgovini najdemo raznorazne aplikacije, ki si jih lahko
prenesemo in namestimo na napravo. Trgovina pred prenosom sama preveri, če je zagon
aplikacije na napravi sploh mogoč. Drug način namestitve je preko aplikacijske APK
datoteke, ki jo prenesemo na datotečni sistem in jo na njenem naslovu potem tudi zaženemo.
2.2.3 Upravljanje spomina
Naprave s sistemom Android se v večini napajajo z baterijo, zato je upravljanje s spominom
precej varčno, kar se tiče električne energije. To pomeni, da kadar aplikacija ni več v uporabi,
jo v spominu samodejno ustavi, kadar pride do pomanjkanja spomina. V nasprotnem primeru,
ko je aplikacija še vedno odprta, ne uporablja nobenih sredstev kot sta procesorska moč ali
baterija in le čaka v ozadju na ponovno uporabo. Pozitivna stran tega je, da ni potrebno
ponovno zaganjati aplikacije, ki je že bila odprta in ni bila dokončno ustavljena [3].
Mobilna aplikacija za organizacijo dogodkov
5
Sistem je zgrajen tako, da kadar se spomin zapolni, prične ustavljati aplikacije in procese, ki
so bili najdlje časa neaktivni. Ta operacija ni vidna uporabnikom, tako da uporabniku ni
potrebno zaustavljati zagnanih procesov [3].
2.3 Razvoj
Kot smo že dejali, sistem Android bazira na Linux jedru. Zadnja verzija Android sistema je
zgrajena na Linux jedru 3.4 ali novejšem. Samo jedro skrbi za gonilnike strojne opreme. V
primeru da naprava vsebuje GPS senzor, prav Linux jedro poskrbi za njegovo pravilno
delovanje. Nad Linux jedrom obstajajo knjižnice, ki so temeljni del sistema Android in so
zapisane v programskem jeziku C. Navadni uporabnik sistema do njih ne more dostopati,
uporabljajo pa jih razvijalci za dostop do strojnih komponent v napravi. Za zagon aplikacij je
potrebno tudi izvajalno okolje, za katero se v večini primerov uporabja Dalvik VM, ki je bil
ustanovljen posebej za Android. Dalvik je virtualnen stroj, ki pripravi program v bitno kodo,
ki je potem pretvorjena v Java razrede. Ti so kompatibilni z Dalvik datotekami pred
inštalacijo programa na napravo. Z novo različico operacijskega sistema Android KitKat 4.4
je pri izvajalnem okolju prišlo do spremembe pri virtualnem stroju. Dodan je bil ART
virtualen stroj, ki se ga poljubno vklopi ali izklopi pod nastavitvami za razvijalce v sistemu.
Pri novi različici sistema sta sedaj na voljo dve izvajalni okolji. Za razvijalce je pomembno še
aplikacijsko ogrodje, ki vsebuje sistemske aplikacije. Z njimi preprosto upravljamo z
grafičnimi komponentami in z drugimi sistemskimi možnostmi [3].
ART je novo eksperimentalno izvajalno orodje, ki je bilo predstavljeno s sistemom Android
različice 4.4. To je predogled nedokončanega okolja, ki ga lahko preizkusimo v novih
sistemih, z njegovo vklučitvijo v nastavitvah za razvijalce. Pomembno je, da Dalvik ostane
vaše privzeto izvajalno okolje, v nasprotnem primeru tvegate implementacijo vašega Android
sistema [19].
Lastnosti ART-a so naslednje:
AOT prevajanje (to prevajanje izboljša delovanje aplikacij, ima pa tudi strožje
namestitveno-časovno nalaganje aplikacij) [19],
izboljšan GC - garbage collection (v tem izvajalnem okolju je izboljšan na več
načinov, in sicer ima le en GC premor namesto dveh, paralelizirano procesiranje med
preostalim GC premorom, ima zbiralec z nizkim časovnim premorom za posebne
primere čiščenja nedavno zaznanih, kratkoživečih objektov)[19],
Mobilna aplikacija za organizacijo dogodkov
6
razvoj in razhroščevanje izboljšav [19].
Android se ves čas posodablja in spreminja, saj razvijalci ustvarjajo vedno boljšo programsko
opremo za sistem, k temu pa pripomore tudi vedno boljša strojna oprema v napravah.
Slika 2.3: Delež uporabe verzij Android sistema na napravah [12]
2.3.1 Verzije operacijskih sistemov Android
Pred izidom uradne različice za javnost sta bili vsaj dve verziji izdani znotraj podjetja. Ko so
bili dovolj prepričani v sistem, so 5. novembra 2007 izdali prvo uradno različico sistema, ki se
je imenoval Android beta. Ta datum je tudi rojstni datum sistema Android. Teden za izidom
sistema je bil izdan tudi paket za razvoj programske opreme SDK [7].
Izdaja različic sistema Android si pa sledi v naslednjem vrstnem redu:
Android 1.0 (API level 1),
Android 1.1 (API level 2),
Android 1.5 Cupcake (API level 3),
Android 1.6 Donut (API level 4),
Android 2.0 Eclair (API level 5),
Android 2.0.1 Eclair (API level 6),
Android 2.1 Eclair (API level 7),
Android 2.2-2.2.3 Froyo (API level 8),
Android 2.3-2.3.2 Gingerbread (API level 9),
Android 2.3.3-2.3.7 Gingerbread (API level 10),
Android 3.0 Honeycomb (API level 11),
Android 3.1 Honeycomb (API level 12),
Mobilna aplikacija za organizacijo dogodkov
7
Android 3.2 Honeycomb (API level 13),
Android 4.0-4.0.2 Ice Cream Sandwich (API level 14),
Android 4.0.3-4.0.4 Ice Cream Sandwich (API level 15),
Android 4.1 Jelly Bean (API level 16),
Android 4.2 Jelly Bean (API level 17),
Android 4.3 Jelly Bean (API level 18),
Android 4.4 KitKat (API level 19).
2.4 Življenska doba aplikacije
Vsaka aplikacija se zažene s pomočjo aktivnosti, ki skrbi za življenjski cikel aplikacije (Slika
2.4). Iz te aktivnosti se lahko potem pokliče novo aktivnost in vsaka nova aktivnost se daje na
sklad. To pomeni, da ob zaustavitvi zadnje aktivnosti zaustavljeno aktivnost izbriše iz sklada
in vzame zadnjo aktivnost na skladu in se vrne v njo.
Za vsako aplikacijo ni potrebno implementirati vseh metod življenjske dobe aplikacije.
Aktivnost pa lahko obstaja dlje časa le v enem izmed teh treh stanj:
Zagnana – pri tem stanju je aktivnost v ospredju in uporabnik z njo lahko upravlja
[22].
Začasno ustavljena – pri tem stanju je aktivnost delno zakrita z drugo aktivnostjo [22].
Ustavljena – tukaj je aktivnost popolnoma skrita in nevidna uporabniku. Smatra se, da
je v ozadju [22].
Mobilna aplikacija za organizacijo dogodkov
8
Slika 2.4: Prikaz življenjske dobe aplikacije [22]
Vsaka aktivnost mora imeti implementirano metodo onCreate, v kateri se določen razred
poveže z določeno grafično postavitvijo za prikaz na aplikaciji. Torej se vse ustvari in
pripravi za prikaz. Za to metodo se izvede onStart metoda, ki zažene aktivnost in onResume, v
kateri je aktivnost zagnana. Za prekinitev sta možni dve metodi, in sicer onPause in onStop.
Metoda onPause le začasno prekine aktivnost, prekrije jo druga aktivnost. Nazaj se vrnemo s
pomočjo metode onResume, ki ponovno obudi aktivnost. V primeru, da je poklicana metoda
onStop, to pomeni, da se bo aktivnost povsem zaprla in bo z njo klicana tudi metoda
onDestroy, ki poskrbi za uničenje vseh nastalih spremenljivk in virov, ki jih aktivnost zaseda.
2.5 Dizajn
Android sistem je nameščen na številnih napravah, ki so različnih velikosti in dimenzij, na kar
moramo biti programerji še posebej pozorni. To rešujemo tako, da imamo pri ustvarjanju
projektov štiri mape, pri čemer vsaka mapa pokriva svoj del naprav glede na velikost naprave.
V te mape shranimo slike, ki jih potem uporabimo v aplikaciji. Te mape imajo zraven stalnega
imena drawable pripisano še eno besedo, ki določa svoj spekter naprav. Tako imamo mape z
naslednjimi imeni:
drawable-ldpi (low density) namenjena za manjše naprave (Sony X10 Mini),
drawable-mdpi (medium density) namenjena za normalno velike naprave (HTC
Wildfire),
drawable-hdpi (high density) namenjena za malo večje naprave (Motorola Razr),
Mobilna aplikacija za organizacijo dogodkov
9
drawable-xhdpi (extreme high density) namenjena za ekstremno velike naprave
(Samsung Galaxy Note).
Seveda zraven telefonov obstajajo še tablični računalniki in pametni televizorji, ki imajo
nameščen operacijski sistem Android. Za podporo teh naprav je potem potrebno dodati nove
mape.
Ustvarjanja slik se lahko lotimo na dva načina. Prvi pristop je, da ustvarimo slike za običajne
naprave, ki se bodo shranile v mapo drawable-mdpi in potem vsako sliko skaliramo še za
ostale naprave navzgor. Drugi pristop poteka tako, da ustvarimo slike za največje naprave in
jih nato pomanjšamo za vse preostale mape. Nov sistem ustvarjanja slik več ne omenja naprav
z najmanjšo velikostjo, saj je zmanjševanje slik za te naprave avtomatično [13]. Pri hranjenju
slik v projektu je zelo pomembno, da se enaka slika za različne naprave enako imenuje.
2.5.1 9-patch
Pri pripravi slik imamo na voljo Android orodje draw9Patch, s katerim lahko določimo
območje, kje na sliki se bo lahko nahajala njena vsebina in kateri deli slike se bodo prilagodili
in raztegnili glede na vsebino. Uporabnost teh slik je predvsem pri gumbih, ki jim menjamo
sliko ozadja. Potem lahko s tem orodjem določimo kje so meje vsebine in kateri del slike se
bo raztegnil po potrebi.
Slika 2.5: Primer izdelave 9-patch slike [10]
Mobilna aplikacija za organizacijo dogodkov
10
3 Aplikacija SMSDogodek
V tem poglavju je opisan razvoj celotne aplikacije, težave, na katere smo naleteli ter kako smo
se spopadli z njimi. Cilj je bil izdelati uporabniški vmesnik, ki bo razumljiv in funkcionalen.
Na koncu smo naredili še primerjavo s podobno že obsotoječo aplikacijo Povabi.si.
Najprej smo načrtovali kako naj bi potekal življenjski ciklus naše aplikacije, kakšne stvari je
smiselno uporabiti in šele nato, kako izdelati uporabniški vmesnik. Prioriteta nam je bila, da
so najpomembnejše stvari dobro vidne in lahko dostopne, kar nam je po naši oceni tudi
uspelo. Ko smo imeli pripravljeno grafično podlago, je bilo potrebno pripraviti samo še
gradnike vmesnika, da so služili vsak svoji nalogi in smo kot končni rezultat razvili mobilno
aplikacijo za organizacijo dogodkov z imenom SMSDogodek.
Slika 3.1: Pozdravna stran
Mobilna aplikacija za organizacijo dogodkov
11
3.1 Zgradba programske strukture
Kot smo že dejali nas ob začetku programa pozdravi pozdravno okno, ki je ustvarjeno kot
aktivnost, ki jo po pretečenem času zapremo in zaženemo novo, glavno aktivnost programa. V
tem pogledu uporabnik ne more sprožiti nobene akcije, ampak le počaka, da preteče čas
pozdravnega okna in se zažene program. Celoten program traja znotraj ene same aktivnosti,
saj smo se odločili za način dela s Fragmenti zato, da ne odpiramo nepotrebnih novih
aktivnosti, če se lahko vse odpre znotraj ene. Drugi razlog je, da imamo »Action bar«, tako ga
ni potrebno ponovno ustvarjati za vsako novo aktivnost. Na »Action bar-u« se čez celotno
aplikacijo pojavljajo in izginjajo gumbi, odvisno od pogleda, ki je v tem trenutku v ospredju.
V tej aktivnosti lahko preklapljamo in upravljamo z osmimi pogledi v fragmentu. Že na prvi
strani lahko dostopamo do najmanj štirih pogledov. V primeru, da že imamo ustvarjen kakšen
dogodek, pa tudi do petih pogledov. V pogledu, kjer izbiramo kontakte, ki jih bomo povabili
na dogodek imamo posebnost, saj imamo znotraj fragmenta še dva pod-fragmenta, za
kontakte iz telefona in za kontakte iz Gmail naslova. Celotna zgradba je prikazana na
naslednji sliki (Slika 3.2). Pri izbiri ure in datuma se prikaže tudi dialog, v katerem določimo
pravi čas in uro. Imamo tudi dva dialoga procesa, ki se prikažeta in ostaneta v ospredju,
dokler se operaciji v ozadju ne končata.
Slika 3.2: Zgradba programske strukture
Mobilna aplikacija za organizacijo dogodkov
12
3.2 Programska koda
Sama koda je zapisana v programskem jeziku Java, namenjena je telefonom, ki imajo API
stopnjo enako ali višjo od 14. Namenjena je torej vsem telefonom, ki imajo nameščen najmanj
Android 4.0 sistem. V samem ustvarjenem projektu smo si določene razrede glede na njihovo
vlogo porazdelili v tako imenovane pakete (»package«), zato, da imamo večji pregled, kje se
kakšen del kode nahaja. Tako smo združili vse aktivnosti, dialoge, objekte, nastavitve itd.
Pogledi so ustvarjeni posebej v označevalnem jeziku xml, ki jih povežemo s posameznimi
java razredi preko imena datoteke xml. Kot glavno aktivnost imamo ustvarjen razred
MainActivity, ki naloži pogled main. Ta pogled ima ustvarjeno akcijsko vrstico (»action bar«)
zgoraj, spodaj tri gumbe za upravljanje z dogodki in med tema dvema prazen »LinearLayout«,
v katerem se menja vsebina glede na to, kje v programu se nahajamo. Pri ustvarjanju dogodka
naletimo še na eno posebnost, ki smo jo uporabili. Pri izbiranju kontaktov za dogodek smo v
fragmentu ustvarili še 2 nova fragmenta, ki se menjata ob kliku na določen gumb. Torej
pogled list_phonebook_contacts ima zgoraj dva gumba, za preklapljanje med kontakti iz
telefona in kontakti iz Gmail elektronskega naslova, spodaj pa nov »LinearLayout«, v
katerem se nalagata nova fragmenta, glede na izbran gumb. Pred tem se naložijo kontakti iz
telefona.
3.2.1 Android Manifest
Vsaka aplikacija mora imeti svojo AndroidManifest.xml datoteko. Ta datoteka ima zbrane
pomembne podatke o aplikaciji. Te podatke mora datoteka vsebovati, če želimo, da se nam
koda požene na sistemu [8].
Zraven drugih stvari, nam ta xml omogoča:
hranjenje imena paketa programa, ki služi kot unikaten identifikator za aplikacijo [8],
opisuje komponente za aplikacijo, kot so aktivnosti, storitve, razpršeno sprejemanje
(»broadcast receivers«) in ponudnike vsebine iz katerih je aplikacija sestavljena [8],
določi kateri proces bo gostil komponente aplikacije [8],
določi katera dovoljenja mora aplikacija imeti za dostop do zaščitenih delov API-ja in
interakcijo z ostalimi aplikacijami [8],
prav tako določi dovoljenja, ki jih potrebujejo ostale aplikacije za interakcijo z njenimi
komponentami [8],
Mobilna aplikacija za organizacijo dogodkov
13
navaja razrede, ki ponujajo profiliranje in druge informacije med delovanjem
aplikacije [8],
določi minimalni nivo Android API-ja, ki ga telefon potrebuje za zagon aplikacije [8],
navaja knjižnice, s katerimi mora biti aplikacija povezana [8].
3.2.2 Nastavitve v programu
Najprej smo si ustvarili razne nastavitve, ki jih bo program med uporabo potreboval. Kot prvo
shranimo ime datoteke, ki bo hranila nastavitve. V našem primeru se bo imenovala Settings.
Zelo pomembno je, če so se že prenesli vsi kontakti iz imenika v aplikacijo, da nam ni
potrebno ob vsakem zagonu ponovno prenašati celotnega imenika, kar preverjamo z logično
spremenljivko savedContactsInDatabase. Shrani se tudi, če smo že preverili kontakte na
elektronskem naslovu Gmail v logično spremenljivko checkedGmail in kateri email smo
uporabili v spremenljivki niza email. Vse te nastavitve so vnaprej prirejene s privzetimi
vrednostmi in shranjene v razredu DefaultValues, ki se nahaja v paketu
com.flawlesscodeSMSDogodek.Settings, skupaj s še dvema razredoma, in sicer LoadSettings
ter Save Settings. LoadSettings skrbi za nalaganje shranjenih nastavitev v ostalih razredih,
SaveSettings pa za shranjevanje novih vrednosti za nastavitve.
3.2.3 Globalni razred
Za uporabo globalnega razreda v programu je potrebno najprej narediti manjšo spremebo v
AndroidManifest.xml dokumentu, in sicer pod xml značko dodamo novo lastnost z imenom
android:name in ji priredimo vrednost z imenom globalnega razreda. V našem primeru je to
GlobalClass. Nekaterih nastavitev ne potrebujemo ob ponovnem zagonu programa, ampak jih
lahko ustvarjamo sproti. Vse te nastavite hranimo v globalnem razredu, kjer imamo poleg
nastavitev shranjen tudi objekt in nekaj seznamov, s katerimi prenašamo podatke med razredi.
Večji del teh nastavitev se veže na ustvarjanje dogodka, torej na informacije kot so kraj, čas,
datum dogodka in ostale stvari povezane z njim. Kot smo že dejali, imamo tudi nekaj
seznamov. Dva izmed teh uporabljamo za prihajajoče in pretekle dogodke, saj s tem
dosežemo to, da nam ni potrebno vedno znova in znova dostopati do baze podatkov ob
izvajanju programa. Naložimo samo dogodke, ki smo jih že prebrali iz podatkovne baze in jih
shranimo v globalni razred. Imamo tudi nekaj logičnih spremenljivk, ki jih uporabljamo pri
animacijah in ostalih operacijah v programu. Sama globalna spremenljivka se definira povsem
običajno, s tem, da je potrebno implementirati po dve metodi za vsako spremenljivko, če jo
želimo prirejati ali dostopati do nje.
Mobilna aplikacija za organizacijo dogodkov
14
Slika 3.3: Uporaba globalnega razreda
3.2.4 Glavna aktivnost
Našo glavno aktivnost ustvarimo kot podrazred razreda Activity. To pomeni, da ta razred
povzame vse lastnosti in obnašanje razreda Activity in prav zaradi tega postane podrazred
aktivnost. Potem v funkciji onCreate povežemo razred s pogledom in ovrednotimo ostale
spremenljivke, ki jih bomo uporabljali v tem razredu. Spremenljivke smo si zapisali kot
globalne spremenljivke tega razreda, saj imamo ločeno inicializacijo in ustvarjanje
poslušalcev v funkcijah zaradi lepše preglednosti. Ob ustvaritvi aktivnosti takoj v niti
pričnemo s prenašanjem kontaktov iz imenika v ozadju, da nam čim prej prenese in ne moti
nekaterih drugih delov programa pri izvajanju te operacije. Če potem kliknemo na gumb za
ustvarjanje dogodka in kontakti še niso preneseni, nam prikaže dialog, ki sporoči, da se
kontakti prenašajo iz imenika. Ker uporabljamo način dela s fragmenti, moramo takoj ob
ustvarjanju aktivnosti tudi določiti, kateri fragment bo prvi, ki se bo prikazal na pogledu v
prostoru namenjenemu zanj. To naredimo v funkciji onCreate. Ustvarili smo še eno povsem
ločeno funkcijo za dodajanje novih ali odstranjevanje fragmentov. Imenuje se setFragment,
Mobilna aplikacija za organizacijo dogodkov
15
kličemo jo iz preostalih razredov, ki jih uporabljamo kot fragmente. S to funkcijo zamenjamo
stari pogled z novim, vključene so tudi določene animacije pri nekaterih pogledih.
Slika 3.4: Začetni pogled aplikacije
3.2.5 Fragment
Za fragment lahko rečemo, da je modularni del aktivnosti, ki ima svoj življenjski cikel in
sprejema svoje uporabniške vnose. Dodajamo ali odstranjujemo jih lahko dokler je aktivnost
aktivna. Še ena izmed prednosti je, da ga lahko ponovno uporabimo tudi v kateri drugi
aktivnosti, če je le-to potrebno. Pri nas te prednosti nismo izkoristili, ker ni bilo takega
scenarija, kjer bi jo lahko. Vsak fragment mora biti vgrajen v neko aktivnost, saj samostojno
ne more delovati. Vsaka sprememba v življenjskem ciklu aktivnosti takoj vpliva na sam
fragment. To pomeni, da kadar uničimo aktivnost posledično tudi uničimo vse fragmente, ki
Mobilna aplikacija za organizacijo dogodkov
16
se nahajajo v njej. Ko aktivnost normalno teče lahko poljubno odstranjujemo ali dodajamo
fragmente [15].
Vsak razred, ki smo ga ustvarili z namenom dela s fragmenti je razširjen z nadrazredom
Fragment. Tukaj že naletimo na prvo posebnost, in sicer razred se ne poveže s pogledom v
metodi onCreate, ampak v metodi onCreateView, ki mora obvezno vrniti pogled, ki se
prikaže na vnaprej pripravljenem prostoru za fragmente na pogledu. Ker smo v tej metodi
delali s pogledom smo poskrbeli še, da smo vse gradnike, ki jih uporabljamo v kodi
inicializirali v tej metodi. Drugih večjih razlik ni, morali smo samo paziti pri nekaterih
metodah, ki so zahtevale aktivnost kot enega izmed parametrov, da smo uporabili
getActivity() in ne rezervirano besedo this, kot je to mogoče v aktivnosti.
3.2.6 Dialog
Dialog je manjše okno, ki od uporabnika zahteva, da se o določeni stvari odloči ali vnese
nove, dodatne informacije ali pa obvesti o poteku naloge, ki se izvaja. Dialog običajno ne
zapolni celotnega zaslona in običajno zahteva akcijo uporabnika, preden lahko nadaljuje s
programom [14].
Slika 3.5: Dialog za nastavitev ure dogodka
Mobilna aplikacija za organizacijo dogodkov
17
V naši aplikaciji uporabljamo dve vrsti dialoga. Dialog, kjer pridobivamo določene
informacije od uporabika in dialog, ki nas obvesti o poteku prenosa kontaktov iz telefona, ki
se ne prikaže v vsakem scenariju. Vsem uporabljenim dialogom smo naredili povsem nove in
svoje poglede. Zaradi tega je bilo potrebno ustvariti tudi povsem nove razrede, ki dedujejo iz
nadrazreda Dialog. Struktura je podobna kot pri aktivnosti, razlika je le v tem, da dialoga ne
moremo dati na pavzo, ampak ga ustvarimo ali izbrišemo. Vse spremenljivke in poslušalci
uporabnikove akcije se ustvarijo v metodi onCreate(). V skoraj vsakem dialogu imamo še
funkcijo, ki preverja ali je uporabnik pritisnil na fizični gumb nazaj. Kot privzeti dialog se ob
kliku gumba nazaj ne zapre. To smo spremenili v funkciji onBackPressed() in vedno zapremo
dialog.
3.2.7 Adapter
Objekt Adapter se obnaša kot most med pogledom in podatki, ki se prikažejo na pogledu. To
pomeni, da poskrbi za dostop do podatkov elementa. Prav tako je zadolžen za izdelavo
pogleda za vsak element [1].
Slika 3.6: Primer prikaza kontakta v seznamu
V našem programu imamo štiri razrede, ki igrajo vlogo Adapterja in se uporabljajo za
elemente v seznamih. Ker želimo imeti pri izbiri kontaktov prikazano sliko in več kot en
podatek, moremo prirediti pogled elementa v seznamu. Zato ustvarimo povsem nov xml
pogled list_phonebook_contacts_item.xml, ki izgleda tako kot je prikazano na sliki (Slika 3.6).
Ker imamo kontakte v seznamu urejene kot skupino vsake črke abecede posebej, imamo še en
pogled, ki se obnaša kot glava pogleda skupine, ki je ustvarjen v
list_phonebook_contacts_header.xml. Ta pogled potem vključimo v razred, ki ga uporabimo
kot Adapter razred, v našem primeru PhoneBookAdapter.java, ki je razširjen z nadrazredom
BaseAdapter. Preden Adapterju dodamo podatke jih uredimo po vrsti in ustvarimo skupine
glede na prvo črko imena kontakta. Potrebno je še poudariti, da smo vse dobljene kontakte
shranili kot seznam objektov, pri katerih smo dodali še eno novo lastnost, in sicer logično
boolean lastnost isHeader, ki nam pove, če gre za glavo skupine ali ne. V našem Adapterju
Mobilna aplikacija za organizacijo dogodkov
18
ustvarimo razred ViewHolder, ki vsebuje spremenljivke, ki se bodo povezale z gradniki
pogleda za vsak posamezen element v seznamu. V funkciji getView() se spremenljivke
povežejo z gradniki in se jim priredijo vrednosti za vsak kontakt posebej. Tukaj preverjamo
ali je kontakt glava skupine ali ne, če je, se uporabi pogled za element glave skupine, če ne, se
uporabi pogled za normalni kontakt. Torej se za vsak element vrne nov pogled v seznamu, ki
se gradi sproti ob drsenju po seznamu kontaktov.
3.2.8 Database
Za delo z bazami skrbi Androidov paket android.package, ki vsebuje razrede za raziskovanje
in delo s podatki v njih [4].
Kot smo že omenili aplikacija hrani določene podatke kot so kontakti in seznam dogodkov v
podatkovni bazi. Zato imamo ločeni dve podatkovni bazi, ki imata vsaka po eno tabelo. Tukaj
vam bomo predstavili podatkovno bazo s shranjenimi dogodki. Najprej smo pripravili katere
podatke moremo shraniti v bazo podatkov za dogodek. Tako smo naredili deset statičnih
spremenljivk, ki hranijo id, ime, čas, datum, kraj dogodka, pripombo k dogodku, sporočilo, ki
je bilo poslano za ta dogodek in tri nize, kjer so shranjeni id-ji povabljenih kontakov, tiste, ki
so odklonili povabilo na dogodek ter tiste, ki so potrdili udeležbo na dogodku. Ustvarili smo
še ime podatkovne baze, ki se imenuje EVENTS in podatki so bili pripravljeni za ustvarjanje
tabele. Sama tabela se ustvari s pomočjo SQLiteDatabase razreda, ki ima že vnaprej napisane
metode za delo z bazami. Vsak dogodek, ki se je ustvaril in uspešno zaključil smo shranili v
to bazo. Za vsak dostop do baze v drugih aktivnostih zahteva, da se bazo odpre in po
zaključku dostopanja do nje tudi zapre. Zato smo ustvarili dve funkicji, open in close, ki
skrbita za uspešno odpiranje in zapiranje baze. Ko smo bazo uspešno odprli, smo dodali nov
dogodek s funkcijo addEvent, ki prejme vse potrebne parametre, ki smo jih našteli zgoraj, za
nov dogodek. Vsi ti podatki se shranijo v ContentValues, ki ga s funkcijo razreda
SQLiteDatabase insert shranimo v podatkovno bazo. V razredu za delo z bazo imamo še
nekaj drugih funkcij kot so pridobivanje vseh dogodkov, pridobivanje enega dogodka glede
na njegov id ter dve funkciji, s katerima posodobimo že obstoječi dogodek.
3.2.9 Contacts
Pri določanju prejemnikov sms sporočila za dogodek imamo na izbiro kontakte iz telefona in
kontakte iz Gmail računa.
Mobilna aplikacija za organizacijo dogodkov
19
Kontakte iz telefona prenesemo že ob pogonu glavne aktivnosti in jih shranimo v podatkovno
bazo. Sam postopek pridobivanja kontaktov iz telefona poteka tako, da se izvede projekcija
vseh kontaktov iz telefona v poseben objekt vmesnika Cursor. Ko to izvedemo, se
sprehodimo po vrnjenih rezultatih projekcije z while zanko, kjer ustvarimo za vsak kontakt
nov objekt tipa ContactsObject, v katerega shranimo potrebne podatke o vsakem kontaktu kot
so ime, številka, id, slika in za lastne potrebe še predlagano ime za lažje iskanje po imeniku.
Vse kontakte soritramo po abecedi glede na ime kontakta.
Slika 3.7: Izbira Gmail računa
Za kontakte iz Gmail naslova aplikacija potrebuje posebno dovoljenje za dostopanje do
Google računa. Do tega pridemo s pomočjo Googlove storitve OAuth. Postopek je naslednji:
najprej izberemo s katerim Gmail računom bi se radi povezali za prenos kontaktov. To
pomeni, da po vnaprej napisani funkciji, ki jo najdemo na uradni spletni strani, pridobimo vse
registrirane Gmail račune naprave. Med temi potem izberemo s katerim se želimo povezati in
nato pride do naslednjega koraka, ki je pridobivanje žetona za dostop. Za to imamo dva
Mobilna aplikacija za organizacijo dogodkov
20
načina za pridobivanje žetona, in sicer pridobivanje žetona v ospredju, kjer je celotno
pridobivanje vidno ter pridobivanje žetona v ozadju, ki izvede pridobivanje v ozadju z
določenimi obvestili v primeru napake [9].
V sami aplikaciji uporabljamo način pridobivanja žetona v ospredju. Pri tem postopku nas
aplikacija opozori, da bo dostopala do našega naslova in uporabila podatke v zvezi s kontakti
iz elektronskega naslova. Ko je vse to opravljeno, naši storitvi določimo žeton, ki smo ga
dobili in z našo funkcijo getAllContacts pridobimo vse kontakte, ki jih imamo shranjene v
Gmail računu in imajo telefonsko številko.
Slika 3.8: Dostop do Gmail računa
Mobilna aplikacija za organizacijo dogodkov
21
3.2.10 Pogled po meri
Android ogrodje ima velik nabor razredov za poglede, za interakcijo z uporabnikom in
prikazom vseh možnih podatkov. Pride pa do primerov, kjer potrebujemo pogled, ki ga ni v
osnovnem naboru ali pa potrebuje kakšno dodatno funkcionalnost za naše zahteve [11].
Eden takšnih naših pogledov je izbira ure za dogodek. Ta se vidi na dialogu in ima možnost
povečevanja in zmanjševanja številke za ena. V primeru, da vemo natančen čas lahko podatek
vnesemo sami s pomočjo tipkovnice. V te namene smo ustvarili dva nova pogleda. Eden
izmed njiju nima vizualnih sprememb, spremenjene so le funkcionalnosti, pri drugem pa je
ustvarjen povsem novi gradnik iz treh gradnikov
Najprej smo ustvarili razred z imenom EditTextNumeric, ki deduje od nadrazreda EditText.
Dodali smo mu dve spremenljivki, ki bosta veljali za območje številk, ki jih bomo imeli na
voljo pri izbiri. Torej maksimalno in minimalno možno število. V konstrukturju določimo
možnost vnosa samo v številski obliki, za kar se nam odpre privzeta tipkovnica številk
samega sistema. Ker smo naredili dve novi spremenljivki razreda, moramo ustvariti tudi dve
novi metodi, s katerima ju priredimo. Imenujeta se setMaxValue in setMinValue, pri čemer
vsaka prejme po en parameter tipa Integer, s katerim priredimo ti dve spremenljivki.
Prepišemo še metodo onTextChanged s katero preverjamo, če je vpisano oz. nastavljeno
število v našem prej določenem območju. Tako imamo sedaj pripravljen pogled za vnos števil
z omejitvami.
Slika 3.9: Številski izbirnik
Mobilna aplikacija za organizacijo dogodkov
22
Ko imamo pripravljen pogled za vnos števil z omejitvami, lahko pričnemo z izdelavo
številskega izbirnika. Za ta pogled ustvarimo povsem nov xml dokument z imenom
custom_number_picker.xml, v katerem grafično zgradimo nov pogled za izbiranje števil. V
tem pogledu že uporabimo prej narejen gradnik EditTextNumeric tako, da v xml v značko
zapišemo najprej paket, kjer se naš gradnik nahaja v projektu in njegovo ime. Zapis izgleda
tako: com.flawlesscode.SMSDogodek.Custom.EditTextNumeric. Dodamu mu še dva gumba,
enega nad in enega pod njim, za spreminjaje števila za eno navzgor ali navzdol. Potem smo za
njega ustvarili povsem nov razred, ki prevzame obnašanje LinearLayout-a in mu dodelimo
narejen pogled za naš novi gradnik. Tukaj potem ustvarimo vso logiko obnašanja tega
pogleda, kot je spreminjanje števila ob kliku na puščico gor ali dol in možnost vklopa ali
izklopa ročnega vnosa številk. Preverja se tudi, če so števila manjša kot 10. V primeru da so,
jih zaradi lepšega izgleda izpiše v obliki 01 in ne samo 1.
3.2.11 Pošiljanje povabil
Za pošiljanje SMS sporočil v naši kodi uporabljamo že vnaprej ustvarjen razred
SMSManager. SMSManager upravlja z SMS operacijami, kot so pošiljanje podatkov,
besedila in PDU SMS sporočil [21].
Za pošiljanje SMS sporočila moramo najprej ustvariti dovoljenje v AndroidManifest.xml z
imenom SEND_SMS za pravilno delo z SMSManager-jem. Najprej je potrebno ustvariti
privzeto instanco SMSManager-ja. To naredimo z že vnaprej pripravljeno funkcijo razreda
SMSManager z imenom getDefault(). Ker pričakujemo, da bo poslano sporočilo večje kot je
dovoljeno za pošiljanje enega samega sporočila, s funkcijo divideMessage, ki kot parameter
prejme sporočilo, razdeli besedilo sporočila v več delov, pri čemer noben del ni večji od
največje velikosti enega sporočila. Vsi deli se kot niz shranijo v ArrayList, ki se potem v
naslednji funkciji uporabi, kjer dejansko pošljemo sporočilo. V našem primeru imamo večje
sporočilo, zato uporabimo funkcijo sendMultipartTextMessage, ki kot parametre prejme
številko, kam naj se pošlje sporočilo, storitveni naslov SMSC, ki je lahko null, v tem primeru
vzame privzetega, besedilo sporočila, ki smo ga v prejšnjem koraku razdelili, seznam poslanih
namenov (ArrayList<PendingIntent> sentIntents), ki pregledujejo, če je sporočilo bilo
poslano in seznam dostavljenih namenov (ArrayList<PendingIntent> deliveryIntents), ki
pregledujejo, če je sporočilo bilo dostavljeno. Ker imamo več prejemnikov, moramo
pošiljanje izvesti v asinhronem opravilu v ozadju. Ker imamo implementirane takoimenovane
BroadcastReceiver-je, lahko z njimi preverjamo kdaj se del sporočila uspešno pošlje kontaktu,
Mobilna aplikacija za organizacijo dogodkov
23
ko se celotna vsebina besedila sporočila pošlje, se pošiljanje prestavi na naslednji kontakt.
Postopek pošiljanja sporočil je viden na naslednji sliki (Slika 3.10).
Slika 3.10: Programska koda pošiljanja SMS sporočil
Na voljo je več načinov pošiljanja sporočil, odvisno od poteka scenarija, ki ga imamo. V
primeru, da imamo enega samega prejemnika, lahko pošljemo sporočilo brez kakšne operacije
v ozadju. Na spodnji sliki je vidna funkcija, ki naredi kar smo pravkar opisali (Slika 3.11).
Mobilna aplikacija za organizacijo dogodkov
24
Slika 3.11: Pošiljanje sporočila z SMSManager
Sporočila lahko pošljemo tudi preko privzete aplikacije za pošiljanje sporočil, ki je nameščena
na sistemu (Slika 3.12). Žal so tu omejitve, ki jih ima program. V našem primeru imamo
sistemsko aplikacijo za pošiljanje sporočil, ki ima največje število prejemnikov 10, zato več
kot desetim osebam naenkrat sporočila ne gre poslati.
Slika 3.12: Pošiljanje sporočila preko privzete Android aplikacije za SMS
Za uporabnika je pomembno da ve, kaj se s pošiljanjem vabil na dogodek dogaja, koliko jih je
aplikacija že poslala. Za to smo implementirali vrstico napredka, ki spremlja in obvešča
Mobilna aplikacija za organizacijo dogodkov
25
uporabnika o poslanih sporočilih. Ob pritisku na gumb Pošlji v drugem pogledu ustvarjanja
dogodka se nam v vrstici stanj prikaže ikona našega programa. Ob razširjeni vrstici stanj se
nam prikaže dejanska vrstica stanj (Slika 3.13), ki nam pove koliko sporočil je program že
poslal in koliko jih še mora.
Slika 3.13: Potek pošiljanja sporočil
3.3 Grafični vmesnik
Ob zagonu aplikacije se najprej odpre pozdravna stran, ki pozdravi uporabnika. Ta stran traja
dve sekundi, nakar se samodejno odpre vmesnik, kjer lahko upravljamo z dogodki. Povsem na
vrhu imamo tako imenovani »Action bar«, ki je viden skozi celotno aplikacijo in se na njem
Mobilna aplikacija za organizacijo dogodkov
26
pri nekaterih pogledih pojavijo gumbi. Pod akcijsko vrstico imamo vsebino pogleda, ki se
menja glede na opravljeno operacijo v programu. Uporabili smo vertikalne in horizontalne
sezname, ostalih posebnosti pa v aplikaciji ni. Vse te poglede smo ustvarili v »layout editor-
ju«, kjer smo gradnike premaknili in pozincionirali na okno pogleda. Vsa grafika je bila
ustvarjena s Paint.NET programom.
3.4 Delovanje programa
Na prvi strani programa imamo seznam prihajajočih dogodkov in gumbe. Najprej se nam
prikaže seznam dogodkov, ki so urejeni po datumu. Za vsak dogodek je zapisano ime, kraj,
datum in ura dogodka. Zapisano je tudi koliko oseb je povabljenih na dogodek in koliko jih je
potrdilo ali zavrnilo povabilo. Čisto spodaj imamo tri gumbe, in sicer levi gumb za
prihajajoče dogodke, desni je za pretekle, sredinski gumb v obliki plusa, pa je namenjen
ustvarjanju novega dogodka. Ob kliku na posamezen dogodek v seznamu se nam pokažejo
podrobnejše informacije o dogodku (katere osebe se ga bodo udeležile, katere so odklonile in
katere so povabljene). Najprej se prikažejo prihajajoči dogodki urejeni po datumu od
trenutnega dne. Dogodek, ki se bo zgodil najprej je na prvem mestu in tako naprej. Vpogled
imamo tudi v pretekle dogodke in to tako, da v začetnem oknu spodaj desno pritisnemo na
gumb PRETEKLI. Med obema gumboma prihajajočih in preteklih dogodkov imamo en velik,
okrogel gumb s plus znakom na sredini.
Mobilna aplikacija za organizacijo dogodkov
27
Slika 3.14: Seznam preteklih dogodkov
S klikom nanj pridemo v obrazec, kjer ustvarimo nov dogodek in nanj povabimo osebe. Za
vsak nov dogodek je potrebno napisati ime, kraj, uro in datum dogodka, potrebno je določiti
vsaj enega prejemnika, poljubno se pa lahko vpiše kakšna opomba k dogodku. Aplikacija
potem sama ustvari sporočilo, ki ga lahko uporabnik v naslednjem koraku poljubno spremeni.
Na tem mestu lahko tudi odstrani katerega od prejemnikov. Ob kliku na gumb POŠLJI se bo
sporočilo poslalo prejemnikom preko SMS-a in prikazala se bo začena stran aplikacije s
seznamom prihajajočih dogodkov. Ob kliku na vsak dogodek v seznamu prihajajočih in
preteklih dogodkov, se nam odpre povsem novo okno z informacijami o dogodku in osebah,
ki so povabljene na dogodek.
Mobilna aplikacija za organizacijo dogodkov
28
Slika 3.15: Dodajanje novega dogodka (obrazec)
3.4.1 Primerjava konkurence
Kot že rečeno je konkurenca naši aplikaciji obstoječa Povabi.si. Za njeno delovanje se je
potrebno registrirati na njihov sistem s telefonsko številko, elektronskim naslovom in imenom
in priimkom. Že tukaj naletimo na slabost, saj je potrebno pri menjavi telefonske številke
ustvariti nov račun, ki se bo povezal z novo številko. Sicer se da prijaviti v sistem tudi s staro
številko in sistem deluje enako kot drugače, ampak bi to lahko boljše rešili in telefonsko
številko zamenjali z elektronskim naslovom, ki je prav tako edinstveni. Težava nastane tudi
pri prijavi v aplikacijo, saj za njeno prijavo potrebujemo internetni dostop in je posledično
aplikacija brez povezave neuporabna. Po uspešni prijavi se nam prikaže seznam dogodkov, ki
Mobilna aplikacija za organizacijo dogodkov
29
jih ustvari uporabnik, preklapljamo pa lahko s seznamom dogodkov, na ketere je uporabnik
povabljen. Ob pritisku na gumb Organiziraj dogodek se nam prikaže obrazec, kjer izpolnimo
potrebne podatke za organizacijo dogodka. Vnos podatkov je približno enak, s to razliko, da
je pri Povabi.si možnost minimalnega ali maksimalnega števila prijav in določitev časa, kdaj
se naj vabila pošljejo. V tem obrazcu ni nikjer vidno kje lahko določiš prejemnike, saj ima
aplikacija za to povsem svoj postopek. Najprej je potrebno pritisniti fizični gumb za meni in
šele potem lahko izberemo možnost Dodaj prejemnike, za kar se nam odpre novo okno s
seznamom kontaktov iz telefona. Zaradi dolgega nalaganja kontaktov predvidevamo, da ob
vsakem ponovnem dodajanju prejemnikov zaganja aplikacija ponovno branje iz imenika, kar
je zelo potratno in v nekaterih primerih dolgotrajno. Med izbiranjem kontaktov imamo tudi
možnost izbire vseh kontaktov ali vnosa novega kontakta. Opazili smo, da ima aplikacija pri
dodajanju novega kontakta, za katerega so vneseni pravilni podatki napako, saj aplikacija
ustavi svoje izvajanje. Ko imamo pravilno izpolnjene vse potrebne podatke, lahko povabimo
določene kontakte na dogodek. Tukaj se prikaže koga smo povabili in da je bilo sporočilo
uspešno dostavljeno. Uspešno ustvarjen dogodek se nam shrani in prikaže v seznamu
uporabnikovih ustvarjenih dogodkov in ob kliku nanj se prikažejo podrobnosti dogodka.
Potem ima aplikacija tudi možnost pogleda kopiranja dogodkov, kar pomeni, da nam
aplikacija sama ustvari dogodek z informacijami in kontakti tega dogodka. Omogoča nam tudi
pogled odgovorjenih sporočil kontaktov na dogodek, ki smo ga poslali. Za dogodke, ki se še
niso začeli, je možno poslati osebam, povezanim s tem dogodkom novo sporočilo in jih
obvestiti o prihajajočem dogodku.
Mobilna aplikacija za organizacijo dogodkov
30
Slika 3.16: Izgled aplikacije Povabi.si
Če primerjamo našo aplikacijo SMSDogodek in aplikacijo Povabi.si ugotovimo, da je delo z
našo aplikacijo veliko bolj tekoče in preprosto za uporabnika. Povabi.si ima določene
prednosti pri funkcionalnostih, katerih naša aplikacija ne omogoča, ima pa tudi nekaj slabosti,
ki so že naštete zgoraj. Sama grafična podoba je pri naši aplikaciji veliko bolj konsistentna in
pregledna, ko pridemo v aplikacijo so najpomembnejše funkcionalnosti takoj na dosegu in so
lepo ločene med seboj. Potrebno je še omeniti, da so pri aplikaciji Povabi.si na voljo
pošiljanja in ustvarjanja le za en dogodek. V primeru več organiziranih dogodkov je cena
enega 1€.
3.5 Testiranje
Pri testiranju smo se odločili, da bomo poskusili pognati našo aplikacijo na treh različnih
mobilnikih z različnimi dimenzijami zaslona. Kot prvi pogoj smo določili verzijo
operacijskega sistema, saj je aplikacija podprta le za mobilne telefone z nameščeno verzijo 4.0
ali višjo, saj je uporaba teh telefonov najbolj pogosta. Odločili smo se, da bomo aplikacijo
Mobilna aplikacija za organizacijo dogodkov
31
poskusili na telefonih Samsung Galaxy Note 2, HTC Sensation Z710e in Motorola Moto G.
Pri vseh smo ustvarili dogodek in nanj povabili 10 kontaktov.
3.5.1 Samsung Galaxy Note 2
Naprava (Slika 3.17) ima nameščeno zadnjo verzijo Jelly Bean Android sistema in ima za
prikazovanje zaslon resolucije 720x1280 pik. Poganja ga 4-jedrni procesor, ki deluje z 1.6
GHz frekvence na jedro in pomnilnik velikosti 2 GB.
Slika 3.17: Samsung Galaxy Note II [16]
Aplikacija SMSDogodek dela na tem telefonu brezhibno, saj je bila ves čas ustvarjanja
testirana ravno na tem aparatu. Telefon ima shranjenih 552 kontaktov, zato je pri njihovem
branju in shranjevanju prišlo do manjšega čakanja. Vsa sporočila so bila uspešno poslana in
tudi hitro dostavljena. Povratni odgovori so se pravilno in uspešno uvrstili v statistiko za
dogodek.
3.5.2 HTC Sensation Z710e
Naprava znamke HTC (Slika 3.18) poganja Ice Cream Sandwich Android sistem z zaslonom
resolucije 540x960 pik. Poganja ga 2-jedrni procesor s hitrostjo 1.2 GHz in pomnilnikom
velikosti 768 MB.
Mobilna aplikacija za organizacijo dogodkov
32
Slika 3.18: HTC Sensation Z710e [17]
Aplikacija je na telefonu delovala brezhibno. Grafični gradniki so bili prikazani tako kot je
potrebno, brez zamikov ali povečav. Branje kontaktov je bilo hitro, saj je aparat imel na voljo
le 61 kontaktov. Vsa sporočila so bila uspešno poslana, nekatera so bila dostavljena z manjšo
zamudo, za kar ni kriva aplikacija sama, ampak signal aparata, na katerega je bilo sporočilo
poslano. Odgovori na sporočilo so bili uspešno beleženi in pravilno razporejeni v statistiko.
3.5.3 Motorola Moto G
Telefon znamke Motorola (Slika 3.19) poganja KitKat Android sistem verzije 4.4.2 z
zaslonom resolucije 720x1280 pik. Poganja ga 4-jedrni procesor s hitrostjo 1.2 GHz in
pomnilnikom velikosti 1 GB.
Mobilna aplikacija za organizacijo dogodkov
33
Slika 3.19: Motorola Moto G [20]
Aparat je imel shranjenih 66 kontaktov in njihovo branje je potekalo najhitreje od vseh
testiranih naprav. Dialog o napredku se je v najslabšem možnem scenariju pokazal le za
trenutek. Sporočila so bila uspešno poslana vsem kontaktom, odgovori na dogodek so bili
uspešno sprejeti in pravilno razvrščeni v statistiko. Grafično je imela aplikacija manjše
pomanjkljivosti, saj gumb ni bil lepo prikazan zaradi prevelike vsebine teksta v njem. To smo
kasneje odpravili s pomanjšano velikostjo pisave.
Mobilna aplikacija za organizacijo dogodkov
34
4 Zaključek
V okviru diplomske naloge smo implementirali mobilno aplikacijo, s katero ustvarjamo
dogodke. Na njih povabimo osebe in potem beležimo statistiko vseh povabljenih, tistih, ki so
povabilo odklonili in tistih, ki se bodo dogodka udeležili.
Najprej smo načrtovali zgradbo programske strukture in potem pričeli z implementacijo
programa. Uspešno smo izdelali grafični vmesnik, na katerem smo potem gradili logiko
delovanja programa. Pri implementaciji smo si pomagali z že vgrajenimi razredi. Po potrebi
smo nadgradili in razširili te razrede z določenimi svojimi funkcionalnostmi. Aplikaciji smo
določili tudi nekaj pravic do dostopanja določenih funkcionalnosti sistema.
Ko smo imeli aplikacijo dokončno narejeno, smo jo testirali na raznih napravah, ter določili
njene minimalne zahteve za delovanje. Zaradi velikega spektra naprav in proizvajalcev, ki
imajo nameščen mobilni operacijski sistem Android, smo bili omejeni na testiranje programa
na napravah, ki smo jih imeli na voljo.
Na novo smo spoznali postopek pridobitve kontaktov iz elektronskega računa Gmail in
postopek za pošiljanje SMS sporočil. Tako smo nadgradili svoje znanje iz področja
programiranja aplikacij za mobilni OS Android.
Mobilna aplikacija za organizacijo dogodkov
35
VIRI
[1] Adapter | Android Developers. Dostopno na:
http://developer.android.com/reference/android/widget/Adapter.html [24.8.2014]
[2] Android (Operacijski sistem). Dostopno na:
http://sl.wikipedia.org/wiki/Android_(operacijski_sistem) [5.8.2014]
[3] Android (Operating system). Dostopno na:
http://en.wikipedia.org/wiki/Android_(operating_system) [5.8.2014]
[4] Android Database | Android Developers. Dostopno na:
http://developer.android.com/reference/android/database/package-summary.html
[25.8.2014]
[5] Android interface
http://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Android_notification_ar
ea.png/220px-Android_notification_area.png [5.8.2014]
[6] Android Logo (2000x 1863). Dostopno na:
http://www.ranklogos.com/wp-content/uploads/2012/04/Android-logo.png [24.8.2014]
[7] Android Version History. Dostopno na:
http://en.wikipedia.org/wiki/Android_version_history [8.8.2014]
[8] App Manifest | Android Developers. Dostopno na:
http://developer.android.com/guide/topics/manifest/manifest-intro.html [22.8.2014]
[9] Authorization | Android Developers. Dostopno na:
http://developer.android.com/google/play-services/auth.html [15.8.2014]
Mobilna aplikacija za organizacijo dogodkov
36
[10] Canvas and Drawables | Android Developers
http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
[16.8.2014]
[11] Creating Custom View | Android Developers. Dostopno na:
http://developer.android.com/training/custom-views/index.html [26.8.2014]
[12] Dashboard | Android Developers. Dostopno na:
https://developer.android.com/about/dashboards/index.html?utm_source=ausdroid.net
[7.8.2014]
[13] Devices | Android Developers. Dostopno na:
http://developer.android.com/design/style/devices-displays.html [26.8.2014]
[14] Dialog | Android Developers. Dostopno na:
http://developer.android.com/guide/topics/ui/dialogs.html [24.8.2014]
[15] Fragments. Dostopno na:
http://developer.android.com/guide/components/fragments.html [22.8.2014]
[16] GALAXY Note II (2400×2800). Dostopno na:
http://www.androidrundown.com/wp-content/uploads/2012/08/GALAXY-Note-II-
Product-Image-5.jpg [28.8.2014]
[17] HTC Sensation Z710e (480×480). Dostopno na:
http://www.millennius.com/wp-content/uploads/2013/07/HTC-Sensation-Z710e-
UNLOCKED-1.jpg [28.8.2014]
[18] IDC: Smartphone OS Market Share 2014, 2013, 2012, and 2011. Dostopno na:
http://www.idc.com/prodserv/smartphone-os-market-share.jsp [5.8.2014]
[19] Intruducing ART | Android Developers. Dostopno na:
https://source.android.com/devices/tech/dalvik/art.html [11.8.2014]
Mobilna aplikacija za organizacijo dogodkov
37
[20] Motorola Moto G (1500×1125)
http://i.mlcdn.com.br/1500x1500/smartphone-motorola-moto-g-dual-chip-3g-cam.-
5mpandroid-4.3-tela-4.5-34-proc.-quad-core-com-4-capas-086735600.jpg [28.8.2014]
[21] SMSManager | Android Developers. Dostopno na:
http://developer.android.com/reference/android/telephony/SmsManager.html
[20.8.2014]
[22] Starting an Activity. Dostopno na:
http://developer.android.com/training/basics/activity-lifecycle/starting.html [9.8.2014]