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

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

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

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

Android. Programujeme pro. Miroslav Ujbányai

Android. Programujeme pro. Miroslav Ujbányai

Android. Programujeme pro. Miroslav Ujbányai

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

Obsah. Úvod 11 O autorovi 11 Koncept knihy 11 Zpětná vazba od čtenářů 12 Zdrojové kódy ke knize 12 Errata 12 ČÁST I VÝVOJ MOBILNÍ APLIKACE

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

Obsah. Úvod 11 Zpětná vazba od čtenářů 13 Errata 14 Poznámka ke kódům 14

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

Stručný obsah. Úvod 15. KAPITOLA 1 První kroky v systému Windows KAPITOLA 2 Hlavní panel a jeho možnosti 41. KAPITOLA 3 Soubory a složky 51

Formy komunikace s knihovnami

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Motorola Phone Tools. Začínáme

Obsah. Úvod 9 Komu je kniha určena 11 Konvence použité v knize 11

Inthouse Systems s.r.o. Specifikace. Inthouse App a Inthouse Studio pro Siemens Climatix 6XX. Verze software 1.X. Revize dokumentu 6

Vývoj Internetu značně pokročil a surfování je dnes možné nejen prostřednictvím počítače, ale také prostřednictvím chytrých telefonů, tabletů a

Nástroje na vývoj aplikací pro ios Trocha motivace na úvod Co budete potřebovat Co když nemáte k dispozici počítač s macos? Vývojové prostředí Xcode


ČÁST 1. Základy 32bitového programování ve Windows

Služby Microsoft Office 365

MATURITNÍ PRÁCE dokumentace

Obsah. Úvod... 9 Použité zdroje... 9 O autorovi... 10

ELEKTRONICKÉ PODÁNÍ OBČANA

Vzdálená správa v cloudu až pro 250 počítačů

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Návod k obsluze IP kamery Zoneway. IP kamery jsou určené pro odbornou montáž.

Kapitola 1 První kroky v tvorbě miniaplikací 11

Autodesk AutoCAD 2018

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

1. PŘEDSTAVENÍ PLATFORMY ANDROID

Google Apps. Administrace

TELEFONNí LiNKA PREMiUM PRŮVODCE APLIKACí T UC-ONE - PC

Co je nového v aplikaci PaperPort 12?

Inteligentní řízení strojů s portfoliem u-mation Řešení pro automatizaci a digitalizaci Let s connect. Automatizace a digitalizace

Extrémně silné zabezpečení mobilního přístupu do sítě.

JUMO LOGOSCREEN 600. Dotyková budoucnost záznamu: Obrazovkový zapisovač

Vývoj SW pro mobilní zařízení s ios. Petr Hruška, Skymia s.r.o. Teorie a praxe IP telefonie,

SDC aplikace. Podrobný návod na zprovoznění RS485 RTS vysílače

Technické údaje. Ambilight. Obraz/displej. Android. 1 Televize. Vestavěná funkce Ambilight+hue. Funkce Ambilight. Úhlopříčka obrazovky

Úvodem 17. Začínáme 21. Výzvy vývoje aplikací pro chytré telefony 22 Z čeho se aplikace pro systém Android skládají 23 Co máte k dispozici 24

Základní informace. Operační systém (OS)

MobileIron Demo. DATUM VYTVOŘENÍ: 8. srpna AUTOR: Daniel Vodrážka

Elektronické učebnice popis systému, základních funkcí a jejich cena

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Vývoj mobilních telefonů. Barbora Bartlíková

Úvod. Klíčové vlastnosti. Jednoduchá obsluha

MBI - technologická realizace modelu

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

OBSAH. Kontrola aktualizací... 18

Zpětná vazba od čtenářů 11 Dotazy 11 Zdrojové kódy ke knize 11 Errata 11 Typografické konvence použité v knize 12

Profilová část maturitní zkoušky 2017/2018

Rollei Historyline 98. Používání funkce Wi-FI

Wonderware InTouch 2012 R2 Co je nového

Technické údaje. Ambilight. Obraz/displej. Android. 1 Televize. Vestavěná funkce Ambilight+hue. Funkce Ambilight. Úhlopříčka obrazovky

1 Webový server, instalace PHP a MySQL 13

1. Začínáme s FrontPage

Mobilní informační průvodce - RegTim

Software programové vybavení. 1. část

VirtualBox desktopová virtualizace. Zdeněk Merta

Aplikace GoGEN Smart Center

Jádrem systému je modul GSFrameWork, který je poskytovatelem zejména těchto služeb:

Instalace aplikace 602XML Filler

Ukazka knihy z internetoveho knihkupectvi

Začínáme NSZ-GS7. Síťový multimediální přehrávač. Obsah obrazovek, způsob ovládání a technické parametry se mohou změnit bez předchozího upozornění.

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

Prezentace CRMplus. Téma: CRMplus jako nástroj pro kontrolu a vyhodnocení rozpracovanosti dílů na zakázkách

Cloudové služby kancelářského softwaru hostované společností Microsoft Kvalitní nástroje pro firemní nasazení za přijatelnou cenu Vždy aktuální verze

ArcGIS Online Subscription

Uživatelský manuál - základ PiPO U6

1. Základní nastavení telefonu Vložení SIM karty Vložení paměťové karty Zapnutí telefonu a PIN. 2. Kontakty. 3. Volání

Android 100% Java telefon. Petr Musil

Co je Symantec pcanywhere 12.0? Hlavní výhody Snadné a bezpečné vzdálené připojení Hodnota Důvěra

instalace, implementace a integrace se systémem spisové služby (SSL)

CYCLOPE PRINT MANAGEMENT SOFTWARE- UŽIVATELSKÁ PŘÍRUČKA

Bezpečnostní kamera Wanscam HW0028 HD 720P

Před instalací 25 Minimální požadavky na systém Linux a Windows na jednom disku Zrušení instalace Mandriva Linuxu...

Vzdělávací obsah vyučovacího předmětu

Obsah ZÁKLADNÍ DESKA. O autorech 11 Úvod 13

Přehled nabízených kurzů

Technické údaje. Televize. Ambilight. Obraz/displej. Android. Vestavěná funkce Ambilight+hue. Úhlopříčka obrazovky (metrická) 123 cm.

1. Základní nastavení tabletu Vložení SIM a paměťové karty Zapnutí tabletu a PIN. 2. Kontakty. 3. Volání

Olga Rudikova 2. ročník APIN

Identifikátor materiálu: ICT-1-17

Nastavení telefonu T-Mobile MDA Compact III

gdmss Lite Android DVR Mobile Client Návod k obsluze aplikace

Cloudové služby kancelářského softwaru hostované společností Microsoft Kvalitní nástroje pro firemní nasazení za přijatelnou cenu Vždy aktuální verze

O projektu Nasazení OpenOffice.org v praxi

Nokia Nseries PC Suite vydání

2. Kontakty. 1. Základní nastavení telefonu Vložení SIM a paměťové karty Zapnutí telefonu a PIN. 3. Volání

1.2 Operační systémy, aplikace

2011 Všechna práva vyhrazena. Stručné pokyny k zařízení Acer ICONIA TAB Model: A500/A501 Původní vydání: 4/2011. Acer ICONIA TAB.

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

SDC aplikace. Zrychlený návod na zprovoznění

Jedna klávesnice. Plně vybavená. Pro počítač, telefon a tablet.

Cloudové služby kancelářského softwaru hostované společností Microsoft Kvalitní nástroje pro firemní nasazení za přijatelnou cenu Vždy aktuální verze

RadioBase 3 Databázový subsystém pro správu dat vysílačů plošného pokrytí

Transkript:

Programujeme pro Android Jiří Vávrů, Miroslav Ujbányai DRUHÉ, rozší řené v ydání Vývoj nativních aplikací pro systém Android krok za krokem Instalace vývojových nástrojů a kon gurace prostředí Eclipse Propojení s relační databází SQLite Práce s datovými soubory a widgety Publikace aplikace v Google play Práce s GPS a sms zprávami Monetizace aplikace za použití reklamy

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

Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena v papírové, elektronické či jiné podobě bez předchozího písemného souhlasu nakladatele. Neoprávněné užití této knihy bude trestně stíháno. Programujeme pro Android 2., rozšířené vydání Jiří Vávrů, Miroslav Ujbányai Vydala Grada Publishing, a.s. U Průhonu 22, Praha 7 jako svou 5354. publikaci Odpovědný redaktor Štěpán Böhm Sazba Tomáš Brejcha Počet stran 256 První vydání, Praha 2013 Grada Publishing, a.s., 2013 Cover Photo allphoto.cz V knize použité názvy programových produktů, firem apod. mohou být ochrannými známkami nebo registrovanými ochrannými známkami příslušných vlastníků. Vytiskla Tiskárna v Ráji, s.r.o., Pardubice ISBN 978-80-247-4863-4 (tištěná verze) ISBN 978-80-247-8854-8 (elektronická verze ve formátu PDF) ISBN 978-80-247-8855-5 (elektronická verze ve formátu EPUB)

Obsah Úvod........................................................................ 13 1. 2. 3. Android představení 1.1 Co je to Android?..................................................... 15 1.2 Historie OS........................................................... 15 1.2.1 Začínáme........................................................ 16 1.2.2 Google a mobilní zařízení........................................ 16 1.2.3 Open Handset Alliance.......................................... 16 1.2.4 Historie a současnost verzí....................................... 16 1.3 Architektura OS...................................................... 19 1.3.1 Linux Kernel..................................................... 19 1.3.2 Libraries......................................................... 20 1.3.3 Android runtime................................................. 21 1.3.4 Application Framework.......................................... 21 1.3.5 Applications..................................................... 21 1.4 Vlastnosti a funkce OS................................................ 22 1.5 Licencování OS....................................................... 24 Vývojové nástroje a prostředí 2.1 Java Development Kit (JDK).......................................... 25 2.2 Software Development Kit (SDK)..................................... 26 2.2.1 Instalace SDK.................................................... 27 2.2.2 Virtuální mobilní zařízení (AVD).................................. 30 2.3 Vývojové prostředí Eclipse............................................ 31 2.3.1 Výhody Eclipse................................................... 32 2.3.2 Instalace Eclipse................................................. 32 2.3.3 Popis prostředí Eclipse........................................... 33 2.4 Android Development Tool (ADT)..................................... 34 2.4.1 Stažení a instalace ADT.......................................... 34 2.4.2 Konfigurace ADT................................................. 37 Základní kameny Android aplikace 3.1 Typy aplikací......................................................... 39 3.2 Anatomie Android aplikace.......................................... 39 3.2.1 Aktivity (Activity)................................................. 39 3.2.2 Služby (Services)................................................. 40 3.2.3 Poskytovatelé obsahu (Content Providers)....................... 40 3.2.4 Záměry (Intents)................................................. 40 3.2.5 Přijímače (Broadcast Receivers)................................... 41 3.2.6 Oznámení (Notifications)......................................... 41 Obsah 5

3.3 Životní cyklus aplikace............................................... 41 3.4 Životní cyklus aktivity................................................ 42 3.5 Životní cyklus služby................................................. 44 3.6 Android Manifest.................................................... 45 3.6.1 Struktura a seznam elementů.................................... 46 3.6.2 Dodržovaná pravidla v rámci Manifestu.......................... 46 3.6.3 Funkce aplikace vs. Android Manifest............................ 48 3.7 Úrovně Android API.................................................. 49 3.7.1 Co je úroveň API?................................................ 49 3.7.2 Použití úrovní API................................................ 50 4. 5. První projekt Hello World 4.1 Jak vytvořit Android projekt v prostředí Eclipse....................... 53 4.2 Struktura projektu................................................... 55 4.2.1 Kořenová struktura............................................... 56 4.2.2 Struktura adresáře res/........................................... 56 4.2.3 Struktura adresáře bin/........................................... 57 4.3 Obsah Manifestu..................................................... 57 4.4 První spuštění Android projektu...................................... 58 Stručný úvod do programování v jazyce Java 5.1 Konstanty a proměnné............................................... 59 5.2 Struktury opakování................................................. 60 5.2.1 Smyčka while.................................................... 60 5.2.2 Smyčka do/while................................................ 60 5.2.3 Smyčka for....................................................... 61 5.3 Pole, řetězce a soubory............................................... 62 5.3.1 Deklarace, tvorba a inicializace polí.............................. 62 5.3.2 Deklarace a použití řetězců...................................... 63 5.3.3 Čtení a zápis dat z/do souboru................................... 64 5.4 Metody.............................................................. 65 5.4.1 Metody třídy..................................................... 65 5.4.2 Metody instance................................................. 65 5.4.3 Deklarace metod................................................ 65 5.4.4 Metoda main()................................................... 66 5.4.5 Předávání parametrů............................................. 66 5.5 Třídy a objekty....................................................... 66 5.5.1 Struktura třídy................................................... 67 5.5.2 Modifikátory přístupu............................................ 67 5.5.3 Tvorba třídy a objektu........................................... 68 5.6 Dědičnost............................................................ 69 5.7 Výjimky.............................................................. 70 5.7.1 Druhy výjimek................................................... 70 6 Programujeme pro Android

5.7.2 Vyvolání výjimek................................................. 71 5.7.3 Ošetření výjimek................................................. 71 5.7.4 Odchycení výjimek.............................................. 71 6. 7. Uživatelské rozhraní 6.1 Hierarchie uživatelského rozhraní.................................... 73 6.2 Uživatelské rozhraní a aktivita....................................... 74 6.2.1 Přiřazení uživatelského rozhraní k aktivitě........................ 74 6.3 Rozvržení představení............................................. 75 6.4 Lineární rozvržení.................................................... 75 6.4.1 Orientace rozvržení.............................................. 75 6.4.2 Zarovnání objektů............................................... 76 6.4.3 Parametry rozvržení.............................................. 76 6.4.4 Váha objektů.................................................... 76 6.4.5 Objekty a jejich okraje........................................... 77 6.4.6 Příklad použití lineárního rozvržení............................... 78 6.5 Relativní rozvržení................................................... 80 6.5.1 Koncepce relativity.............................................. 80 6.5.2 Relativní pozice vůči rozvržení................................... 81 6.5.3 Relativní pozice vůči ostatním objektům......................... 81 6.5.4 Vyhodnocování pozice objektů.................................. 82 6.5.5 Příklad použití relativního rozvržení.............................. 82 6.6 Tabulkové rozvržení.................................................. 85 6.6.1 Skladba tabulkového rozvržení................................... 85 6.6.2 Vkládání objektů................................................. 85 6.6.3 Přizpůsobení sloupců tabulky.................................... 86 6.6.4 Příklad použití tabulkového rozvržení............................ 86 6.7 Posun obrazovky..................................................... 89 6.8 Změna orientace zobrazení při změně orientace zařízení............. 90 Využití standardních vizuálních komponent 7.1 Popisky.............................................................. 93 7.1.1 Vlastnosti třídy TextView......................................... 94 7.2 Textová pole......................................................... 94 7.2.1 Vlastnosti třídy EditText.......................................... 95 7.2.2 Metody třídy EditText............................................ 95 7.3 Tlačítka.............................................................. 96 7.4 Zaškrtávací pole...................................................... 97 7.4.1 Metody třídy CheckBox.......................................... 98 7.5 Přepínače............................................................ 99 7.5.1 Metody třídy RadioButton...................................... 101 7.6 Indikátory průběhu................................................ 101 7.7 Datum a čas........................................................ 104 Obsah 7

7.7.1 Nastavení data a času........................................... 104 7.7.2 Chronometr.................................................... 108 7.8 Obrázky............................................................ 110 7.9 Seznamy........................................................... 112 7.9.1 ListView a ListActivity........................................... 112 7.9.2 Adaptéry....................................................... 112 7.9.3 Tvorba jednoduchého seznamu................................ 112 7.9.4 Dynamická tvorba seznamu s vlastním rozvržením.............. 114 7.9.5 Objekt jménem convertview.................................... 116 7.10 Záložky............................................................ 117 7.10.1 Tvorba záložek pomocí třídy TabHost........................... 117 7.10.2 Tvorba záložek pomocí třídy ViewFlipper........................ 120 7.10.3 Tvorba záložek pomocí třídy SlidingDrawer..................... 122 7.11 Menu.............................................................. 123 7.11.1 Základní menu................................................. 124 7.11.2 Vnořené menu.................................................. 124 7.11.3 Kontextové menu.............................................. 125 7.11.4 Menu pomocí XML návrhu..................................... 125 7.11.5 Příklad použití menu............................................ 126 7.12 Pop-up zprávy..................................................... 130 7.12.1 Bublinové dialogy.............................................. 130 7.12.2 Varovné/informativní dialogy................................... 130 7.12.3 Příklad použití dialogů.......................................... 131 7.13 Fonty.............................................................. 132 7.13.1 Nastavení fontu................................................. 133 7.13.2 Externí fonty.................................................... 134 8. Databázový systém SQLite 8.1 Úvod do SQLite..................................................... 137 8.2 Tvorba databáze................................................... 138 8.3 Tvorba tabulky..................................................... 138 8.4 Vyhledávání dat v databázi........................................ 139 8.4.1 Vyhledávání pomocí metody rawquery()....................... 140 8.4.2 Vyhledávání pomocí metody query()............................ 140 8.5 Práce s daty v databázi............................................. 141 8.5.1 Vkládání dat.................................................... 141 8.5.2 Změna existujících dat.......................................... 141 8.5.3 Smazání dat.................................................... 142 8.6 Práce s kurzory..................................................... 142 8.7 Nástroje pro práci s databází....................................... 143 8.8 Příklad databázové aplikace........................................ 144 8.8.1 Hlavní menu.................................................... 144 8.8.2 Kontextové menu.............................................. 145 8 Programujeme pro Android

8.8.3 XML rozvržení ListView........................................ 145 8.8.4 XML rozvržení okno dialogu.................................. 146 8.8.5 Třída MyDatabaseHelper........................................ 147 8.8.6 Třída SQLiteDemoActivity....................................... 149 9. 10. 11. 12. Preference 9.1 Systém uložení preferencí.......................................... 155 9.2 Druhy preferencí a jejich použití.................................... 155 9.2.1 ListPreference................................................... 155 9.2.2 EditTextPerference.............................................. 156 9.2.3 CheckBoxPreference............................................ 157 9.2.4 RingtonePreference............................................. 157 9.3 Organizace preferencí.............................................. 158 9.4 Zobrazení/načtení preferencí a jejich specifikace................... 159 9.5 Příklad použití preferencí.......................................... 160 9.5.1 XML soubor preference....................................... 160 9.5.2 XML soubor aktualizace....................................... 161 9.5.3 Třída Preferences................................................ 162 9.5.4 Třída PreferencesDemoActivity.................................. 162 Práce s datovými soubory 10.1 Otevření a zobrazení XML souboru................................. 165 10.2 Čtení a zápis dat z/do souboru..................................... 167 Widgety na domovské obrazovce 11.1 Widget umístěný na domovské obrazovce?......................... 171 11.2 Tvorba widgetu.................................................... 171 11.2.1 Definice widgetu............................................... 172 11.2.2 Vytvoření instance widgetu..................................... 174 11.2.3 Systém aktualizace widgetu..................................... 175 11.2.4 Konfigurace widgetu........................................... 177 11.2.5 Vymazání widgetu.............................................. 182 Práce s GPS 12.1 Přidání oprávnění do souboru AndroidManifest.xml................ 183 12.2 Vytvoření třídy GPSTracker......................................... 184 12.3 Uživatelská interakce (zobrazení systémového nastavení).......... 187 12.4 Zastavení používání GPS aplikací................................... 188 12.5 Výsledný kód třídy GPSTracker.java................................. 189 12.6 Použití třídy GPSTracker.java....................................... 193 12.7 Test aplikace v emulátoru za použití DDMS Tool.................... 194 Obsah 9

13. 14. 15. 16. Vývoj reálné aplikace krok za krokem 13.1 Vlastnosti a popis aplikace......................................... 197 13.2 Diagram aplikace a bližší popis funkcionality....................... 197 13.3 Založení nového projektu.......................................... 199 13.4 Nastavení aplikace pro přístup ke zdrojům......................... 202 13.5 Nastavení aplikace pro běh na pozadí.............................. 204 13.6 Kód třídy pro práci s příchozími SMS SMSReceiver.................. 205 13.7 Kód třídy pro práci se soubory...................................... 206 13.8 Úprava třídy main Activity......................................... 210 13.8.1 Popis jednotlivých metod třídy.................................. 216 13.9 Import knihoven pro odesílání e-mailů............................. 217 13.10 Třída pro odesílání e-mailů MailHelper.java........................ 218 13.11 Třída pro zpracování příchozích a odchozích telefonních hovorů CallHelper.java..................................................... 222 13.12 Třída pro zaregistrování služby pro sledování hovorů............... 225 13.13 Uživatelské rozhraní aplikace...................................... 227 13.14 Rekapitulace aplikace a otestování v emulátoru.................... 228 13.14.1 Otestování záznamu příchozích a odchozích hovorů............ 229 13.14.2 Zalogování příchozí SMS........................................ 230 13.14.3 Zobrazení obsahu souborů..................................... 230 13.14.4 Odeslání logů e-mailem........................................ 232 Testujeme aplikaci v reálném zařízení 14.1 Vytvoření certifikátu pro export digitálně podepsané aplikace..... 234 14.2 Příprava aplikace a samotný upload aplikace do Google Play....... 235 14.2.1 Registrace vývojářského účtu................................... 235 14.2.2 Upload aplikace do Google Play................................ 235 Monetizace aplikace 15.1 Registrace admob účtu............................................. 237 15.2 Založení nové kampaně............................................ 237 15.3 Import AdMob Android SDK........................................ 239 15.4 Vložení reklamy do aplikace........................................ 241 Tipy a triky 16.1 Zvolte správný namespace pro vaši aplikaci........................ 243 16.2 Naslouchejte uživatelům aplikace.................................. 243 16.3 Používejte návrhové vzory pro platformu........................... 243 16.4 Používejte Hierarchy Viewer, zatímco vytváříte Views.............. 243 16.5 Programujte každý den............................................ 243 16.6 Používejte dva monitory........................................... 244 10 Programujeme pro Android

16.7 Používejte LogCat.................................................. 244 16.8 Prozkoumejte adresář tools........................................ 244 16.9 Používejte zkratky v Eclipse i v emulátoru.......................... 244 16.10 Buďte multi-jazyční................................................ 244 17. Užitečné zkratky a odkazy Závěr..................................................................... 247 Zdroje.................................................................... 248 Rejstřík................................................................... 249 Obsah 11

Úvod Od představení prvního přístroje s operačním systémem Android, který nastartoval revoluci na poli mobilních operačních systémů, uplynulo více než pět let a postupem času systém Android nahradil slavný Symbian a stal se přímým konkurentem systému ios, používaného v zařízeních iphone. Samotná platforma Android dává k dispozici nejen operační systém s uživatelským prostředím pro koncové uživatele, ale i kompletní řešení nasazení operačního systému (specifikace ovladačů aj.) pro mobilní operátory a výrobce zařízení a v neposlední řadě poskytuje vývojářům aplikací efektivní nástroje pro jejich vývoj Software Development Kit. Platforma Android má v současnosti (srpen 2013) na trhu s chytrými telefony 80% podíl a každý den je na celém světě aktivováno více než 550 tisíc zařízení s operačním systémem Android. Do svých výrobků jej instaluje více než 39 výrobců, a Android se tak řadí mezi nejúspěšnější mobilní platformy vůbec. Důvodů, proč je Android tak příznivě přijímán všemi skupinami uživatelů, od těch mladších až po firemní klientelu, je více. Jedná se o velmi rychlý a stabilní operační systém. Zdrojový kód Androidu je volně dostupný a šířený jako open source. Tento důvod asi běžný uživatel přímo neocení, ale dělá radost výrobcům mobilních zařízení. Ti jej s oblibou a bez licenčních poplatků, které by jinak museli promítnout do ceny zařízení, přizpůsobují a instalují do svých výrobků. A tak se stává nejoblíbenějším systémem pro tato zařízení. Vzhledem k rozšířenosti a obrovskému růstu popularity tohoto OS roste poptávka po kvalitním programovém vybavení, a tím pádem jsou programátoři, vzdělaní v této oblasti velmi žádaní. Tato kniha je první svého druhu psaná česky, jež si klade za cíl zasvětit čtenáře do základů a pokročilejších technik programování v jazyce Java pod tímto operačním systémem a usnadnit tak proniknutí do tajů tvorby programů a překonání prvních překážek na této cestě. Pro ty, kteří chtějí proniknout do tajů Androidu, je připravena tato publikace, v níž se budeme zabývat operačním systémem Android, jakožto progresivním OS se slibnou budoucností na poli mobilních zařízení. Úvod 13

1. Android představení První kapitola knihy je určená všem čtenářům, kteří se vývojem pro operační systém Android nikdy nezabývali, potažmo o Androidu pouze slyšeli a chtějí se s tímto stále populárnějším systémem seznámit a dozvědět se základní informace o systému samotném, popřípadě o jeho historii. Čtenář se v této kapitole také dozví, ve kterých typech zařízení se Android takříkajíc zabydlel a která ještě v budoucnu čekají na jeho příchod. V neposlední řadě si zde povíme něco málo o vnitřní architektuře systému, jeho vzhledu, popíšeme jeho základní funkce a také se zmíníme o způsobu licencování. Tuto kapitolu lze tedy brát jako vstupní bod k základní informovanosti budoucích uživatelů, resp. vývojářů tohoto mladého operačního systému. 1.1 Co je to Android? Android je rozsáhlý operační systém vytvořený společností Google, založený na open source platformě, tedy jedná se o počítačový software s otevřeným zdrojovým kódem. Slova otevřený kód zde reprezentují snadnou dostupnost, a to jak technickou, tak licenční. Jinak řečeno, uživatel může systém využívat, při splnění jistých podmínek, zdarma a tato licenční politika mu také umožňuje přístup ke zdrojovým kódům, které následně může podle svých potřeb využívat, popřípadě upravovat. OS je založen na Linuxovém jádře 2.6 různých verzí, které zajišťuje zabezpečení systému jako celku, správu paměti, správu procesů, přístup k síti a ovladače všech vnitřních senzorů a komponent. Jednotlivé aplikace k funkcím jádra nepřistupují přímo, ale prostřednictvím Android API. Android je tedy progresivní operační systém primárně vyvíjen jako platforma převážně pro PDA, tablety a tzv. chytré telefony. Byl postaven od základu, který umožní vývojářům vytvářet působivé mobilní aplikace, jež mohou plně využívat všech vlastností, které telefon nabízí, jako např. základní funkce telefonu (obsluha telefonních hovorů, posílání textových zpráv (SMS), nebo využívání fotoaparátu). Takto vybudovaný systém umožňuje vývojářům vytvářet bohatší a soudržnější zážitky pro uživatele. Android je postaven na otevřeném jádře Linux a používá vlastní virtuální stroj, který byl navržen tak, aby optimalizoval paměť a hardwarové prostředky v mobilním prostředí. Tato platforma se bude dále vyvíjet, protože vývojářská komunita pracuje společně na vytváření inovativních mobilních aplikací. 1.2 Historie OS Android je jeden z nejmladších operačních systémů. Pojďme se nyní společně podívat na jeho krátkou, avšak zajímavou historii. V této podkapitole se dozvíte informace napříč celou historií pojednávající o vzniku první společnosti zabývající se vývojem OS, přes její historii až po samotný systém a jeho vývojové verze. Android představení 15

1.2.1 Začínáme Vše začalo založením společnosti Android, Inc. v roce 2003 v Palo Alto v Kalifornii v USA. Zakladateli se stali Andy Rubin, Rich Miner, Nick Sears a Chris White. Společnost začala vyvíjet aplikace pro mobilní zařízení. 1.2.2 Google a mobilní zařízení V srpnu 2005 došlo k odkupu společnosti Android, Inc. a ta se stala stoprocentní dceřinou společností pozdějšího giganta, společnosti Google, a to včetně klíčových zaměstnanců, dřívějších zakladatelů Android, Inc. Google díky akvizici získala nové, zkušené zaměstnance v oboru mobilních technologií. Vznikl nový tým pod vedením Andyho Rubina, jenž vyvinul platformu pro mobilní zařízení, založenou na jádře OS Linux, a v roce 2007 získal několik patentů v této oblasti. Bylo jasné, že Google tímto krokem vstoupil na trh chytrých mobilních telefonů a vydání vlastního přístroje bylo jen otázkou času. 1.2.3 Open Handset Alliance K oficiálnímu představení softwarové platformy Android došlo 5. listopadu 2007. V tento den také vzniklo sdružení firem Open Handset Alliance (dále OHA), které v době založení zahrnovalo více než 30 firem (v těchto dnech více než 80), jako například firmy Intel, HTC, LG, Google, Motorola, T-Mobile, Samsung Electronics atd., a to z oblastí mobilních operátorů, softwarových společností, společností vyrábějících polovodičové součástky nebo výrobců mobilních telefonů. Cílem OHA bylo vytvořit otevřené standardy pro mobilní zařízení. V den oznámení vzniku OHA byl rovněž konsorciem představen první produkt založený na mobilní platformě Android, jenž byl postaven na jádře Linux verze 2.6. Tímto krokem se Android, jako vlajková loď OHA, dostává na trh a začíná jeho boj s konkurencí, která není nikterak malá ani slabá (IPhone, Windows Mobile/Phone, Symbian OS, Palm OS atd.). 1.2.4 Historie a současnost verzí Operační systém Android od svého prvního oficiálního vydání (verze 1.0) prošel řadou změn, které se promítly v několika aktualizacích opravujících zjištěné chyby a přidávajících novou funkčnost do systému. Jednotlivé verze dostaly název podle zákusků, jdoucích podle abecedy (Cupcake, Donut, Eclair, Froyo, Gingerbread, Honeycomb, Ice Cream Sandwich). Pojďme si je nyní prohlédnout podrobněji, stručně shrnout některé jejich nejdůležitější vlastnosti a funkce. Android 1.0 První oficiální verze, zatím ještě bez přívlastku, spatřila světlo světa 23. září 2008. Tento operační systém dostal do vínku, jako první zařízení na světě, HTC Dream (T-Mobile G1). Byl založen na jádru Linuxu 2.6.25. První Android obsahoval tyto základní funkce a aplikace: Webový prohlížeč pro zobrazování, posunování a přibližování HTML a XHTML stránek s funkcí zobrazení více stránek ve formě karet. Fotoaparát bez jakýchkoli dalších funkcí. Android Market on-line katalog (obchod), obsahující různé druhy aplikací a her. Email umožňující přístup k emailovým serverům, které jsou běžně k nalezení na internetu a podporují POP3, IMAP4 a SMTP. Gmail email od společnosti Google. Google Contacts kontakty, jež jsou schopny být synchronizovány s aplikací Kontakty. Google Calendar kalendář, jenž je schopen být synchronizován s aplikací Kalendář. Google Maps s funkcí Latitude (zjištění své polohy z GPS souřadnic) a Street View (pohled do ulic ve formě panoramatických záběrů v rozsahu 360 horizontálně a 290 vertikálně). 16 Programujeme pro Android

Google Sync software umožňující synchronizaci kontaktů, kalendáře a Gmailu. Google Talk komunikační služba umožňující zasílání textových zpráv. Media Player přehrávač umožňující správu, importování a přehrávání video souborů. YouTube přehrávač. Budík, kalkulačka, galerie obrázků, hlasové vytáčení atd. Android 1.1 Android 1.1 byl oficiálně vydán 9. února 2009. O nové verzi 1.1 můžeme mluvit jako o změně symbolické, neboť bylo opraveno a přidáno jen minimum funkcí a celá změna se týkala pouze jediného zařízení T-Mobile G1. Android 1.5 (Cupcake) Platforma 1.5 přináší pro uživatele a vývojáře řadu nových funkcí postavených na Linuxovém jádře 2.6.27. Seznam základních změn, vylepšení a nových funkcí: Zpřesnění všech klíčových prvků UI (User Interface uživatelské rozhraní). Animace při přechodu mezi obrazovkami. Rotace aplikací při rotaci zařízení. Zrychlení spouštění fotoaparátu a snímání fotografií. Rychlejší získání polohy uživatele přes GPS. Implementace softwarové klávesnice. Implementace domovské obrazovky. Nahrávání videa. Přehrávání video formátů MPEG-4 a 3GP. Nahrávání videa na portál YouTube. Nahrávání fotografií na portál Google Picasa. Stereo Bluetooth podpora. Nové rozhraní API a Manifest prvků (pro vývoj aplikací). Android 1.6 (Donut) S příchodem Linuxového jádra 2.6.29 přichází další verze, tentokrát 1.6, která byla uvolněna 15. září 2009. Opět byl systém vylepšen opravou stávající funkčnosti a také doplněn o funkčnost novou. Seznam základních změn, vylepšení a nových funkcí: Vylepšené grafické rozhraní pro fotoaparát, kameru a obrázkovou galerii. Přibylo pole pro rychlé vyhledávání verze 1.6 obsahuje přepracovaný vyhledávací rámec, který zajišťuje rychlý, efektivní a konzistentní způsob, jak uživatelům umožnit prohledávat více zdrojů najednou (záložky prohlížeče a jejich historie, kontakty a web) přímo z domovské obrazovky. Nový ovládací panel pro nastavení a konfiguraci VPN (Virtual Private Network). Přidána byla podpora pro WVGA rozlišení obrazovky. Vylepšený Android Market. Aktualizováno vyhledávání hlasem. Indikátor využití baterie umožňuje uživatelům zjistit, které aplikace a služby spotřebovávají nejvíce energie a uživatel na základě těchto informací může přijmout opatření na šetření baterie úpravou nastavení, popřípadě ukončením aplikace, nebo její odinstalace. Android 2.0/2.1 (Eclair) Platforma 2.0/2.1, uvolněna ne dlouho po verzi 1.6, byla postavena na stejném jádře jako verze 1.6, tedy 2.6.29, ale opět přináší mnoho změn, které ocení jak samotní uživatelé, tak vývojáři. Android představení 17

* Seznam základních změn, vylepšení a nových funkcí: Inovace v rámci seznamu kontaktů. Podpora více emailových účtů. Podpora pro Microsoft Exchange. Vylepšení softwarové klávesnice. Podpora pro více velikostí a rozlišení displeje. Podpora pro Bluetooth verze 2.1. Úvodní obrazovka podporuje nyní animovanou tapetu. Fotoaparát obdržel digitální zoom. Nové prostředí pro webový prohlížeč, ve kterém byla doplněna podpora pro HTML5. Android 2.2 (Froyo) Dne 20. května 2010 byl na konferenci Google/IO představen nový Android 2.2, postavený na Linuxovém jádře 2.6.32. Přidána byla podpora pro nové technologie a také funkce uživatelského rozhraní. Seznam základních změn, vylepšení a nových funkcí: Možnost instalovat aplikace na paměťovou kartu. Vylepšená podpora pro Exchange. Vylepšení nastavení fotoaparátu a kamery. Možnost vytvořit ze zařízení Wi-Fi hotspot a sdílet tak internetové připojení pro více zařízení. Sdílet internetové připojení zapojením zařízení přes USB kabel k počítači. Přidána podpora pro více jazyků softwarové klávesnice v jeden okamžik. Zrychlení výkonu systému díky JIT (Just-in-time) kompilátoru. Vylepšení správy paměti RAM. Android 2.3/2.4 (Gingerbread) Poslední z momentálně nejvyužívanějších verzí Androidu 2.3 (Linuxové jádro 2.6.35) byla vydána 6. prosince 2010. Opět došlo ke změnám systému, a to jak v rámci oprav chyb systému minulého, tak ve sféře doplnění o nové funkce či podporu v nových technologiích. Seznam základních změn, vylepšení a nových funkcí: Podpora pro video formát WebM a HTML5. Podpora internetové telefonie v rámci protokolu SIP. Nová aplikace Google Maps s 3D přístupem. Upravená softwarová klávesnice. Zlepšení funkce kopírovat a vložit. Android 3.0/3.1/3.2 (Honeycomb) Android 3.0 je platforma určená pouze pro Tablety. Novinky ve verzi 3.0 Honeycomb jsou převážně grafického charakteru, ale nouze o nové funkce zde také nepanuje. Seznam základních změn, vylepšení a nových funkcí: Funkce ovládání byla přepracována pro potřeby tabletu. Přístroje využívající Android 3.0 už nepotřebují fyzická tlačítka, vše obstará systém sám. Grafika dostala uhlazenější kabát, při přechodu mezi obrazovkami se nyní častěji setkáme s 3D efekty. Došlo k přepracování widgetů, nyní jsou živější, dostaly na ploše více prostoru a nové funkce. Nové Google Maps, nyní ve verzi 5 ovládání probíhá pomocí multi-touch gest. Přístup na Google Books. Vylepšená aplikace YouTube, Gmail atd. 18 Programujeme pro Android

Android 4.0/4.0.1/4.0.2 (Ice Cream Sendwich) Nejnovější verze 4.0 se na trhu objevila koncem roku 2011 na zařízeních Google. Jedná se opět o platformu Open-Source, která je nasazena na chytré mobilní telefony, na rozdíl od verze 3.0, jež je primárně určena pro tablety. Jako každá oficiálně vydaná platforma Androidu, i tato přináší jak novinky z pohledu uživatele, tak také z pohledu vývojáře nových aplikací, a přináší s sebou ty nejlepší funkce z Honeycombu. Seznam základních změn, vylepšení a nových funkcí: Vylepšená práce s kontakty a sociálními sítěmi. Vylepšená práce s fotoaparátem. Detekce obličeje při videohovoru. Vylepšené rozpoznávání hlasu. Dokonalejší webový prohlížeč, email a kalendář. Všechny aplikace lze ovládat pohybovými gesty. Nová funkce Android Beam, která slouží pro rychlou výměnu informací mezi dvěma telefony s NFC čipem. Nové rozhraní API. Nová funkce Wi-Fi Direct sloužící pro přímé propojení dvou zařízení přes Wi-Fi. 1.3 Architektura OS Architektura operačního systému Android se skládá z pěti vrstev. Každá vrstva provádí různé operace a vystupuje víceméně samostatně. V praxi však dochází ke spolupráci jednotlivých částí a vrstvy tímto nejsou mezi sebou striktně odděleny. Obrázek 1.1: Architektura operačního systému Android 1.3.1 Linux Kernel Nejnižší vrstva architektury představuje Linux Kernel neboli jádro operačního systému. Její základní funkcí je implementace abstrakce mezi použitým hardwarem a softwarem ve vyšších vrstvách. Při startu zařízení je jádro, postavené na Linuxu verze 2.6, zavedeno do operační paměti a je mu předáno řízení, což představuje neustálou kontrolu nad systémem a koordinaci činnosti všech běžících procesů (například souběžný běh aplikací), podpora správy paměti, správy sítí atd. Android představení 19

1.3.2 Libraries Další z vrstev Android architektury jsou Libraries (knihovny). Android nabízí celou řadu rozhraní API pro vývoj aplikací. Následující seznam základních API by měl poskytnout náhled do toho, co je k dispozici pro všechny Android zařízení: android.util hlavní balíček knihoven obsahuje nízko-úrovňové třídy pro specializované kontejnery, řetězcové formátovače, nebo nástroje pro parsování XML. android.os knihovny poskytující přístup k základním službám operačního systému, jako je interprocesní komunikace, předávání zpráv, funkce hodin, ladění atd. android.graphics knihovny podporující vykreslování grafických prvků na obrazovku. android.text knihovny obsahující nástroje pro zpracování a analýzu řetězců a jejich zobrazení. android.database knihovny obsahující nízko-úrovňové třídy potřebné pro práci s kurzory v rámci databáze. android.content knihovny obsahující třídy pro přístup a publikování dat na zařízení. android.widget knihovny umožňující přístup k prvkům uživatelského rozhraní, jako jsou tlačítka, seznamy, nabídky atd. com.google.android.maps balíček knihoven, umožňující vývojáři přístup a ovládání aplikace Google Maps. android.app knihovny poskytující přístup k aplikačnímu modelu a obsahující API funkce aktivit a služeb, které tvoří základ pro všechny android aplikace. android.provider systém Android obsahuje několik standardních poskytovatelů obsahu pro běžné typy dat, jako např. audio/video soubory, obrázky, kontaktní informace, data v kalendáři atd. Třídy těchto knihoven poskytují zjednodušené metody přidávání nebo načítání dat z těchto poskytovatelů. android.telephony knihovny umožňující komunikovat se zařízením přímo a sledovat tak stav telefonu a SMS zpráv, či přijímat telefonní hovory. android.webkit knihovny obsahující funkce pro práci s webovým obsahem. Vyjma Android API zde existují knihovny, jež jsou napsány v jazyce C/C++ a využívají je různé komponenty systému. Funkce naprogramovaných knihoven jsou vývojářům aplikací poskytnuty prostřednictvím Android Application Framework. Tato kategorie obsahuje například: OpenGL knihovna sloužící k podpoře 3D grafiky založené na OpenGL ES. FreeType knihovna pro bitmapové a vektorové vykreslování písma. libc standardní C knihovna optimalizovaná pro Linux na bázi embedded zařízení. SGL základní knihovna sloužící pro 2D grafický engine. SQLite - knihovnu obsahující relační databázi, která je určitým způsobem odlehčena pro mobilní zařízení, jež je dostupná všem aplikacím. SSL knihovna podporující využití šifrovacího protokolu pro bezpečnou internetovou komunikaci. Rozšířené Android knihovny Základní knihovny poskytují všechny funkce, které jsou potřeba pro spuštění aplikací pro Android, ale po čase dojdete ke zjištění, že je potřeba se ponořit do pokročilého rozhraní API, které nabízí opravdu zajímavou funkčnost. Následující seznam ukazuje některé z těchto knihoven: android.location knihovny poskytující přístup k aktuální fyzické poloze zařízení za použití lokalizace přes GPS. android.media knihovny poskytující podporu pro přehrávání a nahrávání multimediálních audio/video souborů, včetně těch streamovaných. android.opengl Android nabízí výkonné 3D vykreslovací jádro pomocí OpenGL ES API, které lze použít k vytvoření dynamického, 3D uživatelského rozhraní. android.hardware prostřednictvím těchto knihoven lze využívat hardware zařízení, jako například fotoaparát, pohybový senzor, kompas atd. android.bluetooth, android.net.wifi knihovny podporující využití komunikace přes bluetooth, či Wi-Fi. 20 Programujeme pro Android

1.3.3 Android runtime Tato vrstva obsahuje virtuální stroj DVM (Dalvik Virtual Machine) a základní Java knihovny. Virtuální stroj Dalvik byl vyvíjen od roku 2005 speciálně pro Android společností Google pod vedením Dana Bornsteina. DVM má registrově orientovanou architekturu a využívá základních vlastností linuxového jádra, jako je například koordinace běžících procesů, správa paměti nebo práce s vlákny. Nový virtuální stroj přišel na svět, jelikož programátoři, kteří vyvíjejí aplikace pro operační systém Android, toto činí prostřednictvím jazyka Java, jehož knihovny jsou licencovány jako open source, avšak virtuální stroj (JVM), který slouží pro překlad programu do spustitelné podoby, již volně šiřitelný není. Dalším důvodem vzniku DVM bylo optimalizovat virtuální stroj pro potřeby mobilních zařízení, tudíž hlavní roli hrál výkon spolu s úsporou energie. Jak již bylo řečeno, obsahem této vrstvy jsou také knihovny programovacího jazyka Java. Jejich obsah lze téměř srovnat s platformou Java SE (Standart Edition), jejímž základem jsou JVM, API knihovny základních funkcí a API knihovny pro vytváření klientských desktopových aplikací (AWT, Swing), s tím rozdílem, že AWT a Swing byly u OS Android nahrazeny knihovnami pro tvorbu uživatelského rozhraní pro Android a přibyly také knihovny Apache pro práci se sítí. Aplikace pro Android jsou programovány v jazyce Java, následně překládány do Java byte kódu, a nakonec do mezikódu pomocí Dalvik kompilátoru. Výsledný byte kód je spuštěn na DVM. Každá aplikace je samostatný proces s vlastní instancí DVM. 1.3.4 Application Framework Pro vývojáře se jedná o nejdůležitější vrstvu. Díky otevřené vývojové platformě operačního systému Android se nabízí programátorům prostředí pro tvorbu bohatých a inovativních aplikací. Aplikační rámec umožňuje přistoupit k nejrůznějším službám, které mohou vývojáři využívat přímo ve svých aplikacích, a ty jim následně dovolí např. přistoupit na prvky graficko-uživatelského rozhraní, používat hardware zařízení, nastavovat alarmy, spouštět jiné aplikace na pozadí atd. Některé důležité služby aplikačního rámce: View System Umožňuje použít pro tvorbu graficko-uživatelského rozhraní prvky jako textová pole, tlačítka, seznamy, zaškrtávací políčka, přepínače, aj. Notification Manager Umožňuje zobrazení stavového řádku s vlastním upozorněním všem aplikacím. Content Providers Umožňuje přistoupit a pracovat s obsahem jiných aplikací, jako například Kontakty, Kalendář aj. Activity Manager Ovládá životní cyklus aplikací, jejich start, průběh a ukončení. Resource Manager Poskytuje přístup nekódovým zdrojům, jako jsou řetězce, grafika, přidané soubory. Package Manager Obsahuje informace o aplikacích nahraných do operačního systému. 1.3.5 Applications Poslední nejvyšší vrstva představuje již samotné aplikace, které jsou využívány jednotlivými uživateli. Jedná se o aplikace, jež jsou na zařízení už předinstalovány, či ty, které si uživatel může stáhnout z online katalogu (Android Market). Android představení 21

1.4 Vlastnosti a funkce OS V dalších kapitolách se od teorie a povídání o Androidu obecně přesuneme k samotnému vývoji jednoduchých a praktických ukázek, které předvedou, jak používat základní vlastnosti a funkce OS. Příklady budou realizovány na Androidu verze 2.3, který si nyní, z hlediska obsahu, představíme. Handset layouts (rozvržení telefonu) Platforma Android je adaptabilní k velikosti displeje zařízení. O grafické vykreslení jednotlivých obrazovek se stará 2D/3D knihovna na základě OpenGL ES 2.0 specifikace a tradičního rozvržení tzv. chytrých telefonů. Databáze Pro uchovávání dat se využívá relační databáze SQLite, která je pro účely mobilních telefonů jistými způsoby upravena. Přístup k ní je dostupný všem aplikacím. Připojení Android podporuje konektivitu na tyto technologie: GSM/EDGE Bluetooth IDEN Wi-Fi CDMA LTE EV-DO NFC UMTS WiMAX Odesílání zpráv Odesílat SMS a MMS lze přes klasické formuláře, umožňující seskupování příchozích zpráv podle odesílatele. Nově Android 2.3 nabízí tzv. Cloud to Device Messaging API, jenž umožní zasílání zpráv, upozornění na telefon a oboustrannou synchronizaci s jinými zařízeními. Podpora pro více jazyků Android podporuje velký počet jazyků. Verze 2.3 obsahuje dvakrát více jazykových mutací, než verze předešlá. Webový prohlížeč Integrovaný webový prohlížeč je postaven na knihovně WebKit. Vylepšení se dočkal ve verzi 2.3 v podobě nového JavaScript Engine V8 (využívá jej i Google Chrome), který zrychlí javascriptové operace až třikrát a tím i chod prohlížeče jako celku. V testu Acid 3 získal 95/100, což vypovídá o jeho nesporných kvalitách. Podpora pro programovací jazyk Java Většina Android aplikací je napsána v programovacím jazyce Java. S jazykem Java se ruku v ruce instaluje i JVM (Java Virtual Machine), který v platformě Android ovšem chybí (JVM provádí překlad programového kódu do Java byte kódu). Překlad programových tříd zde provádí Dalvik Virtual Machine (DVM), který je speciálně vytvořen pro platformu Android a optimalizován pro bateriová mobilní zařízení s omezenou velikostí paměti a rychlosti CPU. Média Android podporuje následující formáty medií (audio/video/foto) WebM, H.263, H.264, MPEG-4 SP, AMR, AMR-WB, AAC, HE-AAC, MP3, MIDI, Ogg Vorbis, FLAC, WAV, JPEG, PNG, GIF, BMP. 22 Programujeme pro Android

Dodatečná hardware podpora Android umožňuje používat fotoaparát (foto/video), dotykový displej, GPS, gyroskop (pohybový senzor), specializované herní ovladače, teploměry, tlakové senzory a senzory, detekující existenci předmětů v blízkosti zařízení bez fyzického kontaktu atd. Vícedotykové ovládání Android již nativně podporuje vícedotykové ovládání. Jedná se o schopnost zařízení detekovat více dotyků na obrazovce najednou. Tato funkce byla původně zakázána na úrovni jádra z důvodu možného porušení patentů firmy Apple na technologii dotykové obrazovky. Bluetooth Tato technologie bezdrátové komunikace podporuje: A2DP (Advanced Audio Distribution Profile) je bezdrátový standard pro přenos 2 kanálového zvuku v CD kvalitě. AVRCP (Audio/Video Remote Control Profile) schopnost ovládání přehrávání audia/videa pomocí dálkového ovladače. OPP (Object Push Profile) přenos souborů mezi zařízeními. PBAP (Phone Book Access Profile) umožňuje přenos položek telefonního seznamu mezi zařízeními. Hlasové vytáčení. Video telefonování Android nepodporuje nativně videohovory, ale některé telefony mají vlastní verzi operačního systému, který toto podporuje, ať již prostřednictvím UMTS sítí, nebo přes IP. Videohovory jsou dostupné přes aplikaci Google Talk od verze Androidu 2.3.4 či prostřednictvím aplikace Skype 2.1, která nabízí videohovory v Androidu 2.3, díky použití přední kamery (čočka fotoaparátu/kamery). Hlasové vyhledávání Vyhledávání informací na internetu pomocí hlasu uživatele, to je Google Voice Search, neboli hlasové vyhledávání pro chytré mobilní telefony. Od verze Androidu 2.1 je dostupné také v českém jazyce a uživatel má k dispozici databázi více než miliónu slov. Hlasové vyhledávání využívá heuristický algoritmus, tedy s položeným počtem dotazů by měla růst úspěšnost jejich správného rozpoznání. Samozřejmě záleží na prostředí, artikulaci tazatele a také na míře okolního šumu a hluku. Obrázek 1.2: Google Voice Search schéma funkčnosti Android představení 23

Tethering Jedná se o sdílení internetového připojení s dalšími zařízeními. Sdílení připojení může být provedeno přes bezdrátové sítě LAN (Wi-Fi), pomocí Bluetooth, nebo fyzického připojení prostřednictvím kabelu. Mobilní telefon se při zprostředkování tohoto úkolu chová jako router. V případě sdílení internetu pomocí Wi-Fi je tato funkčnost označována jako Mobile HotSpot. 1.5 Licencování OS Android je od základů licencován jako otevřený systém, tudíž všechny části operačního systému (Linuxové jádro, knihovny, programové prostředí i základní aplikace) jsou volně dostupné. Výrobci na tomto systému licencování vydělávají, jelikož mohou přizpůsobit celý systém nasazenému hardwaru a mnohem lépe tím integrovat vlastní aplikace. Výjimkou je pouze verze Androidu 3.0 Honeycomb, jež je určena pouze pro tablety a jejich zdrojové kódy uvolnil Google pouze některým partnerům. Licencování operačního systému Android nezůstává pouze u open source licence, ale systém je také šířen pod licencí business friendly, což v praxi znamená, že umožňuje využití systému pro nejrůznější účely prostřednictvím třetích stran. 24 Programujeme pro Android

2. Vývojové nástroje a prostředí Vývoj aplikací pro Android, stejně jako vývoj většiny aplikací pro mobilní zařízení, probíhá v tzv. Host-Target vývojovém prostředí. Jedná se o druh vývojového procesu, ve kterém prostředí, v němž je aplikace vyvíjená, a prostředí, ve kterém se nakonec realizuje, jsou zcela odlišné. Laicky řečeno, vývoj aplikace probíhá na počítači, který obsahuje vývojové prostředí a další potřebný software pro tvorbu samotné aplikace a testovací fáze konečného projektu již probíhá na mobilním zařízení. Aplikace mohou být testovány na skutečném přístroji opatřeném operačním systémem Android nebo v jeho emulátoru. Pro řadu vývojářů je emulátor základním testovacím zařízením a usnadňuje tak počáteční vývoj a ladění aplikací. Závěrečné zkoušky kompletní funkčnosti aplikace jsou prováděny již na reálném zařízení. My zde tento postup budeme ctít a systém vývoje tímto způsobem používat. V této kapitole se budeme zabývat instalací, nastavením prostředí a sady nástrojů pro vývoj aplikací. Při programování aplikací pro Android budeme používat tyto nástroje: Java Development Kit (JDK) Android Software Development Kit (SDK) Vývojové prostředí Eclipse Android Development Tool (ADT) Verze SDK, JDK a vývojového prostředí Eclipse jsou k dispozici pro operační systémy Windows, Mac OS a Linux. Neexistuje žádná výhoda ve vývoji na konkrétním operačním systému, proto je volba OS čistě na programátorovi. V knize se budeme věnovat instalaci potřebných nástrojů a tvorbě aplikací pod operačním systémem Windows (v ostatních OS je instalace a nastavení prostředí obdobné). 2.1 Java Development Kit (JDK) Java Development Kit (JDK) je soubor základních nástrojů a knihoven pro vývoj aplikací a apletů pro platformu Java. Základní součástí JDK je Java Runtime Environment (JRE), jež slouží pro spouštění aplikací i vývojových nástrojů, dále překladač, debugger atd. Jelikož se aplikace pro Android programují v jazyce Java, je potřeba JDK, resp. JRE nainstalovat. Poslední verzi JDK si můžete stáhnout na adrese: http://www.oracle.com/technetwork/java/javaee/downloads/java-ee- -sdk-6u3-jdk-7u1-downloads-523391.html Vývojové nástroje a prostředí 25

Obrázek 2.1: Webová stránka pro stažení Java Development Kit (JDK) Stránka nabízí stáhnutí Java SE Development Kit verze 7 pro různé druhy operačního systému. Před samotným uložením, popřípadě spuštěním instalačního souboru s JDK na disk, je ještě nutné přijmout licenční ujednání. Obrázek 2.2: Instalace Java Development Kit (JDK) 2.2 Software Development Kit (SDK) Software Development Kit (SDK) je balíček vývojových nástrojů, který umožňuje vytvářet aplikace pro určité operační systémy, hardware platformy nebo herní konzole. SDK ve svém nitru obsahují 26 Programujeme pro Android

knihovny API, dokumentaci, ukázky využití spolu se zdrojovými kódy atd. Android SDK není výjimkou. Obsah je totožný s jinými SDK a navíc zde např. najdeme knihovny Javy potřebné pro tvorbu výkonných mobilních aplikací pro OS Android, další nástroje pro vývoj a ladění aplikací a v neposlední řadě také emulátor virtuální mobilní zařízení fungující na vašem počítači. Seznam všech vývojových nástrojů najdete na adrese: http://developer.android.com/guide/developing/tools/index.html 2.2.1 Instalace SDK Poslední verzi SDK si můžete stáhnout na adrese: http://developer.android.com/sdk/index.html Obrázek 2.3: Webová stránka pro stažení Software Development Kit (SDK) Stránka opět nabízí, obdobně jako při JDK, stáhnutí Software Development Kitu pro operační systémy Windows, Linux a Mac OS X. Pro platformu Windows jsou na stránce k dispozici dva balíčky Android SDK. U prvního z nich instalace v pravém slova smyslu neprobíhá, jelikož stažený soubor reprezentuje ZIP archiv. Tento archiv stačí zkopírovat kdekoli na pevný disk počítače. Důležité je si v tomto případě pouze zapamatovat cestu k uloženému adresáři, kterou je potřeba ve vývojovém prostředí Eclipse nastavit (ukážeme si později). Druhá varianta, jež je tvůrci doporučována, představuje běžný EXE balíček, tedy instalační soubor. Po jeho spuštění dojde ke klasické instalaci pomocí wizardu s nastavením cílové složky instalace SDK. Obsah nainstalovaného balíčku se shoduje s instalací pomocí ZIP archivu. Vývojové nástroje a prostředí 27

Obrázek 2.4: Instalace Software Development Kit (SDK) Obsahem instalačního balíčku je také SDK Manager, který slouží ke stažení odpovídající platformy Androidu do vašeho počítače. Spuštěním souboru SDK Manager.exe ze zvoleného adresáře při instalaci se vám zobrazí obrazovka, viz obrázek 2.5. Obrázek 2.5: Android SDK Manager Jelikož nejnovější balíček SDK podporuje již nejnovější Android 4.3, automatické zatržení této verze je pochopitelné. My jsme si předeslali v první kapitole používat Android verze 2.3.3, jakožto nejčas- 28 Programujeme pro Android

těji vyskytující se verzi Androidu na chytrých mobilních zařízeních. Proto v manageru vybereme tuto platformu. Samozřejmě, lze vybrat i více platforem najednou, či některé teď nevybrané později doinstalovat. Obrázek 2.6: Android SDK Manager nastavení Jakmile zvolíte platformu, ve které budete vyvíjet vaše aplikace, je třeba ještě odsouhlasit licenční podmínky v následujícím dialogovém okně. Tuto záležitost nejrychleji provedete označením přepínače Accept All. Nyní je již vše připraveno na samotné stahování zvolených verzí a instalaci, kterou započnete stiskem tlačítka Install. Obrázek 2.7: Android SDK Manager odsouhlasení licenčních podmínek Vývojové nástroje a prostředí 29

2.2.2 Virtuální mobilní zařízení (AVD) Jak již bylo řečeno, Android SDK v sobě obsahuje také virtuální mobilní zařízení, které při vývoji a ladění aplikací budeme využívat. Jedná se o perfektní nástroj pro testování a ladění aplikací, zejména pokud není k dispozici skutečné zařízení. Emulátor je implementace virtuálního stroje Dalvik, vytvářející z něj platnou platformu pro provozování Android aplikací jako pro jakékoliv jiné fyzické zařízení s OS Android. Vzhledem k tomu, že je oddělen od konkrétního hardware, je ideální jej využívat jako výchozí pro testování aplikací. Vývojář má k dispozici řadu alternativních uživatelských rozhraní pro reprezentaci různých konfigurací hardwaru, každou s různou velikostí obrazovky, rozlišením, orientací a hardwarových funkcí k simulaci různých typů mobilních zařízení. Plné připojení k síti je k dispozici spolu s možností vyladit rychlost připojení k internetu a latenci při ladění aplikací. Můžete také simulovat odchozí a příchozí hovory, či SMS zprávy. Tvorba virtuálního mobilního zařízení Virtuální zařízení vytvoříme opět v SDK Manageru, a to konkrétně v sekci Virtual device. Obrázek 2.8: Android SDK Manager sekce virtuálních zařízení Tvorbu nového virtuálního zařízení započneme stiskem tlačítka New. V následujícím dialogovém okně (obrázek 2.9) je potřeba natavit tyto údaje: Name Do pole je třeba vložit název zařízení (např. muj_android). Doporučuji v tomto případě vynechat diakritiku. Target Zde vyberte požadovanou platformu Androidu. V našem případě došlo k instalaci pouze jedné platformy, a to 2.3.3, tudíž zvolíme tuto variantu. SD Card Toto pole reprezentuje velikost virtuální SD karty ve formě souboru. Skin Pole představuje rozlišení displeje virtuálního zařízení. Doporučuji nechat implicitní hodnotu, tedy WVGA800. 30 Programujeme pro Android

Hardware V této sekci lze zvolit další vlastnosti vytvářeného zařízení z hlediska použitého hardwaru. Obrázek 2.9: Android SDK Manager nastavení nového virtuálního zařízení Po vytvoření nového virtuálního Androidu se tento objeví v sekci virtuálních zařízení. Nyní jej můžeme spustit tlačítkem Start, resp. tlačítkem Launch v následujícím dialogovém okně. Obrázek 2.10: Android 2.3.3 Gingerbread 2.3 Vývojové prostředí Eclipse Pro programování aplikací pro Android postačí klasický textový editor, čí jakékoli prostředí umožňující programovat v Javě (Java IDE), jako například NetBeans, Oracle JDeveloper, BlueJ nebo Eclipse. Vývojové nástroje a prostředí 31

Zkušený vývojář však raději zvolí nástroj, který mu umožní vývoj aplikací co nejjednodušším a nejkomfortnějším způsobem. My zde zvolíme vývojové prostředí Eclipse. 2.3.1 Výhody Eclipse Eclipse je tedy primárně určen pro programování v jazyce Java. Jeho nespornou výhodou oproti ostatním vývojovým prostředím je snadná rozšiřitelnost o podporu dalších programovacích jazyků, nebo o vizuální nástroj pro tvorbu graficko-uživatelského rozhraní. Všechny tyto doplňky se do Eclipse dostanou pomocí instalace příslušných pluginů. Eclipse po instalaci obsahuje pouze standardní vývojové nástroje pro Javu (debugger, kompilátor aj.) a povýšení této platformy na vývojové prostředí pro Android provedeme instalací (nastavením) pluginu Android SDK. Tímto způsobem získáme šikovný emulátor, který umožní kdykoli snadno otestovat vyvíjenou aplikaci, bez nutnosti vlastnit fyzické zařízení s OS Android. 2.3.2 Instalace Eclipse Poslední verzi vývojového prostředí Eclipse 4.3 si můžete stáhnout na adrese: http://www.eclipse.org/downloads/ Obrázek 2.11: Webová stránka pro stažení vývojového prostředí Eclipse Webová stránka obsahuje instalační balíčky vývojového prostředí s podporou pro nejrůznější programovací jazyky. Pro naše účely vývoje aplikací pro Android budeme potřebovat první z uvedených, tedy Eclipse IDE for Java Developers. Pokud vývojář počítá s programováním aplikací pod OS Windows, může použít přímo odkaz na této stránce. Je-li rozhodnut věnovat se Androidu v jiném OS (Linux, Mac OS X), je nutné v záhlaví seznamu změnit operační systém na požadovaný typ. Následně se příslušné balíčky zobrazí. 32 Programujeme pro Android

Po stažení instalačního balíčku, jehož formát představuje ZIP archiv, je potřeba jej rozbalit na příslušné místo, např. do složky Program Files/Eclipse. Dalším krokem je spuštění samotné aplikace pomocí souboru eclipse.exe. Po spuštění budete vyzváni ke zvolení, popřípadě vytvoření pracovního prostoru (složky), kde budou ukládány všechny vámi vytvořené projekty. Výchozí cesta pro pracovní prostor představuje uživatelský adresář. Pokud máte potřebu změnit jeho umístění, stačí kliknout na tlačítko Browse a vyhledat jiný adresář. Při volbě pracovního adresáře doporučuji zaškrtnout políčko pro zapamatování vybraného adresáře pracovního prostoru. Tímto si zajistíte, že při tvorbě nového projektu budete vždy vědět, v jaké adresářové struktuře zdrojové kódy hledat. Obrázek 2.12: Volba pracovního adresáře vývojového prostředí Eclipse 2.3.3 Popis prostředí Eclipse Obrázek 2.13: Vývojové prostředí Eclipse Vývojové prostředí Eclipse je rozděleno interně do různých částí, nazývaných perspektivy. Jedná se o seznam komponent, jejichž rozvržení lze v prostředí uživatelsky upravovat, jakožto i jejich samotný výběr. Perspektiva by měla sdružovat takové komponenty, které se vztahují k jedné problematice. Vývojové nástroje a prostředí 33

Eclipse ihned po instalaci obsahuje několik perspektiv, jako např.: Java Perspective standardní perspektiva pro programování v jazyce Java. Debug Perspective perspektiva sloužící pro ladění programového kódu. DDMS (Dalvik Debug Monitor Server) perspektiva umožňující ladění programového kódu na virtuálním či fyzickém zařízení s OS Android. Nejvíce využívaná perspektiva bude zajisté perspektiva určená pro vývoj aplikací v jazyce Java. Ta se skládá z prohlížeče projektů standardně umístěného v pravé části prostředí, dále z editoru zdrojového kódu, a spodní část této perspektivy slouží např. k zobrazení chybových hlášek při ladění aplikací nebo výstupních zpráv (konzolová aplikace). 2.4 Android Development Tool (ADT) Důležitou součástí je správné a funkční nastavení vývojového prostředí, které usnadní samotný vývoj aplikací. Pro potřeby vývoje pro Android je nutné propojit prostředí Eclipse s Android SDK. Propojení je reprezentováno pluginem Android Development Tool (ADT), jenž rozšiřuje možnosti Eclipse a umožňuje tím rychlou tvorbu Android projektů. Pomocí ADT programátor obdrží výkonné integrované prostředí s editorem vizuálních aplikací, vlastními XML editory, ladícími panely a tvorbou APK balíčků pro distribuci aplikace. 2.4.1 Stažení a instalace ADT Stažení a instalaci ADT pluginu lze provést najednou pomocí těchto kroků (postup je platný pro prostředí Eclipse verze 3.7.1, v odlišných verzích mohou nastat menší odchylky): 1. Otevřete vývojové prostředí Eclipse. 2. V hlavním menu zvolte položku Help Install New Software, popřípadě u starších verzí se přístup k dialogovému oknu pro instalaci software nachází v menu Help Software updates Find and Install. 3. Po provedení se zobrazí dialogové okno pro stahování software (obrázek 2.14). Nyní je potřeba přidat nový zdroj pro stažení ADT pluginu. Přidání provedete stiskem tlačítka Add. Obrázek 2.14: Android Development Tool (ADT) dialogové okno pro instalaci softwaru 34 Programujeme pro Android

4. V dialogovém okně (obrázek 2.15) je potřeba vložit dva údaje. První představuje název stahované položky (tedy např. ADT plugin) a druhý údaj (Location) reprezentuje zdrojovou adresu pro stažení námi požadovaného pluginu. Zadejme tedy adresu https://dl-ssl.google.com/ android/eclipse/. Obrázek 2.15: Android Development Tool (ADT) nastavení zdroje pro stažení ADT 5. Po potvrzení vložených údajů tlačítkem OK se nakonfigurovaný zdroj zobrazí v roletovém menu (vedle tlačítka pro vložení nového zdroje). Volbou této položky dojde k zobrazení vývojových nástrojů (pod výběrem zdroje). Pro jejich instalaci zaškrtněte položku Developer Tools a stiskněte tlačítko Next (obrázek 2.16). Obrázek 2.16: Android Development Tool (ADT) volba pluginu a jeho vývojových nástrojů pro instalaci 6. Nyní se vám zobrazí dialogové okno s detailem instalace. Opět stiskněte tlačítko Next (obrázek 2.17). Vývojové nástroje a prostředí 35

Obrázek 2.17: Android Development Tool (ADT) detail instalace 7. Posledním krokem je odsouhlasení licenčních podmínek (obrázek 2.18). Jakmile odsouhlasení provedete výběrem patřičné volby, stiskněte tlačítko Finish. Nyní dojde k samotnému stažení všech zvolených vývojových nástrojů a jejich instalaci. Obrázek 2.18: Android Development Tool (ADT) odsouhlasení licenčních podmínek 36 Programujeme pro Android

2.4.2 Konfigurace ADT Po instalaci ADT pluginu budete vyzváni k restartování prostředí Eclipse. Po restartu se zobrazí dialogové okno pro konfiguraci Android SDK. Zvolte položku Use existing SDKs a pomocí tlačítka Browse nastavte umístění nainstalovaného Android SDK (obrázek 2.19). Prostředí Eclipse potřebuje znát tyto informace z důvodu přístupu ke všem nástrojům, které jsou součástí systému Android. Po výběru umístění Android SDK stiskněte tlačítko Finish. Obrázek 2.19: Android Development Tool (ADT) konfigurace SDK v Eclipse Pokud se dialogové okno pro nastavení SDK nezobrazí ihned po restartu Eclipse, můžete jej vyvolat pomocí menu Windows Preferences. V levé části okna označte sekci Android. Následně v pravé části vyberte pomocí tlačítka Browse umístění nainstalovaného Android SDK. Nyní jsou Android SDK, plugin ADT a vývojové prostředí Eclipse plně nastaveny a vše je připraveno pro vývoj samotných aplikací. Vývojové nástroje a prostředí 37

3. Základní kameny Android aplikace Předtím, než začneme vyvíjet Android aplikace, je důležité pochopit, jaké typy aplikací lze konstruovat, jakým způsobem jsou aplikace konstruovány a pochopit životního cyklus celé aplikace. V této kapitole budete seznámeni s volně vázanými komponentami, které tvoří Android aplikaci, a jejich vazbou pomocí Android Manifestu. 3.1 Typy aplikací Většina aplikací, které lze vytvořit v OS Android, bude spadat do jedné z následujících kategorií: Aplikace na popředí Jedná se o aplikace, které jsou užitečné pouze v případě, když běží v popředí a jejich činnost je efektivně pozastavena, pokud přejde na pozadí. Typickým příkladem jsou hry nebo aplikace pracující s mapami. Aplikace na pozadí Hlavní činnost těchto aplikací probíhá mimo aktuální běh zařízení. Pracují tzv. na pozadí. Příkladem mohou být aplikace sledující telefonní hovory nebo SMS. Aplikace s přerušovanou činností Tyto aplikace také většinou pracují na pozadí zařízení, avšak očekává se od nich komunikace s uživatelem formou upozorňování na určité události. Typickým příkladem může být přehrávač médií. Komplexní aplikaci je obtížné zařadit do jedné z výše uvedených kategorií, většinou obsahuje prvky ze všech tří typů. Při vytváření je třeba zvážit, jakým způsobem bude aplikace používána, a tomu přizpůsobit i design celé aplikace. 3.2 Anatomie Android aplikace Každá aplikace se skládá z volně vázaných komponent. K dispozici jsou následující prvky, které reprezentují stavební kameny pro Android aplikace. 3.2.1 Aktivity (Activity) V aplikaci reprezentují prezentační vrstvu. Jedná se o základní vizuální komponentu, která reprezentuje jednu obrazovku aplikace. Aktivita poskytuje dialogové okno, prostřednictvím kterého mohou uživatelé komunikovat. Okno typicky vyplňuje celou obrazovku, nebo představuje plovoucí dialog. Aplikace se obvykle skládá z několika aktivit, které jsou volně vázány mezi sebou. Typicky je v aplikaci jedna aktivita určená jako hlavní (provádí hlavní funkcionalitu), a je zobrazena uživateli ihned po spuštění aplikace. Každá aktivita může spouštět další aktivity s cílem provádět různé další funkce. Vždy, Základní kameny Android aplikace 39

když se spustí další aktivita, systém předchozí aktivitu pozastaví a její činnost zachová v zásobníku. Zásobník funguje systémem LIFO (last in, first out poslední dovnitř, první ven), tedy pokud uživatel akti vuje v aplikaci tlačítko Zpět, bude ze zásobníku vybrána poslední vložená aktivita a následně bude systémem její funkčnost obnovena. Detailnější popis životního cyklu aktivity je popsán v kapitole 3.4. 3.2.2 Služby (Services) Služby jsou součásti aplikace, které mohou provádět dlouhotrvající operace na pozadí, ale neposkytují uživateli graficko-uživatelské rozhraní. Funkce služby tedy není vázána na grafické rozhraní aplikace. Službu může spustit komponenta aplikace, a i když uživatel přejde do jiné aplikace, služba bude stále aktivní na pozadí. Navíc lze komponentu vázat ke službě, komunikovat s ní a provádět i meziprocesorovou komunikaci. Detailnější popis životního cyklu služby je popsán v kapitole 3.5. 3.2.3 Poskytovatelé obsahu (Content Providers) Poskytovatelé obsahu pracují s daty (ukládají, načítají) a zpřístupňují je pro všechny aplikace. Představují jediný způsob, jak sdílet data v rámci aplikace, jelikož neexistuje žádné běžné úložiště, do kterého by měli možnost přistupovat všechny balíčky systému Android. Android je dodáván s poskytovateli obsahu pro běžné typy dat, např. audio, video, obrázky, kontaktní informace atd. Některé z nich jsou uvedeny v balíčku Android.provider. Pokud má vývojář potřebu zveřejnit vlastní data a sdílet je, lze toho dosáhnout dvojím způsobem: 1. Vytvořením vlastního poskytovatele obsahu pomocí třídy ContentProvider. 2. Použitím stávajícího poskytovatele obsahu, který poskytuje stejný typ dat, za podmínky, že má vývojář oprávnění do něj zapisovat. 3.2.4 Záměry (Intents) Záměr obecně definujeme jako abstrakci operace, kterou je potřeba vykonat. Celý aplikační prostor se v podstatě skládá z komponent (aktivity) a ze zpráv mezi komponentami (záměry). Záměr se obecně skládá z činnosti, která se má vykonat, parametru, nad kterým má být tato činnost vykonána, a aplikace, která má tuto akci provést. Příklady činností definovaných jako záměr: Odeslání SMS zprávy. Zahájení určité činnosti. Zobrazení webové stránky. Příjem hovoru. Vytočení čísla pro hovor. Záměry lze rozdělit do dvou kategorií, a to implicitní a explicitní. Explicitní záměr Záměr obsahuje akci a objekt, nad kterým se má akce provést. Akci reprezentuje třída jazyka Java (např. android.intent.action.view). Výběrem aplikace, která akci provede, se v tomto případě nemusíme zabývat, a vše za nás řeší samotná platforma. Android interně udržuje informaci ve formě klíč-hodnota, kde klíč přestavuje akci, a hodnota aplikaci, která na danou akci reaguje. Implicitní záměr Tento záměr rovněž obsahuje akci a objekt, nad kterým se akce provede. Ovšem není zde explicitně definována aplikace, která akci provede. V tomto případě je při spuštění záměru na uživateli, kterou aplikaci zvolí. 40 Programujeme pro Android

3.2.5 Přijímače (Broadcast Receivers) Přijímač je komponenta sloužící k naslouchání oznámení z vnějšku, popřípadě zevnitř aplikace. Podle typu určení následuje reakce, například výpisem do stavového řádku, či spuštěním jiné komponenty. Aplikace mohou využívat systémové broadcasty, nebo si vývojář může napsat své vlastní. Přijímač nemá, obdobně jako služba, uživatelské rozhraní. Příkladem použití přijímače může být reakce na oznámení na příchozí SMS zprávu, nebo oznámení o nízkém stavu baterie, zachycení fotografie apod. 3.2.6 Oznámení (Notifications) V aplikaci mohou nastat určité situace, o jejichž existenci by měl být uživatel informován. K tomuto sdělení slouží oznámení. Na oznámení následně uživatel reagovat může, popřípadě nemusí. Příklady, kde je dobré provést oznámení pro uživatele: V případě, kdy aplikace spustila službu provádějící určité operace a nyní vyžaduje pozornost uživatele. V případě, kdy služba provádí operace, které vyžadují určitý čas (nahrávání souboru na server). V případě, kdy služba operaci již provedla. Existují tři techniky pro zobrazení oznámení: toast oznámení, oznámení ve stavovém řádku a oznámení formou dialogového okna. Níže si každé z nich popíšeme. Toast oznámení Tento typ oznámení se objeví na pracovní ploše okna. Zpráva oznámení vyplní pouze tolik prostoru, kolik zabere samotný text oznámení. Oznámení automaticky zmizí a nepřijímá žádné interakce od uživatele. Tento způsob zobrazení zprávy lze vygenerovat jak z aplikace běžící na popředí, tak pomocí služby běžící na pozadí. Zpráva bude vždy vypadat stejně. Oznámení je vhodné použít pro zobrazení krátké zprávy, jako např. Soubor uložen, nebo v okamžiku přijetí nového emailu, či SMS. Oznámení ve stavovém řádku Při tomto způsobu oznámení se do stavového řádku přidá ikona aplikace a rozšíří se seznam oznámení o naši zprávu. Oznámení může být identifikováno také pomocí zvukové či světelné signalizace (LED dioda) nebo pomocí vibrace zařízení. Tento druh oznámení je ideální, když aplikace pracuje na pozadí a služba musí informovat uživatele o vzniklé události. Potřebujeme-li upozornit uživatele na událost, která nastane, zatímco je aktivita stále v centru pozornosti, je tento způsob oznámení ideální. Oznámení formou dialogového okna Při tomto způsobu podání oznámení uživateli se zobrazí dialogové okno. Dialogové okno se pro zobrazení zprávy používá u činností, které přímo souvisejí s právě aktivní aplikací. Vhodné použití je nasnadě v případě zobrazení zprávy, která následně vyžaduje potvrzení od uživatele (např. použitím tlačítek OK, nebo Storno). 3.3 Životní cyklus aplikace Na rozdíl od většiny tradičních prostředí, Android aplikace nemá žádnou kontrolu nad svým vlastním životním cyklem. Proto musí být součástí každé aplikace naslouchání na změny stavu aplikace a jejich adekvátní řešení, přičemž zvláštní pozornost je třeba věnovat, a být připraven, na její předčasné ukončení. Základní kameny Android aplikace 41

Ve výchozím nastavení každá aplikace Android běží ve vlastním procesu, který je spuštěn samostatnou instancí virtuálního stroje Dalvik. Paměť a řízení procesů každé aplikace jsou řešeny výhradně za běhu. Jelikož je každá aplikace samostatný proces, úzce tedy souvisí s životním cyklem procesu. Proces aplikace je řízen systémem v závislosti na aktuálním stavu systémové paměti. V případě nedostatku paměti je nucen OS Android ukončit některé méně důležité procesy. Rozhodnutí o ukončení je spjato se stavem jednotlivých komponent procesu. 3.4 Životní cyklus aktivity Aplikace se standardně skládá z více aktivit, které jsou vázány mezi sebou. Jedna aktivita v aplikaci je obvykle určená jako hlavní, která je prezentována uživateli při spuštění aplikace. Každá aktivita může spouštět další aktivitu k provádění různých akcí. Vždy, když dojde ke spuštění nové aktivity, je předchozí aktivita pozastavena, ale systém ji zachovává v zásobníku. Zásobník disponuje řídícím mechanismem typu LIFO (last in, first out poslední dovnitř, první ven). Jedná se tedy o klasickou frontu. Pokud uživatel stiskne v rámci obrazovky tlačítko Zpět, dojde k vytažení a zobrazení předchozí aktivity ze zásobníku. OS Android vyznává filozofii, že u většiny mobilních zařízení jsou zdroje (paměť, baterie atd.) omezeny a stanovuje mechanismy pro zachování těchto zdrojů. Tyto mechanismy jsou patrné v životním cyklu aktivity, který definuje stavy nebo události, jimiž aktivita prochází od okamžiku, kdy byla vytvořena, až po její dokončení. Obrázek 3.1: Životní cyklus aktivity 42 Programujeme pro Android

Existují tři hlavní smyčky, které lze v životním cyklu aktivity sledovat. Úplný životní cyklus aktivity Kompletní průchod životním cyklem aktivity se odehrává mezi voláním metody oncreate (vytvoření aktivity) a metody ondestroy (zrušení aktivity). Aktivita při vytvoření nastaví svůj globální stav (pro případ zpětného obnovení) a před svým ukončením uvolní všechny prostředky, které využívala. Viditelný životní cyklus aktivity Životní cyklus aktivity ve stavu viditelnosti se odehrává mezi voláním metody onstart (spuštění aktivity) a metody onstop (zastavení aktivity). Během této doby uživatel vidí aktivitu na displeji zařízení. Mezi voláním metody onstart a onstop můžete udržovat prostředky, potřebné k zobrazení aktivity pro uživatele. Životní cyklus aktivity v popředí Aktivita se do popředí dostává voláním metody onresume (pokračování běhu aktivity) a skončí voláním metody onpause (pozastavení aktivity). Během této doby se aktivita zobrazí nad všemi ostatními aktivitami a je připravena komunikovat s uživatelem. Aktivita může pokračovat v běhu, či se pozastavit, v cyklu několikrát za sebou podle interakce s uživatelem. Každá aktivita reaguje na tyto metody: oncreate metoda je volána při vytvoření aktivity. onstart metoda je volána, pokud se uživatel rozhodne vrátit se do aktivity. onresume metoda je volána, když aktivita komunikuje s uživatelem. onpause metoda je volána, pokud dojde uživatelem k přesunu do jiné aktivity. onstop metoda je volána v době, kdy aktivita již není viditelná pro uživatele, a to z důvodů pokračování komunikace jiné aktivity, jež se s tou původní kryje. ondestroy metoda je volána, pokud dojde v rámci aplikace k ukončení aktivity (např. použitím metody finish()). onrestart metoda je volána, pokud je aktivita zastavena a je potřeba ji obnovit. Jelikož v OS Android není zaručen běh procesů aplikace, zvláště pak u aplikace, jež má aktivity na pozadí, a tudíž u ní může dojít k sestřelení jejího procesu, je potřeba si stav aktivity uložit, jelikož v paměti procesoru se po sestřelení aplikace její stav již nenachází. Pokud tak neučiníme a aplikaci opětovně spustíme, uživatelsky zadaná data nebudou zachována. Automaticky jsou ukládány pouze stavy uživatelského rozhraní, tedy např. pole ve formuláři, avšak informace z instančních proměnných se ztratí. Uložení instančních proměnných lze provést těmito způsoby: Pomocí přepsání události onsaveinstancestate(bundle state), ve které se stav aktivity ukládá do objektu Bundle a to ve formě jednoduchých datových typů, či serializovaných objektů. Obnovit stav aktivity lze přečtením objektu Bundle přímo v metodě OnCreate(Bundle state), jež slouží pro vytvoření aktivity. Tento způsob obnovení stavu platí pouze pro globální stavy aktivity. Pokud máme potřebu mít stav závislý na instanci aktivity, musíme stavy obnovit přepsáním metody onrestoreinstancestate(). 1. Použitím datového úložiště typu klíč-hodnota (preference). Data jsou zde ukládána ve formě XML souboru. 2. Použitím relační databáze SQLite, kdy instanční proměnné uložíme přímo do databáze. 3. Použitím externího souboru s vlastním systémem ukládání stavů. Základní kameny Android aplikace 43

3.5 Životní cyklus služby Stejně jako aktivity, mají svůj životní cyklus také služby. Je důležité věnovat velkou pozornost životnímu cyklu provozovaných služeb, jelikož služby běží na pozadí a takříkajíc bez vědomí uživatele. Životní cyklus služby a aktivity je velmi podobný. Obrázek 3.2: Životní cyklus služby Služby dělíme v zásadě na dva typy: Started a Bound. Služba typu Started Služba je typu Started, jestliže je volána prostřednictvím některé komponenty aplikace, např. pomocí aktivity. Volání představuje spuštění metody startservice(). Služba může po spuštění běžet na pozadí neomezeně dlouhou dobu a to i v případě, že dojde ke zrušení komponenty aplikace, která službu vyvolala. Tento typ služby obvykle provádí pouze jedinou operaci a nevrací žádný výsledek po jejím provedení. Ukončení provádění její činnosti může být avizováno některou z komponent, a to prostřednictvím volání metody stopservice(), anebo může svoji činnost ukončit sama služba pomocí volání metody stopself(). Služba typu Bound Služba typu Bound je spuštěna obdobným způsobem jako v předešlém případě, rozdíl je zde pouze ve volané metodě. Namísto startservice() se použije metoda bindservice(). Tento typ služby umožňuje klientům navázat persistentní spojení se službou a komunikovat s ní ve formě zasílání žádosti a přijímání výsledků její činnosti. Pokud má klient potřebu se odpojit, a dále již službu nevyužívat, stačí zavolat metodu unbindservice(). Služba je aktivní, pokud existuje jedno či více persistentních připojení. Jakmile se všichni klienti odpojí, služba je zrušena metodou ondestroy(). 44 Programujeme pro Android