Vysoká škola ekonomická v Praze



Podobné dokumenty
MATURITNÍ PRÁCE dokumentace

Sem vložte zadání Vaší práce.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Mobilní malware na platformě Android Přednáška 1. Ing. Milan Oulehla

Obsah. Úvod 11. Vytvoření emulátoru 20 Vytvoření emulátoru platformy Android 4.4 Wearable 22 Spouštění aplikací na reálném zařízení 23

Android 100% Java telefon. Petr Musil

ROZVOJ ICT A PDA ZAŘÍZENÍ THE DEVELOPMENT OF ICT AND PDA DEVICES Jiří Vaněk

OSOBNÍ PLÁNOVAČ FINANCÍ PRO OS ANDROID

Obsah. Úvodem KAPITOLA 1 Začínáme KAPITOLA 2 Projekty a jejich cíle...25

Mobilní malware na platformě Android Přednáška 2. Ing. Milan Oulehla

DATA ARTICLE. AiP Beroun s.r.o.

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

Projekty pro výuku programování v jazyce Java

Statistica, kdo je kdo?

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Mid Android M001, M002, M003

funkční na dual-sim telefonech možnost přesměrovat příchozí hovory možnost nastavení více telefonních čísel pro případ, že je jedno nedostupné

VAR-NET INTEGRAL Manuál správce VNI 5.1 VAR-NET INTEGRAL. verze 0.2. Manuál správce VNI 5.1

Chytré hodinky S9. Uživatelský manuál. Přečtěte si prosím tento manuál pozorně dříve, než začnete hodinky používat

3D Vizualizace muzea vojenské výzbroje

ZoomText 10.1 pro Windows. Dodatek k uživatelské příručce

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Databázový systém Matylda

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

VYTVÁŘENÍ OBSAHU KURZŮ

MapleCloud a jeho použ ití. Vladimír Žák

1. ÚVOD 2. ARCHITEKTURA MOBILNÍHO TERMINÁLU 2.1. HARDWARE TERMINÁLU PRO SYMBIAN OS S OS SYMBIAN 2009/

XAMARIN 10 PRAKTICKÝCH ZKUŠENOSTÍ. Roman Fischer

Základní programové vybavení počítače

Android. Programujeme pro. Jiří Vávrů, Miroslav Ujbányai. DRUHÉ, rozší řené v ydání

Uživatelský manuál. Mobilní platební terminál icmp pro operační systémy Android a ios

O aplikaci Parallels Desktop 7 for Mac

DOTYKOVÉ UŽIVATELSKÉ ROZHRANÍ PRO EDITOR

Manuál programu HPSim

Mobilní aplikace Novell Filr Stručný úvod

Android. Programujeme pro. Jiří Vávrů, Miroslav Ujbányai. DRUHÉ, rozší řené v ydání

Mobilní aplikace Průvodce po MENDELU

NÁVOD jak na webinář přes WizIQ

InTouch 8.0 Subsystém distribuovaných alarmů

Výklad učiva: Co je to počítač?

Uživatelský manuál na obsluhu mobilní aplikace CMOB

Manuál práce s dataloggerem Xplorer GLX

Point of View TAB-P731N- Android 4.0 Tablet PC. Čeština. Obsah

Analýza dat na PC I.

Manuál administrátora FMS...2

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Začínáme s vývojem pro Android

Workmonitor. Servisní návod. 24. června 2014 w w w. p a p o u c h. c o m

Uživatelský manuál. (cz) Tablet S7.1

LuxRiot uživatelský manuál verze Uživatelský manuál Verze , Stasa s.r.o.,pokorného 14, , PRAHA

Sciphone I68+ Rychlý návod

UMAX. VisionBook 10Wi. Uživatelská příručka

PV239/WP. Vývoj univerzálních Windows Store aplikací. Mgr. David Gešvindr MCSD: Windows Store MCSE: Data Platform MCT MSP

Stavba operačního systému

CTUGuide (XXX-KOS) D1

Vestavné systémy BI-VES Přednáška 10

Úvod...12 Součásti aplikace Použité konvence... 13

Ovladač Fiery Driver pro systém Mac OS

A7B39TUR Testování uživatelského rozhraní. HTC Desire HD. (testování mobilního zařízení) Tomáš Klejna

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

Windows. snadno a rychle

Interaktivní mapy ÚAP Uživatelská příručka

Obsah. Kapitola 1 Stažení a instalace Kapitola 2 Orientace v programu a základní nastavení Úvod... 9

CORVUS Accessible kit for Android. Rodina aplikací zpřístupňující mobilní telefony s operačním systémem Android i nevidomým a slabozrakým uživatelům

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

Ovládání systému inels a imm v OS Android

GOCLEVER FONE 500 NÁVOD K OBSLUZE

Přehled verzí aplikace WinTechnol

CE - Prohlášení Prohlašujeme, že TEAC MEDIA SYSTEMS IP-20 USB Telefon splňuje následující normy a dokumenty: EMC Directive 89/336 / EEC

Manuál k aplikaci SDO PILOT v.0.2

Návod na použití Konfigurační softvér DJ LCD config v1.3

Úvod do počítačové grafiky

LV5WDR Wireless Display Receiver Rychlá příručka

KMI / TMA Tvorba mobilních aplikací. 2. seminář ZS 2016/2017 Středa 13:15-15:45

Vývoj aplikací na platformě Windows Mobile. Vysoká škola ekonomická v Praze. Fakulta informatiky a statistiky. Katedra informačních technologií

MOBILNÍ OVLÁDAČ PC (MOBIL JAKO VZDÁLENÉ OVLÁDÁNÍ) MOBILE CONTROLLER FOR PC (MOBILE PHONE AS REMOTE CONTROLLER)

Instalace produktu Ontopia. ver (open-source verze)

Uživatelský manuál Radekce-Online.cz

ZÁVĚREČNÁ STUDIJNÍ PRÁCE dokumentace

Operační systémy (OS)

českém Úvod Obsah krabice Specifikace Požadavky na systém SWEEX.COM IP001 Sweex USB Internet Phone with Display

Návod pro mobilní telefony s operačním systémem Google Android 5.x.x

Vzdálené řízení modelu připojeného k programovatelnému automatu

Tablet SAMSUNG GALAXY NOTE Popis a používání zařízení ve výuce


FTC08 instalační manuál k dotykovému panelu systému Foxys

Představení telefonu

Naučit se, jak co nejsnadněji přejít od verze TopoLu pro Windows k verzi TopoL xt. Cílem není vysvětlení všech možností programu.

Uživatelská příručka k webové kameře HP Elite Autofocus

INSTALACE DATABÁZE ORACLE A SYSTÉMU ABRA NA OS WINDOWS

BEZDRÁTOVÉ PROPOJENÍ ROZHRANÍ LABQUEST 2

}w!"#$%&'()+,-./012345<ya

TouchPad a klávesnice

Uživatelská příručka ClinkMe

Obsah. Životní cyklus activity Context Intent Spouštění aktivit Interakce s uživatelem. Toast. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant

Responzivní web. Co je mobilní verze webové stránky?

Anglická slovíčka

Základy informatiky. Operační systémy

KMI / TMA Tvorba mobilních aplikací

Transkript:

Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií Student: Vedoucí bakalářské práce: Oponent bakalářské práce: Josef Vacula doc. Ing. Alena Buchalcevová, Ph.D Ing. Rudolf Pecinovský, CSc. TÉMA BAKALÁŘSKÉ PRÁCE Vývoj aplikací pro Google Android Rok: 2011

Prohlášení Prohlašuji, že jsem bakalářskou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze kterých jsem čerpal. V Rudné dne 6. 5. 2011 podpis

Poděkování Rád bych zde poděkoval paní doc. Ing. Aleně Buchalcevové, Ph.D za možnost volby vlastního téma, trpělivost a cenné připomínky během vedení mé práce.

Abstrakt Cílem této práce je přiblížení čtenářům vývoj pro operační systém Android. Práce je rozdělena do několika částí. První část je věnována samotnému operačnímu systému a popisu vývojových nástrojů určených k tvorbě softwaru pro Android. V další části se práce zaměřuje na základní pilíře všech Android aplikací, které jsou nutné pro úspěšné programování na této platformě. Věnuji se zde především životnímu cyklu aplikace, komunikaci komponent aplikace a práci s aplikačními daty. Celá kapitola je zde věnována tvorbě uživatelského rozhraní, ve které jsou mimo jiné popsány nejpoužívanější grafické prvky. Poslední část práce ukazuje aplikaci popsané teorie na praktickém příkladu. Klíčová slova: Google Android, operační systém Android, programování pro Android, Android zařízení, Android aplikace Abstract This bachelor thesis describes development of applications for Android operating system. The paper is divided into several parts. In the first part, Android operating system is described together with development tools, which are used for development of Android software. The next part of this paper focuses on fundamental blocks of all Android applications, which are necessary for successful development. It includes especially the life cycle of applications, inner communication of application components and working with application data. The whole chapter is dedicated here to graphic user interfaces, where among other things the most used graphic components are described. The last part of the thesis shows previously described theory on a practical example. Key words: Google Android, Android operating system, development for Android, Android devices, Android applications

Obsah 1. Úvod... 1 1.1. Vymezení tématu... 1 1.2. Důvod výběru tématu... 1 1.3. Cíle práce... 2 1.4. Metoda dosažení cílů... 2 1.5. Předpoklady a omezení práce... 2 1.6. Struktura práce... 3 2. Platforma Google Android... 4 2.1. Historie Android OS... 4 2.2. Dalvik VM... 5 2.3. Architektura Android OS... 6 3. Vývojové prostředí... 8 3.1. Dokumentace k Android SDK... 8 3.2. Android emulátor... 9 3.3. Dalvik Debug Monitor Service... 11 3.4. Další nástroje SDK... 12 4. Tvorba aplikací pro Android... 13 4.1. Aktivita a životní cyklus aplikace... 13 4.2. Intent a komunikace komponent aplikace... 14 4.3. AndroidManifest... 15 4.4. Ukládání dat... 17 4.4.1. SharedPreferences... 17 4.4.2. XML soubory... 17 4.4.3. Databáze... 18 4.4.4. Binární soubory... 19

4.5. Struktura Android aplikace... 20 4.6. Přehled základních Java balíčků pro Android... 20 5. Uživatelské rozhraní... 23 5.1. Typy správců rozvržení... 24 5.1.1. Linear Layout... 24 5.1.2. Relative Layout... 25 5.1.3. Frame Layout... 26 5.1.4. Table Layout... 27 5.2. Základní View prvky GUI... 27 5.3. Další ovládací prvky... 28 5.3.1. Menu... 28 5.3.2. Dialogy... 30 5.3.3. Notifikace... 31 5.4. Práce s GUI pomocí Javy... 32 5.5. Tvorba GUI pomocí Layout Resource Editor... 33 6. Ukázková aplikace - Správa obchodu... 35 6.1. Zadání Aplikace... 35 6.2. Návrh řešení... 36 6.2.1. Uživatelská struktura aplikace... 36 6.2.2. Ukládání dat... 37 6.3. Řešení klíčových částí aplikace... 38 6.3.1. Uzivatel a UzivatelDBAdapter... 38 6.3.2. Napojení logiky na uživatelské rozhraní... 41 7. Závěr... 44 8. Bibliografie... 45 9. Terminologický slovník... 47

10. Přílohy... 49

1. Úvod Většina lidí v rozvinutých zemích dnes vlastní alespoň jedno mobilní zařízení. Mobilním zařízením může být mobilní telefon, chytrý telefon, tablet, PDA či jiný komunikátor. Nároky na mobilní zařízení se neustále rok od roku zvyšují. Zatímco před deseti lety uživatelům postačovalo, když si mohli s mobilním telefonem zavolat či poslat SMS, dnes uživatelé vyžadují mnohem širší funkcionalitu - rychlá datová připojení, GPS, fotoaparát, se kterým souvisí online sdílení fotografií, přístup na sociální sítě a další. Dnešní výrobci zařízení se snaží nabídnout uživatelům co nejvíce funkcí. Každé mobilní zařízení má svůj operační systém. Operační systém umožňuje nahrání dalších aplikací, které mohou měnit stávající funkcionalitu zařízení či přidávat nové funkce. Mezi nejpoužívanější operační systémy v mobilních zařízeních (1) patří Symbian, Android, Windows Mobile, ios, BlackBerry OS a webos (bývalý PalmOS). Android je open-source operační systém od firmy Google, určený primárně pro mobilní zařízení. Jedná se o první kompletní otevřenou platformu, která je zdarma. Prvním veřejnosti dostupným telefonem s OS Android se stal ke konci roku 2008 HTC Dream (2). Od té doby popularita Androidu silně stoupá, během roku 2010 vzrostl počet prodaných telefonů s OS Android o 888,8 % (1). 22,7 % prodaných telefonů s otevřeným OS bylo v posledním čtvrtletí roku 2010 s Androidem. Android se tak stal 2. nejpoužívanějším OS v mobilních telefonech. 1.1. Vymezení tématu Práce se věnuje komplexně operačnímu systému Android, základním nástrojům a specifikám vývoje, se kterými se setká každý programátor, který vyvíjí aplikace pro tento systém. Práce se zabývá pouze vývojem pro platformu Android a předpokládá u čtenáře alespoň základní znalosti objektového programování v Javě, znalost XML a jazyka SQL. 1.2. Důvod výběru tématu Již od mého prvního kapesního počítače, kterým se stal asi před devíti lety Compaq ipaq H3630 s operačním systémem Windows CE 3.0, jsem se pokoušel Stránka 1 z 49

o programování aplikací pro tato zařízení. To bylo vždy mým koníčkem, problémem však byly mé nepříliš dobré znalosti programovacího jazyka C++, ve kterém se pro zařízení s operačními systémy Windows CE programovalo. Navíc v té době neexistovalo mnoho příruček, které by srozumitelně pro začátečníka popisovaly vývoj pro tuto platformu. Na Vysoké škole ekonomické jsem si v rámci předmětů 4IT101 - Základy programování a 4IT115 - Základy softwarového inženýrství osvojil objektové programování v Javě a jakmile jsem se dozvěděl, že pro zařízení s operačním systémem Android se programuje v Javě, rozhodl jsem se zakoupit si telefon HTC Desire, který běží na tomto systému, a vyzkoušet programování pro tento systém. Po konzultaci s paní doc. Ing. Alenou Buchalcevovou, Ph.D jsem se rozhodl zpracovat toto téma. 1.3. Cíle práce Za cíl této práce jsem si dal demonstraci vývoje pro zařízení s operačním systémem Android, která by posloužila začínajícím Android programátorům pro seznámení se s vývojovými nástroji, samotným operačním systémem Android a technikami programování pro tuto platformu. Zároveň by také poskytla informace o tom, ze kterých zdrojů lze čerpat další informace, které by prohloubily problematiku popisovanou v této práci. 1.4. Metoda dosažení cílů Pro splnění cílů nejdříve popisuji strukturu a specifikace operačního systému Android, představuji klíčové vývojové nástroje a rozepisuji se o jejich funkcích a jejich praktickém využití. V další teoretické části se věnuji základním stavebním prvkům aplikací pro Android a problematice návrhu uživatelského rozhraní. V poslední kapitole dokumentuji předchozí teorii při použití v praxi na ukázkové aplikaci. 1.5. Předpoklady a omezení práce Předpoklady pro tuto práci jsem již nastínil výše, jsou jimi především základní znalosti objektového programování v Javě a jazyků XML a SQL. Potřebné znalosti mohou čtenáři získat z knih Úvod do Javy (3), XML pro každého (4) a Myslíme v jazyku SQL (5). Tyto knihy mohu osobně doporučit. Stránka 2 z 49

Práce se soustředí pouze na vývoj v prostředí Eclipse, popis vývojových nástrojů je ale platný i nad rámec tohoto omezení. Problematika programování pro Android je rozsáhlá, v této práci se budu zabývat především základními věcmi, které jsou nutností, tvoří základ všech aplikací pro Android. 1.6. Struktura práce Práce je rozdělena do jednotlivých kapitol, které provádí čtenáře od popisu vývojových nástrojů až po praktickou tvorbu aplikace. Kapitola 2 definuje základní pojmy a specifikaci systému Android. Kapitola 3 se zabývá dostupnými vývojovými nástroji, kapitola 4 potom základy programování aplikací pro Android. V kapitole 5 je demonstrována tvorba uživatelského rozhraní a kapitola 6 předvádí teoretický popis předchozích kapitol do praxe na ukázkové aplikaci. Stránka 3 z 49

2. Platforma Google Android Platforma Google Android se snaží o převedení plnohodnotného operačního systému do mobilních zařízení (2). Android je založený na Linuxu, ze kterého přejímá funkce jádra pro správu zařízení, paměti a procesů. Dále obsahuje knihovny speciálně vyvinuté pro Android, které se starají o funkce telefonu, videa, grafiky, uživatelského prostředí a další funkčnosti mobilních zařízení, viz obr. č. 1. Ačkoliv se jedná o mobilní platformu, při vývoji je k dispozici většina knihoven, které se používají na vývoj pro běžné stolní počítače či servery. Komponenty vlastní platformy jsou většinou naprogramované v nízkoúrovňových jazycích, nejčastěji v C a C++ (2). Aplikace běžící na Androidu jsou pak programovány v Javě. Obrázek č.1 - Architektura Google Android (2) 2.1. Historie Android OS Společnost Android Inc. zakoupil Google v roce 2005 s cílem vyvíjet svoji vlastní mobilní platformu (6). V roce 2007 vznikla skupina zvaná Open Handset Alliance, jejímž Stránka 4 z 49

hlavním cílem je rychlejší, kvalitnější a levnější vývoj OS Android. Členové této skupiny se zavázali k šíření platformy Android pod open source licencí Apache Software License verze 2.0. Díky tomu výrobci mobilních zařízení nemusí platit žádné licenční poplatky za použití OS Android v jejich produktech. První telefon s Android OS 1.0 - T-Mobile G1 byl uveden na trh v září roku 2008. O několik dní později Google vydal Android SDK 1.0. V roce 2008 ještě Google představil verze 1.1 a 1.5. Verze 1.5 přinesla mimo jiné podporu pro softwarové klávesnice. Dnes používané verze Android OS 1.6 a 2.0 byly vydány krátce po sobě v roce 2009. Tyto verze přidaly do Android OS funkce jako text to speech 1, nebo multitouch 2. Došlo k optimalizacím systému, výrazně se zrychlily reakce na podněty uživatelů. Android se tak stal konkurenceschopným operačním systémem na poli mobilních zařízení. 2.2. Dalvik VM Programátoři z firmy Google strávili hodně času přemýšlením, jak optimalizovat design a procesy pro mobilní zařízení. Tato zařízení většinou zaostávají za běžnými stolními počítači ve velikosti operační paměti a výkonu procesorů. Proto je třeba myslet při vývoji pro tento typ zařízení především na důkladnou optimalizaci. Google se tudíž rozhodl pro vývoj svého vlastního virtuálního stroje 3 Dalvik VM namísto implementace standardního Java Virtual Machine (7). Dalvik VM vygenerované.class soubory rekompiluje do.dex (Dalvik Executable) souborů. Tyto soubory mimo jiné zamezují duplicitě kódu - Dalvik VM hledá stejné části kódu v jednotlivých.class souborech a ve výsledných.dex souborech se snaží o co největší zefektivnění vynecháváním duplicit. Díky tomu se výrazně snižují nároky na velikost aplikací. Například.dex soubor webového prohlížeče má zhruba 200 kb, oproti tomu nekomprimovaný.jar soubor má 500 kb (2). 1 Pomocí text to speech (TTS) můžeme nechat převést psaný text na mluvenou řeč. 2 Technologie multi-touch se týká dotykového displeje. Pomocí tohoto systému lze ovládat více prvků najednou. Systém umí rozpoznat více uživatelských dotyků naráz. 3 Virtuální stroj izoluje aplikace používané uživatelem na počítači. Libovolná aplikace naprogramovaná pro virtuální stroj může být spuštěna na kterékoli z platforem, místo toho, aby se musely vytvářet oddělené verze aplikace pro každý počítač a operační systém. Stránka 5 z 49

Finální kód spustitelný na Androidu tedy není založený na Java byte kódu, ale na.dex souborech, které se dále balí do.apk archivů. 2.3. Architektura Android OS Jádro Androidu tvoří Linux kernel verze 2.6.29 (2). Jádro má na starosti ovladače zařízení, přístup ke zdrojům, přerozdělování výkonu aplikacím a další systémové služby. V jádru jsou obsaženy ovladače například pro displej, kameru, klávesnici, Wi-Fi, flash paměť, zvuk nebo pro tzv. IPC (Interprocess communication). Ačkoli je jádro postavené na Linuxu, většina aplikací na zařízeních s Android je vyvíjena v Javě a běží přes Dalvik VM. Na obr. č. 2 je zachycena architektura systému. Android obsahuje řadu knihoven napsaných v jazyce C/C++ (8): OpenGL, SGL - Pro podporu grafiky, Freetype, WebKit - Open source knihovny pro operace s fonty a zobrazování webového obsahu. Webkit používají i klasické desktopové aplikace - například Google Chrome, SQLite - Podpora relačních databází, C runtime library (libc) - základní knihovny, média - knihovny založené na PacketVideo's OpenCORE pro podporu formátů audia, videa a obrázků. Android API zprostředkovává další služby spojené se zařízením - pomocí API 4 lze ovládat telefonní modul, uživatelské rozhraní, přístup k datům, instalace aplikací, bezpečnost a další. API mohou využívat programátoři, je naprogramované v jazyce Java. 4 API (Application Programming Interface) zde označuje sbírku tříd knihoven, které může programátor využívat. Stránka 6 z 49

Obrázek č.2 - Systémová architektura Google Android (2) Stránka 7 z 49

3. Vývojové prostředí SDK 5 pro Android je k dispozici zcela zdarma ke stažení online 6. V současné době Google oficiálně podporuje pouze vývojové prostředí Eclipse s pluginem Android Development Tools (ADT plugin) (7) (9). ADT slouží pro vývoj, ladění a testování aplikací. Použití ADT pluginu je pro vývojáře nejpohodlnější možností vývoje aplikací pro Android, jelikož mohou přistupovat ke všem nástrojům Android SDK přímo přes grafické rozhraní Eclipse. Pokud bychom chtěli využít jiné vývojové prostředí, museli bychom volat jednotlivé nástroje Android SDK samostatně pomocí příkazové řádky 7. Pro některá vývojová prostředí existují i neoficiální pluginy na propojení vývojového prostředí s Android SDK nástroji. Já jsem vyzkoušel například plugin nbandroid 8 pro vývojové prostředí NetBeans. Z vlastní zkušenosti ale nemohu zvláště pro začátečníka toto řešení doporučit, jelikož správná konfigurace tohoto pluginu není jednoduchá. Při pokusu o zprovoznění tohoto pluginu jsem se potýkal s mnoha problémy, které se stále nabalovaly na sebe. Navíc jelikož tyto pluginy nejsou oficiálně podporovány společností Google, je mnohdy obtížné v případě problémů získat jakoukoli podporu. 3.1. Dokumentace k Android SDK I když se nejedná přímo o nástroj integrovaný v Android SDK balíčku, je dokumentace určitě jednou z nejdůležitějších věcí pro programátora. Dokumentace je k dispozici v HTML verzi jak v balíčku SDK, tak v nejnovější verzi online na webu pro Android vývojáře 9. V online verzi dokumentace jsou k dispozici i výuková videa, která se snaží například o přiblížení Android architektury, životnosti aplikací nebo o použití různých API. Pro nás nejdůležitější prvek je možné nalézt online pod záložkou Reference 10. Je zde index všech dostupných balíčků a tříd, které můžeme při vývoji použít (viz obr. 5 SDK (Software Development Kit) je soubor nástrojů, který nám umožňuje vyvíjet aplikace pro určitou platformu. 6 Volně ke stažení na adrese: http://developer.android.com/sdk/index.html. 7 Bližší popis dostupný online: http://developer.android.com/guide/developing/projects/projectscmdline.html 8 K dispozici na webu: http://kenai.com/projects/nbandroid/. 9 http://developer.android.com 10 http://developer.android.com/reference/ Stránka 8 z 49

č. 3). U každé třídy je navíc informace, od které verze systému Android je daná třída k dispozici. Obrázek č.3 - Online dokumentace k Android SDK 3.2. Android emulátor Emulátor je jedním z nejdůležitějších nástrojů při vývoji aplikací pro Android. Můžeme s ním testovat aplikace bez nutnosti jejich instalace na zařízení, pro které je vyvíjíme. Pomocí ADT pluginu je emulátor integrovaný do prostředí Eclipse, díky tomu je jeho použití rychlé a snadné. Emulátor obsahuje kompletní systém Android, včetně základních aplikací jako je například aplikace ovládající telefonní modul, internetový prohlížeč nebo správa kontaktů. Díky tomu můžeme většinu funkcí otestovat přímo v emulátoru. Jeho použití má ale také svá omezení (10): emulátor simuluje všeobecné chování zařízení s Androidem, nemůže však simulovat specifické hardwarové implementace, emulace periférií jako je například kamera není plně funkční, telefonní hovory a SMS zprávy můžeme pouze simulovat pomocí DDM, emulátor nepodporuje emulaci USB a Bluetooth. Emulátor spouští Android Virtual Device (AVD). Každé AVD reprezentuje samostatné zařízení. Jednotlivá AVD se mohou lišit hardwarovou a softwarovou konfigurací. Abychom mohli aplikaci spustit v emulátoru, musíme mít k dispozici alespoň jedno AVD. Na vytvoření AVD je v SDK utilita pojmenovaná AVD Manager (viz obr. č. 4). Stránka 9 z 49

Obrázek č.4 - AVD Manager Obrázek č.5 - Nový AVD - dialog Každé AVD má své jméno a určenou verzi API (11). Dále můžeme nastavit velikost emulované SD karty a rozlišení obrazovky emulovaného zařízení, jak je patrné z obr. č. 5. Na závěr lze nastavit podporu periférií v AVD, například je možné přidat simulaci akcelerometru nebo kamery. Po vytvoření AVD můžeme ještě nastavovat některé hardwarové atributy pomocí souboru config.ini, který je ve složce.android/avd/nazev.avd (na operačním systému Windows je tato složka defaultně ve složce uživatele). Emulátor využívá virtuální obrazy disků jako simulaci disků reálného zařízení. Dokáže na ně ukládat data aplikací. Díky tomu neztratíme údaje při vypnutí emulátoru. Pokud testujeme v emulátoru aplikaci, která si ukládá data například do SQLite databáze, při dalším spuštění budeme mít data k dispozici. Data je navíc možné ukládat i na emulovanou SD kartu, jejíž velikost lze definovat při vytváření AVD. Stránka 10 z 49

Obrázek č. 6 - Emulátor - Home screen Obrázek č. 7 - Emulátor - Aplikace Dotyky na obrazovce se simulují klikáním myší. Emulátor lze ovládat pomocí 15 emulovaných hardwarových tlačítek, pomocí virtuální klávesnice nebo pomocí klávesnice připojené k počítači. 3.3. Dalvik Debug Monitor Service Obrázek č. 8 - DDMS Stránka 11 z 49

Zajímavým nástrojem dodávaným v SDK je Dalvik Debug Monitor Service (DDMS) (12), který je zobrazen na obr. č. 8. Tento nástroj má 5 základních funkcí: správa procesů - v listu na levé straně se zobrazují spuštěná AVD, u každého z AVD je zároveň seznam podprocesů, které na daném virtuálním stroji běží. Můžeme sledovat vlákna a jejich stavy na záložce Threads. Procesy lze pomocí DDMS také ukončit, práce se soubory - pomocí DDMS lze prohlížet soubory na zařízení. Můžeme přesouvat soubory mezi virtuálním strojem a počítačem a případně také složky či soubory mazat, interakce s emulátorem - DDMS umí simulovat v emulátoru situace, které mohou nastat v reálném provozu. Lze simulovat telefonní hovor, poslat SMS zprávu a simulovat libovolnou pozici GPS, snímání obrazovky - lze pořizovat snímky běžící aplikace, zobrazení logů - Jedna z utilit v DDMS umožňuje zobrazení Android logging console, na kterou se vypisují logy aplikace. Každá aplikace má programově definované logování, lze zaznamenávat prakticky cokoliv. 3.4. Další nástroje SDK nástroje patří: Android SDK nabízí desítky různých nástrojů, mezi další často používané Android Hierarchy Viewer - pomocí tohoto nástroje lze ladit grafické uživatelské rozhraní (GUI) vyvíjené aplikace. Podle aktuální obrazovky v emulátoru utilita zobrazí hierarchii grafických prvků a pohled na GUI s pixelovou mapou, Draw 9-Patch tool - program určený k designu PNG souborů, Mksdcard - tato utilita slouží k vytváření samostatných virtuálních obrazů SD karet, které můžeme později připojit k AVD v emulátoru. Stránka 12 z 49

4. Tvorba aplikací pro Android Aplikace pro Android jsou složeny z aktivit. Každá aktivita má svůj daný účel a definované uživatelské rozhraní. Jednu aktivitu si můžeme v rámci objektově orientovaného programování představit jako třídu, pomocí které se obsluhují události. Aplikace pro Android se programují objektově v Javě. Třemi nejdůležitějšími třídami pro Android jsou Context, Activity a Intent (10). Tyto tři třídy jsou základními stavebními bloky každé Android aplikace. Každá aktivita aplikace by měla mít své vlastní GUI popsané pomocí XML. Z uživatelského pohledu je aktivita jedna obrazovka, která nějakým způsobem reaguje na podněty od uživatele. 4.1. Aktivita a životní cyklus aplikace Aktivita je potomkem třídy Activity. Každá ucelená činnost aplikace představuje jednu aktivitu (7). Aplikace může samozřejmě obsahovat takových aktivit více, jednotlivé aktivity jsou na sobě však nezávislé. Na většině desktopových OS lze využívat více programů najednou. Jednotlivé programy jsou na sobě nezávislé, můžeme mezi nimi přecházet, sami je také ukončujeme. Programy rozhodují samostatně o svém životním cyklu. Android funguje odlišně. V popředí je vždy jedna část aplikace - aktivita, která komunikuje s uživatelem, čeká na uživatelův vstup. Aktivita může vyvolat jinou aktivitu stejné nebo jiné aplikace, která opět začne komunikovat s uživatelem. Systém si pamatuje, v jakém pořadí byly aktivity spuštěny, uživatel se může vracet zpátky pomocí systémového tlačítka zpět. Životní cyklus systému Android je v režii systému, pokud má nedostatek zdrojů, sám aplikaci na pozadí uspí či zcela vypne. Systém informuje aplikace o změně stavů voláním metod. Díky implementaci těchto metod může program zareagovat na systémem řízený přechod mezi stavy. Pokud programátor správně využije těchto metod, uživatel při jejím volání ani nepozná, že prošla nějakou změnou. Životní cyklus aplikace znázorňuje obr. č. 9. Aktivita se může nacházet ve 3 stavech (13): aktivní - aktivita je v popředí, komunikuje s uživatelem, případně čeká na vstup uživatele, pozastavená - jiná aktivita je v popředí, ale tato aktivita je stále viditelná pro uživatele. Aktivita v popředí například není zobrazena přes celý display. Stránka 13 z 49

Pozastavená aktivita je stále v operační paměti, ale pokud by měl systém velký nedostatek zdrojů, může ji vypnout, zastavená - aktivita je zcela v pozadí, není viditelná pro uživatele. Aktivita je v paměti, ale systém ji může kdykoliv vypnout, pokud potřebuje zdroje pro jinou činnost. Metoda Popis Doporučený obsah oncreate() Volána při startu nebo restartu Inicializace statických dat aktivity, aktivity. nastavení GUI layoutu metodou setcontentview(). onresume() Volána, když se aktivita dostane do popředí. Start nějaké akce - spuštění audia, videa nebo animace. onpause() Volána, když se aktivita dostane do pozadí. Uložit data, uvolnit nepotřebné zdroje, zastavit akce - audio, video či animace. ondestroy() Volána, když se aplikace vypíná. Uvolnit veškeré zdroje aplikace. Tabulka č.1 - Klíčové metody změny stavu aktivity. Obrázek č. 9 - Životní cyklus aktivity. (2) 4.2. Intent a komunikace komponent aplikace Jedním z principů systému Android je vzájemná spolupráce aplikací. Interakce jednotlivých aplikací je řešena pomocí tříd Intent (2). Intent je v podstatě požadavek na systém, aby spustil určitou aktivitu. Kromě aktivit může však spustit i určitou službu Stránka 14 z 49

nebo Broadcast receiver 11. Abychom mohli v aplikaci spouštět různé aktivity, musíme je zaregistrovat v AndroidManifest.xml souboru. Pomocí Intent a metody putextra() můžeme předávat i data mezi jednotlivými aktivitami. Ukázka použití Intent z mé ukázkové aplikace (viz kapitola č. 6): intent = new Intent(AdminForm.this, EditUzivatelForm.class); intent.putextra("uzivatel",uzivatel); startactivity(intent); Tímto Intent spustíme aktivitu EditUzivatelForm a zároveň ji předáme proměnnou uzivatel. Danou proměnnou lze ve spuštěné aktivitě načíst následujícím kódem: Intent intent = getintent(); String uzivatel = intent.getstringextra("uzivatel"); 4.3. AndroidManifest AndroidManifest se nachází v souboru AndroidManifest.xml. Je to základní konfigurační soubor každé Android aplikace. Jeho obsah používá Android OS k (10) instalaci a upgradům aplikace, zobrazení informací o aplikaci, spouštění jednotlivých aktivit aplikace, správě povolení přístupů k jednotlivým API, další konfiguraci aplikace. 11 Broadcast receiver je komponenta, jejímž účelem je reakce na události zaslané systémem všem aplikacím. Stránka 15 z 49

Pomocí Eclipse lze snadno editovat AndroidManifest pomocí formulářů, viz obr. č. 10. Obrázek č. 10 - Zpracování formulářů na vyplnění AndroidManifest v Eclipse Editor na správu AndroidManifestu je rozdělen do 5 záložek: Manifest - Zde se nastavuje cesta balíčků aplikace a verze Android SDK - pokud nastavíme verzi 1.6, aplikace poběží na všech zařízeních se systémem Android od verze OS 1.6, Application - Na této nalezneme nastavení vlastní aplikace - název, ikona, popis a další. Důležitý je zde seznam aktivit, musí zde být uvedeny všechny aktivity, které chceme v aplikaci použít. Pokud se v aplikaci odkážeme na aktivitu, která zde není uvedena, aplikace po spuštění skončí chybovou hláškou, Permissions - Tato záložka slouží k nastavení práv přístupu k systémovým službám. V základu nemá aplikace prakticky žádná práva. Pokud se pokusíme bez potřebného povolení o přístup k systémové službě, vznikne výjimka SecurityException, Instrumentation - Slouží k definici tříd pro testování aplikace, AndroidManifest.xml - Zde můžeme editovat celý soubor v XML formátu. Stránka 16 z 49

4.4. Ukládání dat Android nabízí 4 základní způsoby pro práci s daty a jejich ukládání (14). 4.4.1. SharedPreferences Jeden z nejjednodušších způsobu ukládání dat představuje instance SharedPreferences. V celé aplikaci je vždy jen jedna instance, jejíž funkci si můžeme představit jako odkládací schránku pro proměnné. Vkládat hodnoty můžeme pomocí editoru - SharedPreferences.Editor. Je zde k dispozici metoda put*(string id, * hodnota), kde * je datový typ, který ukládáme. Data jsou uložena po zavolání metody commit(). Pokud naopak chceme data získat, využijeme metody get*(string id, * defaultni hodnota), kde * je datový typ, který požadujeme. Pokud není nalezena hodnota, která odpovídá id, metoda vrátí zadanou defaultní hodnotu. Příklad použití: SharedPreferences nastaveni = getsharedpreferences("aplikacesharedpreferences", MODE_PRIVATE); SharedPreferences.Editor prefeditor = settings.edit(); prefeditor.putstring("jmeno", "Josef"); prefeditor.putint("vek", 22); prefeditor.commit(); Tento kód uloží jméno a věk do sdílených preferencí. Když chceme naopak hodnotu proměnné získat, můžeme použít následující kód: String user = Settings.getString("Jmeno", "Nezname"); 4.4.2. XML soubory V systému Android se hojně využívají XML soubory. Jsou nazývány resources a ukládány do složky /res. Jsou obsaženy v archivu aplikace. Kromě XML souborů ve složce /res/raw jsou všechny XML zdroje kompilovány do efektivnější binární podoby. XML soubory jsou ve složce /res rozděleny do dalších podsložek podle předdefinované struktury: podsložka /anim obsahuje XML se scénáři animací, podsložka /layout uchovává soubory s XML strukturou grafického uživatelského rozhraní k jednotlivým aktivitám, Stránka 17 z 49

podsložka /values obsahuje různé hodnoty, používané v aplikaci, zapsané do jednotlivých XML souborů dle typu: o strings.xml - Řetězce, např.: <string name="nazev">sprava Obchodu</string>, o colors.xml - Barvy v RGB formátu, které můžeme přiřadit například jednotlivým GUI komponentám, např.: o o <color name="pozadi">#006400</color>, dimens.xml - Rozměry udávané např. v pixelech, či milimetrech, např.: <dimen name="sirkabutton1">100px</dimen> array.xml - Pole, např.: <string-array name="dialog_moznosti"> <item>upravit</item> <item>smazat</item> </string-array>, podsložka /menu slouží k ukládání struktury položek menu, podsložka /xml je k dispozici pro uložení XML souborů s vlastní strukturou. Kompilátor vytváří z XML zdrojů třídu R, které se později v Java kódu aplikace můžeme dotazovat na jednotlivé hodnoty, uvedené v XML souborech. Tímto způsobem lze získat i systémové hodnoty. Pokud bychom chtěli získat hodnotu "nazev", která je uvedena výše, použili bychom tento kód: String nazev = activity().getstring(r.string.nazev) Další možností, jak k hodnotám přistupovat, je odkaz ze samotného XML zdroje na jiný zdroj, pokud například chceme použít hodnotu určeného řetězce jako název pro tlačítko. Na jiné zdroje se dokazuje znakem @, za který se uvádí typ a název zdroje, na který se odkazujeme, například @string/nazev. Pokud bychom se chtěli odkázat na systémovou hodnotu, museli bychom ještě specifikovat balíček android, vypadalo by to tedy takto: @android:string/ok. 4.4.3. Databáze V systému Android je k dispozici pro ukládání a správu dat relační databázový systém SQLite. Každá aplikace má možnost vytvoření vlastní databáze, ke které má poté plný přístup. Databáze je poté v zařízení uložena ve složce Stránka 18 z 49

/data/data/<nazev_balicku>/databases. SQLite nemá na pevno určené datové typy. Když se definuje nová tabulka, datové typy se určují, ale není nutné je respektovat, fungují spíše jako doporučení. Nové hodnoty se do databáze vkládají pomocí instance třídy ContentValues metodou put(string nazevpole, * hodnota), kde * představuje typ proměnné hodnoty, kterou vkládáme. Každá instance třídy ContentValues() představuje jeden řádek tabulky. Data do databáze se poté vloží metodou insert(string tabulka, String nullcolumnhack, ContentValues hodnoty). Objekt ContentValues() se také používá pro změnu hodnot metodou update(string tabulka, ContentValues hodnoty, String where, String[] whereargs). Data z databáze získáme pomocí objektu Cursor(), což je ukazatel na množinu výsledků našeho dotazu na databázi. Třídu Cursor naplníme metodou rawquery(string dotaz, String[] selection args), která provede dotaz uvedený v parametrech metody. Třída Cursor poté nabízí množství metod na práci s vrácenými výsledky. Mezi nejpoužívanější patří (7): movetofirst - přesune ukazatel na první záznam výsledků, movetonext - přesune ukazatel na další záznam, movetoprevious - přesune ukazatel na předchozí záznam, getcount - vrací počet záznamů ve výsledné množině, getcolumnindexorthrow - vrací index sloupce s požadovaným názvem, GetColumnName - vrací název sloupce po zadání indexu, getcolumnnames - vrací množinu řetězců se jmény všech sloupců, movetoposition - přesune ukazatel na požadovaný řádek, getposition - vrací aktuální řádek, na který ukazuje ukazatel. 4.4.4. Binární soubory Práce s binárními soubory je na systému Android obdobná jako u desktopových Java aplikací. Používají se třídy z balíčku java.io (3). Stránka 19 z 49

4.5. Struktura Android aplikace I když se aplikace výrazně liší svojí velikostí a složitostí, základní struktura je vždy obdobná. Struktura souborů je znázorněna na obr.č. 11, popsána v tab. č. 2. Prvek src Popis Složka se zdrojovými soubory aplikace. values res drawable Obsahuje další zdroje používané aplikací. Všechny zdroje v této složce jsou definované v XML. Složka se všemi zdroji aplikace - obrázky, GUI layouty, struktury menu a dalšími zdroji. Složka pro obrázky použité v aplikaci. anim Složka s XML soubory definujícími animace. layout Obsahuje jednotlivé obrazovky použité v aplikaci - definici GUI pomocí XML. menu XML soubory se strukturou menu aplikace. xml Složka pro další zdroje aplikace v XML formátu. raw Další data aplikace v libovolném formátu Obrázek č. 11 - Struktura Tabulka č. 2 - Popis struktury aplikace Android aplikace 4.6. Přehled základních Java balíčků pro Android V současnosti Android Java API obsahuje více než 40 různých balíčků s více než 700 třídami. Rád bych zde uvedl přehled nejpoužívanějších balíčků (2). Balíček android.app Popis Implementuje aplikační model pro Android, mezi hlavní třídy patří Application, která se stará o inicializaci a ukončení aplikace, ovládání aktivit, kontrolních prvků - Stránka 20 z 49

android.bluetooth android.content android.content.pm android.content.res android.database android.database.sqlite android.gesture android.graphics android.graphics.drawable android.graphics.drawable.shapes android.hardware android.location android.media dialogů, hlášek, oznámení atd. Obsahuje třídy pro práci s Bluetooth zařízeními. Pomocí třídy BluetoothAdapter můžeme ovládat lokální Bluetooth adaptér. Třídou BluetoothDevice komunikujeme se zařízením, ke kterému se připojujeme. BluetoothSocket a BluetoothServerSocket udržují komunikaci mezi zařízeními. Implementuje content providers (poskytovatele obsahu). Pomocí poskytovatelů obsahu můžeme přistupovat k datům aplikace. Dále implementuje Intent. Implementuje třídy, které se vztahují k funkcím Package Managera. Package Manager spravuje povolení přístupu aplikace k API zařízení, stará se o instalované služby a komponenty. Umožňuje přístup ke zdrojovým souborům se strukturovanými i nestrukturovanými daty aplikace. Implementuje abstraktně databázi - primární interface Cursor. S pomocí balíčku android.database implementuje SQLite jako fyzickou databázi. Hlavními třídami jsou SQLiteCursor, SQLiteDatabase, SQLiteQuery, SQLiteQueryBuilder a SQLiteStatement. V praxi se však pro práci s databází používají většinou třídy z balíčku android.database. Balíček obsahuje třídy a rozhraní nutná pro práci s uživatelem definovanými gesty. Gesto je určitý tvar, který uživatel vytváří dotykem na obrazovce zařízení. Obsahuje třídy pro práci s grafikou - Bitmap, Canvas, Camera, Color, Matrix, Movie, Paint, Path, Rasterizer, Shader, SweepGradient a TypeFace. Tyto balíčky obsahují nástroje pro animace objektů a jednotlivé tvary. Implementuje třídy, které ovládají fyzickou kameru zařízení. Obsahuje třídy Address, GeoCoder, Location, LocationManager a LocationProvider. Address reprezentuje zjednodušený XAL (Extensible Address Language). GeoCoder umožňuje získat zeměpisnou šířku a délku z adresy a naopak ze zeměpisné šířky a délky adresu. Location reprezentuje zeměpisnou šířku a výšku. Obsahuje třídy pro přehrávání audia a videa (MediaPlayer), nahrávání audia a videa (MediaRecorder), přehrávání krátkých zvukových sekvencí, které mohou sloužit jako upozornění či vyzvánění (Ringtone). Pomocí třídy AudioManager lze nastavovat hlasitost zvuků. Balíček také obsahuje třídu FaceDetector na rozpoznávání lidských tváří z bitmap. Stránka 21 z 49

android.net android.net.wifi android.opengl android.os android.provider android.sax android.speech android.speech.tts android.telephony android.telephony.gsm android.text android.utils Implementuje základní síťové API. Mezi základní třídy patří Uri, ConnectivityManager, LocalSocket a LocalServerSocket. Ovládá Wi-Fi připojení, pomocí třídy WifiManager můžeme spravovat nastavení Wi-Fi sítí a aktivní Wi-Fi sítě. Obsahuje třídy na ovládání základních OpenGL ES operací. Obsahuje přístup ke službám OS, které jsou přístupné pomocí Javy. Mezi nejdůležitější patří například třída Binder, která slouží ke komunikaci mezi procesy. Součástí tohoto balíčku je množina předdefinovaných poskytovatelů obsahu, které lze v aplikaci využít. Pomocí tříd z tohoto balíčku můžeme číst různá nastavení telefonu nebo například kontakty v telefonu. Obsahuje Simple API for XML (SAX) - parser pro práci s XML soubory. Podpora rozpoznávání hlasu. Podpora konverze textu na řeč. Instanci třídy TextToSpeech můžeme poslat text a získat ho zpět v mluvené podobě. Android používá Pico TTS (Text to Speech) engine. Obsahuje třídy CellLocation, PhoneNumberUtils a TelephonyManager. Pomocí TelephonyManager můžeme zjistit umístění, telefonní číslo, informace o operátorovi, typ mobilní sítě a typ telefonu. Můžeme zjistit umístění telefonu na základě signálu z BTS pokrývačů. Třídy na podporu renderování textů na obrazovce. Obsahuje třídy Log, DebugUtils, TimeUtils a Xml android.view Třídy na ovládání GUI - Menu, View, ViewGroup android.webkit Třídy pro práci s webovým prohlížečem. android.widget Všechny UI prvky, které obvykle vychází z třídy View. com.google.android.maps Třídy nezbytné pro práci s Google mapami. Tabulka č. 3 - Základní Java balíčky pro Android Stránka 22 z 49

5. Uživatelské rozhraní Při návrhu grafického uživatelského rozhraní pro mobilní zařízení se systémem Android musíme mít na paměti několik věcí. Nesmíme opomenout, že navrhujeme rozhraní pro relativně malé zobrazovací plochy, a i když se v dnešní době rapidně zvyšuje rozlišení mobilních displejů, stále tyto displeje mají fyzické rozměry několikanásobně nižší než klasické desktopové monitory. Většina zařízení s Android OS je navíc určena pro ovládání pomocí prstů, na rozdíl třeba od Windows Mobile, kde se používá většinou stylus, který je přesnější. Ovládací prvky musí být dostatečně velké, aby uživatelé neměli problém s ovládáním aplikace. Rozlišení Android telefonů se pohybuje od 240x320 na starších typech až po 540x960. Naše GUI by mělo být použitelné na všech zařízeních. Android obsahuje balíček android.view (7), se kterým se vytváří uživatelské prostředí obdobně jako například pro desktop s balíčkem javax.swing (15). Rozdíl je v optimalizaci prvků pro ovládání prstem pomocí dotykové obrazovky. Základní třídou je View, od které se odvozují všechny viditelné prvky GUI. Jednotlivá View jsou sdružovány a propojovány pomocí kontejneru ViewGroup (16). Definice prvků uživatelského rozhraní je oddělena od zdrojového kódu aplikace. Uživatelské prostředí je definované pomocí jazyka XML. XML soubory jsou uloženy ve složce res/layout. Pro každou aktivitu musíme vytvořit XML soubor se strukturu a vlastnostmi ovládacích prvků, které chceme použít. Příklad definice EditTextu pomocí XML: <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@layout/shape" android:paddingleft="20dip" android:singleline="true" android:id="@+id/uzivjmenoedittext"></edittext> Elementy XML obsahují View a Viewgroup prvky, parametry těchto prvků poté tvoří atributy XML elementů. XML soubory s definicí uživatelského prostředí patří do jmenného prostoru http://schemas.android.com/apk/res/android. Pomocí potomka třídy ViewGroup lze také vytvořit správce rozvržení (layout manager), které mohou ovlivňovat uspořádání View prvků. GUI má hierarchickou Stránka 23 z 49

strukturu, viz obr. č. 12, kde se View objekty skládají do ViewGroup kontejnerů - správců rozvržení. Obrázek č. 12 - Hierarchie GUI (16) 5.1. Typy správců rozvržení Správce rozvržení má funkci kontejneru pro View prvky. Podle typu správce rozvržení se View objekty zarovnávají různými způsoby. Android obsahuje 4 základní správce rozvržení (10). 5.1.1. Linear Layout Každé další View vložené do Linear Layout se umístí za naposled vložené View. Umístí se buď horizontálně nebo vertikálně, podle nastavení parametru orientation. Mezi další důležité parametry patří layout_width a layout_height, které mohou mít hodnoty fill_parent nebo wrap_content. Při použití fill_parent správce rozvržení vyplní celý prostor svého předchůdce obsaženými View, pokud použijeme wrap_content, je vyplněna pouze část předchůdce nutná pro obalení obsažených View objektů. Obrázek č. 13 - Ukázka Linear Layout XML kód výše uvedené ukázky (obr. č. 13): <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" Stránka 24 z 49

android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/popisek" android:id="@+id/popisektextview"/> <EditText android:layout_height="wrap_content" android:id="@+id/edittext01" android:layout_width="fill_parent" android:text="@string/edit"/> <LinearLayout android:id="@+id/linearlayout01" android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent"> <Button android:layout_height="wrap_content" android:id="@+id/button1" android:text="@string/button1" android:layout_width="wrap_content"/> <Button android:layout_height="wrap_content" android:text="@string/button2" android:id="@+id/button2" android:layout_width="fill_parent"/> </LinearLayout> </LinearLayout> Výše uvedená ukázka je tvořena dvěma Linear Layout správci rozvržení. První Linear Layout má orientaci vertikální a obsahuje TextView, EditText a druhý Linear Layout, který je orientován horizontálně a obsahuje dva View typu Button. 5.1.2. Relative Layout Pomocí Relative Layout můžeme umístit jednotlivá View do polohy, jejíž pozice je vztažena k okrajům Relative Layout kontejneru, do kterého View vkládáme, nebo je vztažena k jinému View, které je umístěno v tomto kontejneru. Vztahy mezi View se určují pomocí jejich ID. Pozici vkládaného View můžeme určit pouze pomocí View, která je definováno v XML souboru před vkládaným View. Použití Relative Layout je znázorněno na následujícím příkladu (obr. č. 14): Obrázek č. 14 - Ukázka Relative Layout Ukázku tvoří následující XML kód: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" Stránka 25 z 49

android:id="@+id/relativelayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/popisek" android:id="@+id/popisektextview" /> <Button android:layout_height="wrap_content" android:id="@+id/button1" android:text="@string/button1" android:layout_width="wrap_content" android:layout_below="@+id/popisektextview" android:layout_alignparentright="true"/> <EditText android:layout_height="wrap_content" android:id="@+id/edittext01" android:text="@string/edit" android:layout_toleftof="@+id/button1" android:layout_below="@+id/popisektextview" android:layout_width="fill_parent"/> </RelativeLayout> Poloha Buttonu je vztažena k EditTextu parametrem layout_below a ke kontejneru parametrem layout_alignparentright. 5.1.3. Frame Layout Každé další vložené View se zarovnává do levého horního rohu. Pokud vložíme více View, poslední vložené bude překrývat ostatní, viz obr. č. 15. Obrázek č. 15 - Ukázka Frame Layout XML kód ukázky: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/framelayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_height="wrap_content" android:id="@+id/button1" android:text="@string/button1" android:layout_width="wrap_content"/> <EditText android:layout_height="wrap_content" android:id="@+id/edittext01" android:text="@string/edit" android:layout_width="fill_parent"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/popisek" android:id="@+id/popisektextview" /> </FrameLayout> Stránka 26 z 49

5.1.4. Table Layout Každé View je buňkou tabulky, objekty jsou řazeny do řádků a sloupců. Počet sloupců se odvíjí automaticky od řádku s nejvíce vloženými View. Ukázka Table Layout s tlačítky (obr. č. 16): Obrázek č. 16 - Ukázka Table Layout <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TableRow> <Button android:layout_height="wrap_content" android:text="button1"/> <Button android:layout_height="wrap_content" android:text="button2"/> <Button android:layout_height="wrap_content" android:text="button3"/> <Button android:layout_height="wrap_content" android:text="button4"/> </TableRow> <TableRow> <Button android:layout_height="wrap_content" android:text="button5"/> <Button android:layout_height="wrap_content" android:text="button6"/> </TableRow> </TableLayout> 5.2. Základní View prvky GUI Mezi základní, nejčastěji používané View prvky patří (7): Název Popis Náhled TextView Standardní needitovatelný textový popisek, podpora zobrazení více řádků, formátování textu. EditText Editovatelné textové pole, sloužící pro zadávání vstupů. Stránka 27 z 49

ListView Pomocí ListView lze umístit jiná View do vertikálního seznamu, View jsou zobrazeny jako jednotlivé řádky. Spinner Spinner je obdobou výběru ze seznamu v desktopových Java aplikacích. Po kliknutí se rozevře seznam s možnostmi. Button Klasické klikací tlačítko. Checkbox Zaškrtávací přepínač, má dva stavy - pravda a nepravda. RadioButton Umožňuje výběr jedné možnosti ze skupiny různých hodnot. ScrollView Pomocí ScrollView lze přidat rolovací lištu na obrazovku při nedostatku místa. Díky nižšímu rozlišení mobilních zařízení je to často využívaná komponenta. Tabulka č. 4 - Základní View prvky GUI 5.3. Další ovládací prvky 5.3.1. Menu Pomocí menu můžeme uživatelům nabídnout pohodlné ovládání, které nezabírá drahocenné místo při návrhu GUI. Android podporuje dva typy menu - hlavní, které je vyvoláno po stisknutí hardwarového tlačítka menu, a kontextové, které se vyvolá po delším stisknutí určitého View. Hlavní menu je vždy vztaženo k jedné aktivitě, každá aktivita může mít své vlastní položky v hlavním menu. Hlavní menu pojme maximálně 6 položek, položky Stránka 28 z 49

mohou být tvořeny samostatným textem nebo textem a ikonou. Pokud do menu vložíme více než 6 položek, vytvoří se na 6. pozici odkaz, který otevře submenu se zbývajícími položkami. Položky menu jsou definovány pomocí XML, ukázka definice menu pro přihlášeného uživatele v mé aplikaci (viz kapitola č. 6): <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:icon="@drawable/help_icon" android:id="@+id/napoveda_menu" android:title="nápověda"> </item> <item android:icon="@drawable/about_icon" android:id="@+id/oaplikaci_menu" android:title="o Aplikaci"> </item> <item android:icon="@drawable/log_out_icon" android:id="@+id/odhlasit" android:title="odhlásit"> </item> </menu> Položky menu jsou obaleny tagem <item>, každá položka musí mít povinně definované id a titulek. Náhled výše definovaného menu můžeme vidět na obr. č. 17: Obrázek č. 17 - Ukázka hlavního menu aktivity Hlavní menu se přiřazuje k aktivitě pomocí metody oncreateoptionsmenu(menu menu). V této metodě naplníme menu položkami, které jsme si definovali v XML souboru pomocí instance třídy MenuInflater. Slouží k tomu metoda inflate(menures zdrojmenu, Menu menu), příklad inicializace hlavního menu: public boolean oncreateoptionsmenu(menu menu) { MenuInflater inflater = getmenuinflater(); inflater.inflate(r.menu.menu_prihlaseni, menu); return true; } Pokud uživatel vybere určitou položku z menu, je zavolána metoda onoptionsitemselected(menuitem item) aktivity, se kterou uživatel právě pracuje. Implementace této metody u výše uvedeného příkladu (obr. č. 17) může vypadat například takto: Stránka 29 z 49

public boolean onoptionsitemselected(final MenuItem item) { switch (item.getitemid()) { case R.id.oaplikaci_menu: intent = new Intent(AdminForm.this, OAplikaciScreen.class); startactivity(intent); return true; case R.id.napoveda_menu: intent = new Intent(AdminForm.this, NapovedaScreen.class); startactivity(intent); return true; case R.id.odhlasit: showdialog(dialog_odhlaseni); return true; default: return super.onoptionsitemselected(item); } } Kontextové menu je obdobou menu vyvolaného stisknutím pravého tlačítka myši na desktopu. Na Android systému se vyvolá dlouhým stisknutím View, ke kterému chceme kontextové menu zobrazit. Tvorba kontextového menu je obdobná jako u hlavního menu, k inicializaci se používá metoda oncreatecontextmenu(menu menu, View view, ContextMenuInfo). Pomocí metody registerforcontextmenu(view view) přiřadíme vytvořené menu ke konkrétní View komponentě. Pokud uživatel vybere některou položku z nabídky, v příslušné aktivitě je zavolána metoda oncontextitemselected(menuitem item). S touto metodou se pracuje obdobně jako u hlavního menu (viz příklad hlavního menu výše). 5.3.2. Dialogy Dialogová okna představují jednoduchý způsob interakce s uživatelem. Fungují podobně jako u desktopových aplikací. Podobu dialogu lze vytvořit pomocí třídy Builder, která je součástí třídy AlertDialog: protected Dialog oncreatedialog(int id) { switch (id) { case DIALOG_ODHLASENI: return new AlertDialog.Builder(AdminForm.this).setIcon(R.drawable.alert_dialog_icon).setTitle(R.string.potvrdit_odhlaseni).setMessage(R.string.odhlaseni_dotaz).setPositiveButton(R.string.odhlaseni_dialog_ok, new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { /* Uzivatel potvrdil odhlaseni */ finish(); Stránka 30 z 49

} } }).setnegativebutton(r.string.odhlaseni_dialog_zrusit, new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { /* Uzivatel zrusil odhlaseni */ } }).create(); /* Implementace dalsich dialogu */ } Obrázek č. 18 - Ukázka použití dialogu Výše uvedený zdrojový kód vytvoří dialog zobrazený na obr. č. 18. Dialog je definován v metodě oncreatedialog(int cislodialogu) aktivity, ke které se dialog váže. Pomocí metod třídy Builder můžeme nastavit parametry dialogu, mezi nejčastěji používané parametry patří nastavení ikony, titulku, zprávy pro příjemce a tlačítek. U tlačítek je potřeba navíc nastavit listener (DialogInterface.OnClickListener()), který zavolá metodu onclick(dialoginterface dialog, int whichbutton), pokud uživatel klikne na dané tlačítko. Dialog je potom vytvořen metodou create(). Kromě AlertDialog lze použít také DatePickerDialog, který je určen pro výběr data, TimePickerDialog, pomocí kterého lze vybrat čas a ProgressDialog, který slouží k zobrazení průběhu a obsahuje buď progress wheel (zaplňující se kruh) nebo progress bar (proužek s procenty) (7). 5.3.3. Notifikace K upozornění uživatele disponuje Android dvěma nástroji. Můžeme použít Toast nebo informační lištu. Stránka 31 z 49

Toast zobrazí rámeček se zprávou, jejíž účelem by mělo být upozornění uživatele na výsledek nějaké akce nebo na problém. Zpráva se zobrazí na určitý čas, který se nastavuje při její konstrukci. Toast se nejsnáze vytváří metodou maketext(context context, String zprava, int delkazobrazeni), která je součástí třídy Toast. Ukázkový toast z mé aplikace (viz kap. č. 6): Toast.makeText(RegistraceForm.this, R.string.jmeno_chyba, Toast.LENGTH_SHORT).show(); Obrázek č. 19 - Ukázkový toast Výsledek výše uvedeného zdrojového textu je zobrazen na obr. č. 19. Dalším způsobem, jak na nějakou událost upozornit uživatele, je použití informační lišty. Informační lišta slouží především k zobrazení systémových informací, například se zde zobrazují upozornění na nově dostupné aktualizace. Zprávu do informační lišty můžeme vložit pomocí třídy NotificationManager, která celou lištu spravuje. Nejdříve je třeba metodou getsystemservice(string nazev) získat instanci správce oznámení (Notification manager). Poté pomocí konstruktoru Notification(int ikona, CharSequence zprava, long caszobrazeni) vytvoříme vlastní oznámení, které posléze zobrazíme metodou notify(int id, Notification oznameni). Pomocí metody setlatesteventinfo(context context, CharSequence titulek, CharSequence zprava, PendingIntent intent) můžeme nastavit detailnější oznámení a Intent, který se spustí, pokud uživatel klikne na dané oznámení. 5.4. Práce s GUI pomocí Javy Ve zdrojových textech programu se musíme odkazovat na ovládací prvky GUI, které definujeme v XML souborech. Pomocí XML definujeme strukturu, vzhled a další vlastnosti prvků, ale funkcionalitu je třeba naprogramovat v Javě. Nejprve je třeba v aktivitě definovat, který XML layout má vybraná aktivita používat. O to se stará metoda setcontentview(r.layout.nazevlayout), která se volá typicky při inicializaci aktivity v metodě oncreate(). Často potřebujeme odkaz na určité View Stránka 32 z 49