50
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 UM FERIMobilna aplikacija za organizacijo dogodkov xii Seznam uporabljenih kratic SMS – Short Message Service VM – Virtual machine OS

  • 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

i

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

iii

Mobilna aplikacija za organizacijo dogodkov

iv

Mobilna aplikacija za organizacijo dogodkov

v

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]