VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika

Rozměr: px
Začít zobrazení ze stránky:

Download "VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika"

Transkript

1 VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika Aplikace pro OS Android bakalářská práce Autor: Petr Vybíral Vedoucí práce: Ing. Marek Musil Jihlava 2014

2

3 Abstrakt Práce se zabývá tvorbou jednoduché aplikace pro zařízení s operačním systémem Android. Demonstruje praktické užití programových nástrojů, využívaných při tvorbě mobilních aplikacích pod OS Android. Teoretická část nás seznamuje s vývojářským prostředím a základními prvky, které jsou nutné pro naprogramování této aplikace. Praktická část řeší vývoj a chování již naprogramované aplikace, včetně krátkých ukázek zdrojových kódů. Dále se zabývá problémy, které mohou nastat a jejich řešením. Výsledkem práce je aplikace umožňující výuku cizích jazyků. Klíčová slova Aktivita, Android, Eclipse, Fragment, Java, mobilní aplikace Abstract The work deals with creating a simple application for devices running on Android. It demonstrates the practical use of software tools used in creating mobile applications under Android OS. The theoretical part introduces to us the development environment and essential elements that are necessary for programming this application. The practical part deals with the development and behavior of the already programmed application, including short excerpts of source codes. It also deals with the problems that may occur and their solutions. The result is an application that allows for teaching foreign languages. Key words Activity, Android, Eclipse, Fragment, Java, mobile application

4 Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též AZ ). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl/a jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne... Podpis

5 Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce Ing. Marku Musilovi za poskytnutí tématu a možnost vytvářet ho pod jeho vedením.

6 Obsah 1 Úvod a motivace Analýza problému O systému Android Historie Architektura Verze systému Vývojové prostředí Nástroje nutné pro vývoj Struktura projektu Základní prvky využité v aplikaci Activity (aktivita) Fragment Intent (úmysl) Obsluha změn orientace displeje Využití onretainnonconfigurationinstance Využití onsaveinstancestate Využití fragmentů Postup při vývoji aplikace Rozbor aplikace Návrh databáze Popis uživatelského rozhraní Tvorba základních prvků aplikace Adaptér a ListView Vlastní dialog Sdílení dat mezi aplikacemi Načítání dat ze souboru Navigační menu Práce s databází Třída DatabaseOperations Třída DatabaseHelper Třída Database Vyhledávání pomocí Action Baru Rozpoznávání hlasu Nastavení aplikace Závěr... 44

7 Seznam použité literatury Seznam obrázků Seznam použitých zkratek Přílohy Obsah přiloženého CD Uživatelský manuál... 49

8 1 Úvod a motivace Android je open source platforma založená na jádru Linux. V současné době se jedná o nejrozšířenější platformu po celém světě s tržním podílem kolem 80% a počtem denních aktivací přesahující 1,5 milionu zařízení. Android již není pouze mobilní platforma, jak dříve bývala. Nyní se již objevuje v tabletech, noteboocích, televizorech, hodinkách nebo dokonce brýlích. Hlavním důvodem, proč jsem si zvolil jako téma bakalářské práce vývoj aplikace pro tuto platformu, je především vidina velkého potenciálu i v budoucnosti. Cílem práce je ukázka základních nástrojů využívaných při tvorbě aplikací běžících pod OS Android. Během intenzivního hledání se mi nepodařilo nalézt vhodnou publikaci popisující užití základních nástrojů takovým způsobem, jaký by mi vyhovoval. Na internetu je sice nepřeberné množství zdrojových kódů, ale žádný nesplňoval mé požadavky. Myslím si, že výhodnější pro začínající vývojáře je mít přístup k podobné aplikaci a vyzkoušet si v praxi, že určitá funkčnost je proveditelná. 8

9 2 Analýza problému Při hledání možných způsobů řešení mě napadly pouze 2 odlišné postupy. V prvním případě bych vytvořil aplikaci, která by neměla žádné praktické využití. Aplikace by byla rozdělena na několik částí a v každé části bych se zabýval určitou problematikou vývoje Android aplikace. Jako příklad uvádím vytvoření vlastního výpisu, ukázku práce s databází a podobně. Druhý možný způsob by byl naprogramování plnohodnotné aplikace, kde bych dané problémy řešil v praxi. Výsledkem by byl program zahrnující veškeré využívané komponenty. Po dlouhém rozhodování jsem zvolil druhý způsob řešení. Jelikož s tímto systémem nemám žádné vývojářské zkušenosti, beru to jako velkou výzvu. Rozhodl jsem se vytvořit aplikaci sloužící k prohlížení a zkoušení cizojazyčných slovíček. Uživatel si bude v aplikaci vytvářet lekce, do kterých si následně může nadefinovat slovíčka. Pomocí vysouvacího menu si zvolí mezi režimem prohlížení a zkoušení slovíček. Při zkoušení si bude moci zvolit směr testování. Aplikace bude navrhnuta pro verzi systému a výše. Popis návrhu aplikace a plánovaný vývoj aplikace je v následujících kapitolách. 9

10 3 O systému Android 3.1 Historie Historie operačního systému Android začala již v roce 2003, kdy stejnojmennou společnost založili Andy Rubin, Rich Miner, Nick Sears a Chris White. Jejich cílem bylo dle jejich slov, začít vytvářet chytřejší mobilní přístroje, které budou brát v úvahu nároky uživatelů a jejich polohu. Činnost této společnosti z počátku nevzbuzovala příliš pozornosti, pro svět byli jen jedním z dalších vývojářů softwaru pro mobilní telefony. [4] Zlom nastal až v roce 2005, kdy společnost Android Inc. byla koupena gigantem Google. Klíčoví lidé na svých postech zůstali i po akvizici (Andy Rubin je nyní vice prezidentem mobilní divize Googlu) a pod novým majitelem dostal vývoj rychlejší tempo. Objevily se první spekulace o tom, že Google plánuje představit svůj vlastní mobilní telefon (přezdívaný gphone), což bylo umocněno tím, že získali mnoho patentů v oblasti mobilní komunikace. [4] V roce 2008 bylo oficiálně představeno první mobilní zařízení s tímto operačním systémem. Jednalo se o T-Mobile G1 (označovaný také jako HTC Dream) s verzí operačního systému Android 1.6 Donut. V roce 2010 společnost Google vydala první smartphone řady Nexus. Řada Nexus se vyznačuje hlavně čistým operačním systémem. V současné době se považuje tato řada za referenční zařízení pro tento operační systém. Nexus zařízení nejsou vyráběny přímo spoležností Google, ale vznikají ve spolupráci s jinými výrobci mobilních telefonů. 10

11 3.2 Architektura Architektura Android je rozdělena do pěti sekcí a čtyř hlavních vrstev. Obrázek 1: Architektura systému Android [5] Aplikace Do vrstvy patří veškeré aplikace z Obchodu Play a některé předinstalované aplikace (SMS aplikace, prohlížeč, kontakty a podobně). Aplikační Framework Třídy zprostředkovávající vývojáři přístup k velkému počtu služeb. Služby umožňují vývojáři přístup například k poloze zařízení, gyroskopu, výpisu hovorů a zpráv. Knihovny Umožňují zařízením obsluhovat různé typy dat, jako je SQLite, SSL, WebKit a podobně. Tyto knihovny jsou napsány v programovacím jazyce C, případně C++. Android runtime Součástí je virtuální stroj Dalvik. Dalvik se stará o běh samotných aplikací. Oproti Javě je Dalvik upravený a optimalizovaný přímo pro běh na mobilních zařízeních. Android runtime dále obsahuje knihovny tříd, které umožňují programování v Javě. V nejnovější verzi systému se ve vývojářských možnostech zařízení začíná objevovat možnost sloužící k přepnutí na virtuální stroj ART, jenž by měl Dalvik v budoucnu nahradit. ART je stále ve vývoji, tudíž není doporučován ke každodennímu používání. 11

12 Linux Kernel Nejnižší vrstva tvořící abstraktní vrstvu mezi použítým hardwarem a softwarem ve vyšších vrstvách. 3.3 Verze systému Verze systémů Android jsou především známé podle jejich jmén. Jména jsou řazena v abecedním pořadí a pokaždé mají název podle nějaké laskominy. Výpis všech doposud vydaných verzí, který je umístěn níže také obsahuje u vybraných verzí nejzásadnější novinky. - Android 1.5 Cupcake (API level 3) - Android 1.6 Donut (API level 4) - Android Eclair (API level 4 7) o Instalace aplikací na paměťovou kartu - Android Froyo (API level 8) - Android Gingerbread (API level 9 10) - Android Honeycomb (API level 11 13) o První možnost využití fragmentů o Verze určená pouze pro tablety - Android Ice Cream Sandwitch (API level 14 15) o Spojení verze pro tablety a pro mobilní telefony o Android Beam pro sdílení pomocí NFC (Near Field Communication) - Android Jelly Bean (API level 16 18) o Rozpoznávání hlasu offline o Podpora více uživatelských účtů na jednom zařízení - Android KitKat (API level 19) 12

13 4 Vývojové prostředí Než je možné se pustit do programování své první aplikace, je zapotřebí stáhnout a nainstalovat několik programů. Aktuálně se pro vývoj nejčastěji využívá open source vývojová platforma Eclipse společně s ADT (Android Developer Tools) pluginem. 4.1 Nástroje nutné pro vývoj K vývoji je zapotřebí balík nástrojů JDK (Java SE Development Kit). JDK v sobě obsahuje JRE (Java Runtime Enviroment), vývojářské nástroje, monitorování a ladění java aplikací. V JRE jsou umístěny prvky potřebné pro chod Java aplikací. Dalším krokem je třeba stáhnout a rozbalit ADT Bundle. Jedná se o balík obsahující zbytek potřebných nástrojů, který zahrnuje vývojovou platformu Eclipse, ADT plugin a Android SDK (Software Development Kit). ADT plugin obsahuje nástroje pro vývoj a ladění Android aplikací. Android SDK zahrnuje potřebné knihovny, debugger, emulátor, ukázkové zdrojové kódy a podobně. SDK Manager slouží například k aktualizaci a stahování systémových obrazů všech vydaných verzí systému. Pomocí těchto obrazů je možno v emulátoru vytvořit vlastní emulované zařízení, na kterém je následně možné testovat vyvíjené aplikace. SDK Manager také umožňuje stahování ukázkových zdrojových kódů, případně knihovnen zajišťujících zpětnou kompatibilitu. Alternativou k Eclipse bude v budoucnosti prostřední Android Studio, které je momentálně ve stavu předběžného přístupu (early access preview). S tímto prostředním nemám žádné zkušenosti. 13

14 4.2 Struktura projektu Při generování nového projektu se vytvoří několik adresářů a souborů (viz Obrázek 2). Obrázek 2: Struktura projektu \src Obsahuje zdrojové kódy vytvořené uživatelem. Je vhodné třídit vytvořené třídy do balíčků podle jejich funkčnosti. \gen Obsahuje automaticky generované třídy pomocí pluginu ADT. Jako příklad uvedu třídu R, která obsahuje veškeré konstanty zajišťující snadný přístup ke zdrojům umístěným v adresáři res (ikony, obrázky, texty, layouty). \bin Kompiler využívá tento adresář jako odkladiště souborů, které mají být následně zabaleny do apk balíčku. \res V adresáři jsou umístěny ikony, obrázky, texty a layouty. \drawable Zde jsou umístěny veškeré obrázky, které aplikace využívá. \layout Obsahuje veškeré XML (extensible Markup Language) soubory, které určují vzhled aplikace. \values Obsahuje soubory typu XML uchovávající veškerá data ve formátu klíč - hodnota. Klíč je využíván ve zdrojovém kódu. Pomocí klíče je zobrazena hodnota. Mezi nejpoužívanější soubory v tomto adresáři patří strings.xml, který umožňuje lokalizovat aplikaci ve více jazycích. Vytvořím-li adresář \values-cs, do kterého 14

15 umístím soubor strings.xml, aplikace začne využívat tento soubor v případě, že uživatel má ve svém zařízení nastaven český jazyk. AndroidManifest.xml Soubor popisuje veškeré vlastnosti dané aplikace. Definuje aktivity, které jsou součástí aplikace. Pokud vývojář aplikace zapomene nově vytvořenou aktivitu zapsat do tohoto souboru, aplikace při pokusu o spuštění této aktivity spadne. Dále je zde umístěn seznam oprávnění, která aplikace vyžaduje (úplný přístup k síti, čtení textových zpráv, přímé volání na telefonní čísla a podobně), intent filtry, případně pro jakou verzi systému je daná aplikace určena. 15

16 5 Základní prvky využité v aplikaci V kapitole jsou popsány nejčastěji využívané prvky. Součástí popisu je také krátká programová ukázka popisující daný prvek. 5.1 Activity (aktivita) Obsahuje grafické rozhraní sloužící k interakci mezi aplikací a uživatelem. Většina aplikací obsahuje více než jednu aktivitu. Tyto aktivity jsou deklarovány ve vlastní třídě. Aktivita, kterou uživatel vidí po spuštění aplikace, se zpravidla nazývá MainActivity. Každá aktivita může následně spustit další aktivitu (po stisknutí tlačítka a podobně). Spuštění aktivity se provádí metodou startactivity(). Každá aktivita musí obsahovat metodu oncreate(). V této metodě jsou volány ty metody, které se mají provést při spouštění aktivity. Volá se zde i nejdůležitější metoda setcontentview() sloužící k načtení vzhledu z res/layout/. Jednoduchá aktivita může vypadat například takto: public class A extends Activity protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // načtení layoutu z res\layout\ setcontentview(r.layout.activity_main);... Získání výsledku z aktivity Z aktivity lze také získat výsledek. Ke spuštění aktivity, ze které požadujeme výsledek, slouží metoda startactivityforresult(). K nastavení výsledku se využívá metody setresult(), pro následné zpracování onactivityresult(). Způsob získání výsledku znázorňuje Obrázek 3. 16

17 Příklad Obrázek 3: Princip získání výsledku z aktivity Uvažujme, že máme aktivitu A sloužící pro výpis prvků a aktivitu B zajišťující vytváření těchto prvků prvků. Abychom docílili aktualizace výpisu prvků v aktivitě A, je zapotřebí zjistit, že byl vytvořen nový záznam v aktivitě B. Ke spuštění aktivity B využijeme metody startactivityforresult(). Tato metoda oproti standardní startactivity() v sobě obsahuje datový typ int, sloužící jako číslo požadavku (request code). Číslo požadavku se využíje po návratu z aktivity B do A ke zjištění, jaká aktivita daný výsledek vrátila. Pomocí onactivityresult() provedeme přijmutí dat. Metoda přijímá číslo požadavku, výslednou hodnotu a balík dat (Bundle). Pro nastavení výsledku využijeme již zmíněný setresult(). Výsledný kód by mohl vypadat takto: // aktivita A public class A extends Activity { private static final int code = 1; // kód, pod kterým budu přijímat data... // spuštění aktivity Intent intent = new Intent(this, B.class); startactivityforresult(intent, code);... // přijmutí výsledku z aktivit protected void onactivityresult(int request_code, int result_code,intent data) { if(code == requestcode) { if(result_ok == result_code) { String jmeno = data.getstringextra("klic1"); 17

18 // aktivita B public class B extends Activity {... String jmeno = Karel; Intent intent = new Intent(); intent.putextra("klic1", jmeno);... setresult(result_ok, intent); finish(); // ukončení prováděné aktivity Životní cyklus Každá aktivita má svůj životní cyklus (viz Obrázek 4), který má předem dané pořadí. Až na metodu oncreate(), není nutné (pokud k tomu vývojář nemá důvod) ostatní metody implementovat. Obrázek 4: Životní cyklus aktivity [1] Z obrázku se dá vyčíst několik důležitých poznatků, kterých si vývojář musí být vědom. V případě, že je aktivita pozastavena nebo úplně zastavena, systém může tuto aktivitu při nedostatku volné pamětu ukončit. Je tedy vhodné data, o které nechceme přijít uložit. 18

19 Během mého testování jsem si všiml jedné zajímavosti, o které jsem doposud nevěděl. Při návratu pomocí softwarového tlačítka zpět z aktivity do předchozí aktivity je volána metoda onrestart(). Při kliknutí na ikonu aplikace v levém horním rohu je volána metoda oncreate(). 5.2 Fragment Fragment v Androidu doslova značí úlomek. Poprvé se objevil od verze Android 3.0 Honeycomb, kdy spoležnost Google začala reagovat na stále zvyšující se poptávku po tabletech. Hlavním cílem bylo umožnit vývojářům, co nejsnázeji vytvářet aplikace, které se dokáží přizpůsobit malým i velkým displejům. Jako výsledek této snahy vznikl fragment. Hlavní výhoda spočívá v možné změně fragmentů za chodu aplikace. Mezi nejčastější možnost využití fragmentů patří tvorba tabletového rozhraní, které se docílí kombinací několika fragmentů v jedné aktivitě. Životní cyklus Fragment musí být vždy začleněn do aktivity. Jeho životní cyklus je tím pádem ovlivňován danou aktivitou. Například, pokud je aktivita pozastavena, veškeré fragmenty náležící dané aktivitě jsou také pozastaveny. Pokud je aktivita zničena, fragmenty jsou také zničeny. Dokud aktivita běží je možno manipulovat s každým fragmentem nezávisle. Fragmenty nemusí být pokaždé součastí layoutu. Dají se využít bez jejich vlastního UI (jako neviditelný pracovník pro aktivitu). [3] Životní cyklus fragmentu (viz Obrázek 5) má některé metody shodné jako životní cyklus aktivity. Hlavním rozdílem je fakt, že vzhled fragmentu se načítá v metodě oncreateview(). 19

20 Obrázek 5: Životní cyklus fragmentu (pokud je aktivita spuštěna) [3] 20

21 5.3 Intent (úmysl) Intenty značí doslova úmysly. Sloužící k předávání zpráv mezi komponentami (aktivity, služby) stejné aplikace, případně z cizích aplikací. Zpravidla bývají popsány několika atributy, kterými jsou: akce (popisuje akci, která se má vykonat), data (popisuje cestu, k datům nad kterými se má vykonat daná akce), kategorie (dodatečné informace o intentu), typ dat (MIME typ obsahu), název komponenty (konkrétní komponenta, která specifikuje danou aktivitu v explicitních indentech) a další data (data, která se přidávají intentu navíc ve formě Bundle). [2] Druhy intentů Explicitní intent nejčastěji slouží ke spouštění aktivit a komponent, které jsou součástí naší aplikace. Explicitní intenty jsou pokaždé doručeny cíli. Implicitní intent je využíván ke komunikaci mezi naší a cizí aplikací. Implicitní intent přímo nespecifikuje, jakou aplikací se má akce provést. Místo toho musí obsahovat dostatečné množství informací, podle kterých systém zobrazí seznam aplikací, které jsou schopné daný intent zpracovat. Na rozdíl od explicitního intentu, implicitní nemusí být doručen cíli v případě, že žádná aplikace nesplňuje požadavky daného intentu. Intent filtr představuje jednoduchý způsob, jakým aplikace dává najevo systému svojí schopnost implicitní intent splnit. Intent filtr se musí definovat v AndroidManifestu, kde se musí přiřadit aktivitě nebo službě. Důležité je správně nadefinovat typ dat, která bude schopen zpracovat. Nakonec je třeba ve zdrojovém kódu aktivity obsahující filtr vytvořit funkci pro následné zpracování. Špatně naprogramovaný intent filtr se může považovat za bezpečnostní riziko. Útočník může aplikaci poslat data, která mají vliv na stabilitu aplikace nebo jí mohou dokonce ublížit. 21

22 5.4 Obsluha změn orientace displeje Operační systém Android standartně zvládá rotaci displeje. Během rotace se celá aktivita vytváří znovu (opětovně se volá oncreate(), viz Obrázek 4). Z tohoto důvodu aktivita může přijít o některá data (zobrazené prvky v komponentě ListView, označené komponenty Checkbox, zvolenou pozici v navigačním menu a podobně) Využití onretainnonconfigurationinstance Reference [8] uvádí několik různých způsobů obsluhy rotace displeje. Během testování těchto způsobu jsem byl párkrát nemile překvapen. Vývojové prostředí Eclipse začalo zobrazovat u některých metod upozornění, že daný způsob je zastaralý a měl bych začít využít novější způsob. Jako příklad zastaralého způsobu bych uvedl využití metody onretainnonconfigurationinstance() sloužící k uchování objektu během rotace displeje. Pro následné přijmutí objektu stačí v oncreate() zavolat metodu getlastnonconfigurationinstance() Využití onsaveinstancestate Z uváděných způsobů v referenci [8] doporučuji využití metody onsaveinstancestate(), která slouží k uložení stavu. Metoda se využívá nejen při rotaci displeje, ale také v případě ukončení aktivity samotným systémem (například při nedostatku volné paměti). Data se v ní ukládají do balíku (Bundle). Následně se dají znovu načíst v oncreate(). Také doporučuji vytvoření rozdílných layoutů pro orientaci na výšku a na šířku. Layout určený pro orientaci na výšku stačí umístit do složky res/layout/. Layout určený pro orientaci na šířku umístíme pod stejným názvem do složky res/layout-land/. Předání proměnné pomocí onsaveinstancestate() demonstruje následující kód. 22

23 // ukázka předání proměnné hodnota pomocí metody onsaveinstancestate() public class MainActivity extends Activity { private int hodnota = protected void oncreate(bundle savedinstancestate) { // načtení hodnoty z savedinstancestate pomocí klíče "pokus" if(savedinstancestate!= null) { hodnota = public void onsaveinstancestate(bundle savedinstancestate) { // uložení hodnoty pod klíčem "pokus" savedinstancestate.putint("pokus", hodnota); Využití fragmentů Během rotace displeje dochází k vytvoření nového fragmentu, jenž je následně přidán do správce fragmentů (FragmentManager). Správce fragmentů společně s možností přidání tagu nově vytvářenému fragmentu je možno využít při jeho následném znovupoužití. Po rotaci displeje stačí provést kontrolu, zdali je fragment umístěn ve správci fragmentů nebo doposud není. Pokud není, je třeba ho nově vytvořit, jinak se nemusí provádět nic. Následující ukázka demonstruje jednoduchou kontrolu, zdali je již fragment umístěn ve správci fragmentů či doposud není. public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { // najití fragmentu podle tagu "tag1", zdali již neexistuje Fragment fragment = (TestingTextFragment) getfragmentmanager().findfragmentbytag("tag1"); if (fragment == null) { fragment = new TestingTextFragment(); getfragmentmanager().begintransaction().add(r.id.a_testin g_text_container, fragment, "tag1").commit(); 23

24 6 Postup při vývoji aplikace Prvním krokem bylo navrhnutí struktury databáze. Po vytvoření struktury databáze bylo zapotřebí ještě před samotným programováním navrhnout grafický vzhled aplikace. V první fázi programování jsem si vytvořil několik aplikací. V každé jsem testoval jinou funkcionalitu (práci s databází, zobrazování prvků, předávání dat fragmentům a podobně). Po otestování jednotlivých funkcionalit jsem je začal začleňovat do jedné aplikace. Vzhledem k tomu, že aplikace má sloužit k prohlížení a zkoušení slovíček bylo zapotřebí tyto volby od sebe způsobem odlišit. K tomuto účelu se nabízelo vytvoření navigačního menu. Pro usnadnění testování databáze jsem vytvořil aktivitu zprostředkovávající zobrazení slovíček. Této aktivitě jsem po otestování správné funkčnosti databáze upravil vzhled a začal ji využívat přímo pro režim prohlížení slovíček. Doteď bylo možné vytvářet záznamy pouze programově. Pro vytváření záznamů jsem vytvořil novou aktivitu, která současně vypisovala veškerá slovíčka zvolené lekce. V pozdější fázi vývoje jsem aktivitu zprostředkovávající vytváření záznamů nahradil dialogy. Na domovské obrazovce je možno vytvářet, upravovat a odstraňovat lekce, zatímco se slovíčky se pracuje v prohlížení slovíček. Nyní přišla řada na zkoušení slovíček. Vytvořil jsem dva rozdílné způsoby zkoušení. Během prvního způsobu musí uživatel pokaždé napsat svou odpověď. Pro snadnější zadávání jsem implementoval funkci pro rozpoznávání hlasu a do nastavení aplikace přidal možnosti sloužící k úpravě způsobu kontroly odpovědí. U druhého způsobu zkoušení uživatel pouze zadává, zdali zná nebo nezná správný překlad. Po vytvoření základní funkčnosti jsem se začal zabývat různými vylepšeními aplikace, mezi které patří vyhledávání slovíček, sdílení a následné načítání lekcí. Během prvního spuštění aplikace je do databáze vloženo několik testovacích záznamů pro snadnější testování aplikace. 24

25 7 Rozbor aplikace V aplikaci je jako primární datový zdroj využívána databáze. Načtená data se předávají pomocí balíků aktivitám. Aktivity přijaté data předají svým fragmentům. 7.1 Návrh databáze Po vyzkoušení několika návrhů tabulek jsem se uchýlil k databázi obsahující 3 tabulky. Zvolil jsem možnost, kdy lekce může obsahovat několik primárních slov. Beru také v potaz možnost výskytu více lekcí se stejným názvem. Uživatel si je může odlišit podle různého popisu. Primární slovo může mít současně několik překladů. Z důvodu usnadnění přidávání slovíček jsem nevzal v potaz stav, kdy by překlad měl stejný význam, jako několik primárních slov. ERA model navržené databáze zobrazuje Obrázek 6. Obrázek 6: ERA model databáze 25

26 7.2 Popis uživatelského rozhraní Domovská obrazovka Uživatel má možnost si volit pomocí navigačního menu mezi režimem pro prohlížení slovíček a dvěma způsoby zkoušení. Při zvolení režimu prohlížení je zobrazen seznam vytvořených lekcí. Po kliknutí na lekci z tohoto seznamu jsou zobrazena slovíčka zvolené lekce. V případě volby jednoho z režimů zkoušení je také zobrazen výpis lekcí, jen s tím rozdílem, že si uživatel může navolit několik lekcí, na které chce být zkoušen. Při dlouhém stisku na lekci je zobrazeno kontextové menu umožňující upravit, odstranit nebo sdílet zvolenou lekci. Pro snadnější orientaci mezi lekcemi, které již mají vytvořené záznamy, a které doposud žádné nemají je za názvem lekce zobrazen počet slovíček dané lekce. Domovská obrazovka také obsahuje Action Bar zobrazující tlačítka pro tvorbu nové lekce a nastavení aplikace. Prohlížení slovíček V režimu prohlížení je zobrazen seznam všech slovíček, která obsahuje uživatelem zvolená lekce. Uživatel má možnost slovíčka vyhledávat, vytvářet, upravovat, odstraňovat a řadit. Obrázek 7: Dialog sloužící k vytváření nových slovíček 26

27 Vyhledávání probíhá dynamicky podle uživatelem zadaného textu. Hledaný text je porovnáván s primárním slovem a překlady. Pro vyhledání slovíček není třeba zadávat celý jeho text, ale stačí pouze jeho část. Při dlouhém stisknutí na libovolné slovíčko se zobrazí kontextový Action Bar sloužící pro případnou editaci a odstranění záznamů. Tento Action Bar je možné aktivovat i během hledání. Obrázek 8: Prohlížení slovíček Zkoušení slovíček formou vyplňování Uživatel je zkoušen na slovíčka ze zvolených lekcí. Následné vyhodnocení probíhá formou správně/špatně a vyhodnocené slovíčko je zobrazeno ve výpisu. Průběh zkoušení zobrazuje Obrázek 9. 27

28 Obrázek 9: Diagram zobrazující průběh zkoušení Uživateli je zobrazeno slovíčko, na které musí napsat překlad do komponenty EditText. Pro zadávání správné odpovědi je možno využít funkci rozpoznávání řeči v případě podpory ze strany zařízení. Pokud zařízení tuto funkci nepodporuje, tlačítko není vůbec zobrazeno. Pro potvrzení odpovědi je třeba kliknout na odpovídající tlačíko. Případně je umožněno potvrzení pomocí tlačítka na klávesnici. Zkoušená slovíčka jsou vybírána v náhodném pořadí, přičemž uživatel má možnost navolit směr zkoušení (primární slovo -> překlad nebo obráceně). V případě volby zkoušení ve směru primární slovo -> překlad je třeba zadat pouze jeden překlad. Po celou dobu zkoušení je zobrazován počet správných a chybných odpovědí, jak za současné zkoušení, tak celkový počet za všechna zkoušení v daném směru. 28

29 Algoritmus náhodného výběru prvku Obrázek 10: Zkoušení slovíček formou vyplňování Pro náhodný výběr prvku ze seznamu jsem si vytvořil statickou metodu přijímající seznam slovíček, ze kterých je třeba vybrat slovíčko. Po výběru je slovíčko odstraněno ze seznamu a vráceno pomocí return. V případě přijetí seznamu neobsahujícího žádné slovíčko, metoda vrací null. Pro náhodný výběr je využita třída Random, která umožňuje vybrat náhodný prvek v rozsahu 0 až X, kde jako X volím celkový počet přijatých slovíček. Výsledný kód vypadá takto: public static PrimaryWord getrandomprimaryword(arraylist<primaryword> primarywords) { Random myrandomizer = new Random(); PrimaryWord pw = null; int size = primarywords.size(); int randomindex = -1; // v listu je alespoň jeden záznam if (size >= 1) { // vybrání náhodného indexu, pokud je v listu více, než jeden záznam if (size > 1) { randomindex = myrandomizer.nextint(size - 1); else randomindex = 0; pw = primarywords.get(randomindex); primarywords.remove(randomindex); return pw; return null; 29

30 Zkoušení slovíček formou volby vím/nevím Zkoušení probíhá stejným způsobem, jako testování formou vyplňování. Liší se pouze v tom, že uživatel nemusí zadávat správný překlad, ale pouze zvolí, zdali ho zná nebo nezná. Pokud si není jistý, zdali zná správnou odpověď, má možnost si zobrazit správnou odpověď odpovídajícím tlačítkem. Obrázek 11: Zkoušení slovíček formou volby vím/nevím 30

31 8 Tvorba základních prvků aplikace 8.1 Adaptér a ListView Velké množství aplikací obsahuje různý výpis prvků, napříč kterým je možné scrollovat. Při stisknutí na položku z tohoto seznamu bývá zobrazen podrobnější popis zvoleného prvku nebo se provádí jiná akce. Pro výpis se často využívají komponenty ListView, GridView nebo Spinner. Tyto komponenty mají nadefinovanou základní sadu adaptérů. Pokud si chce vývojář vytvořit vlastní vzhled řádků, musí si také nadefinovat vlastní adaptér. Adaptér slouží ke správě datového modelu (ArrayList, Cursor, ) a přizpůsobuje jej do jednotlivých řádků dané komponenty. Vzhled řádku si adaptér načítá z layoutu, který si vývojář vytvořil ve složce \res\layout\ pro tento účel. Daný layout reprezentuje vzhled jednoho řádku. Vlastní adaptér může dědit vlastnosti od jednoho ze základních adaptérů (Base, Array, Spinner, Cursor, ). Každý z těchto adaptérů má svá specifika. CursorAdapter se často využivá při načítání dat z databáze (databáze vrací Cursor objekt). Vrácený Cursor musí obsahovat sloupec s názvem _id. ArrayAdapter pro změnu vypisuje pouze textovou reprezentaci objektu tostring(). Adaptér sloužící k zobrazení většího množství prvků má využívat recyklaci (znovupoužití) již načtených řádků (takzvaný view holder design pattern). Recyklace má za následek snížení potřeby volání metody findviewbyid(). Tato metoda je poměrně náročná a může mít za následek snížení rychlosti načítání. Zpomalení by se dalo pozorovat například během rychlého procházení většího počtu záznamů. Pokud se provádí změny v datovém modelu (například úprava záznamu), je zapotřebí informovat adaptér pomocí metody notifydatasetchanged(). Níže je ukázka tvorby jednoduchého adaptéru využívajícího view holder design pattern. 31

32 public class TestAdapter extends BaseAdapter { private Context context; // kontext private List<Lesson> items; // záznamy // konstruktor načítající kontext a záznamy, které budou zobrazeny public TestAdapter(Context context, List<Lesson> items) { this.context = context; this.items = items; // třída uchovávající reference na prvky daného řádku private static class ViewHolder { TextView txtlessonname; // vrácení pohledu public View getview(int position, View convertview, ViewGroup parent){ ViewHolder holder = null; LayoutInflater minflater = (LayoutInflater) context.getsystemservice(activity.layout_inflater_service); if (convertview == null) { // vytvoření řádku z xml souboru (row_lesson) a najití ID daných // prvků v něm convertview = minflater.inflate(r.layout.row_lesson, null); holder = new ViewHolder(); holder.txtlessonname = (TextView) convertview.findviewbyid(r.id.lesson_name); convertview.settag(holder); else { // řádek již byl vytvořený dříve, takže ho stačí pouze načíst holder = (ViewHolder) convertview.gettag(); // nastavení/změna textu v řádku Lesson lesson = (Lesson) getitem(position); holder.txtlessonname.settext(lesson.getname()); return convertview; // vrácení prvku podle public Object getitem(int position) { return items.get(position); 32

33 8.2 Vlastní dialog V aplikaci jsem využil několik vlastních dialogů. Hlavním cílem bylo vytvořit dialog, do kterého by bylo možné následně vložit layout reprezentující vzhled daného dialogu. První verzi dialogů jsem měl naprogramovanou poměrně rychle. Bohužel z důvodu nepřečtení oficiální dokumentace jsem zjistil, že se tento způsob již nepoužívá. Nyní se používají místo tohoto řešení dialog fragmenty. Mezi další problémy mé první verze dialogu také patřila neschopnost přetrvání dialogu po rotaci displeje. Po přechodu na dialog fragmenty se nabízely dva druhy dialogů. Prvním byl Alert dialog, u kterého není třeba definovat vzhled tlačítek. Tento dialog v sobě zahrnuje tři základní tlačítka (pozitivní, negativní a storno), která se dají případně vypnout. Další možnosí bylo vytvořit standardní dialog s layoutem obsahujícím i tlačítka. Po otestování a porovnávání obou dialogů jsem nakonec dal přednost Alert dialogu. Jako hlavní nevýhodu využití Alert dialogu pro mé potřeby považuji automatické zavření dialogu při kliknutí na tlačítka. Problém jsem následně vyřešil implementací onshowlisteneru, ve kterém jsem nastavil listenery na tyto tlačítka a ručně si řídím, kdy se má daný dialog ukončit. Také je vhodné dát layout reprezentující vzhled dialogu do ScrollViewu. Tím se zabrání nezobrazení veškerého obsahu dialogu na menších displejích. Pro komunikaci dialogu s aktivitou/fragmentem jsem využil rozhraní, které jsem implementoval v aktivitě/fragmentu, kde daný dialog používám. V ukázkovém příkladě by bylo zapotřebí implementovat VlastniDialogListener do aktivity/fragmentu. 33

34 public class VlastniDialog extends DialogFragment implements DialogInterface.OnClickListener { private EditText etname = null; // EditText v dialogu // rozhraní, pomocí kterého se komunikuje s aktivitou/fragmentem public interface VlastniDialogListener { void onvlastnidialogpositiveclick(string name); // vytváření dialogu public static VlastniDialog newinstance() { VlastniDialog frag = new VlastniDialog(); return public Dialog oncreatedialog(bundle savedinstancestate) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = LayoutInflater.from(getActivity()); // načtení layoutu z \res\layout\ a následné nastavení View alertview = inflater.inflate(r.layout.dialog_lesson, null); builder.setview(alertview); // nastavení nadpisu, tlačítek a najití EditTextu builder.settitle("nadpis dialogu"); builder.setpositivebutton("potvrdit", this); builder.setcancelable(false); builder.setnegativebutton("zrusit", this); etname = (EditText) alertview.findviewbyid(r.id.custom_lesson_new_edittext_name); AlertDialog dialog = builder.create(); // změna velikosti dialogu např. při zobrazení klávesnice dialog.getwindow().setsoftinputmode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); // zabránění zavření dialogu při kliknutí mimo něj dialog.setcanceledontouchoutside(false); return dialog; // reakce na stisk public void onclick(dialoginterface dialog, int which) { switch(which) { case AlertDialog.BUTTON_POSITIVE: VlastniDialogListener activity = null; activity = (gettargetfragment()!= null)? (VlastniDialogListener) gettargetfragment() : (VlastniDialogListener) getactivity(); String name = etname.gettext().tostring().trim(); // poslání dat pomocí rozhraní if (!name.equals("")) { activity.onvlastnidialogpositiveclick(name); break; getdialog().dismiss(); 34

35 8.3 Sdílení dat mezi aplikacemi Pro sdílení dat mezi aplikacemi jsem využil share intent sloužící k předávání dat ostatním službám. Vytvoření jednoduchého intentu sloužícího pouze pro sdílení textu bylo jednoduché, ale chtěl jsem také umožnit uživateli lekci přímo načíst ze souboru do aplikace. Soubor jsem si původně vytvořil v interním úložišti, do kterého má přístup pouze moje aplikace. Po změně oprávnění vytvořeného souboru na MODE_WORLD_READABLE získaly přístup k souboru i ostatní aplikace. Toto fungovalo pro většinu aplikací, bohužel jsem narazil na problém s aplikací Gmail, která je jedna z nejčastěji používaných ových aplikací. Tato aplikace je bohužel naprogramována tak, že neumožňuje načítat soubory přímo z interního úložiště. Problém se mi podařilo obejít přidáním nového oprávnění pro mou aplikaci, které umožňuje zapisovat na externí paměťové úložiště. Pak už stačilo pouze soubor vytvořit na tomto úložišti. Další možností by bylo vytvoření vlastního Content Provideru sloužícího k zprostředkování dat ostatním aplikacím. Tento způsob řešení se dá také využít pro sdílení databáze, případně pokud bych chtěl využívat našeptávání při vyhledávání. Na rozdíl od mého zvoleného řešení má výhodu také v tom, že nepotřebuje žádné dodatečné oprávnění. Tento způsob řešení mi bohužel ne vždy fungoval, proto jsem zůstal u již dříve zmiňovaného řešení. 8.4 Načítání dat ze souboru V předchozí části jsem popsal způsob sdílení dat. Nyní by bylo zapotřebí tyto data dokázat přijmout. K přijímání dat jsem si vytvořit vlastní intent filtr v Android manifestu. Na příkladu níže je jednoduchá ukázka, jak by takový intent filtr mohl vypadat. <activity... <intent-filter> <action android:name="android.intent.action.send" /> <data android:mimetype="text/plain" /> </intent-filter> </activity> 35

36 Pomocí action.send dávám systému vědět, že aplikace dokáže přijmout data v případě, že implicitní intent zavolá metodu Intent(Intent.ACTION_SEND). O jaký typ dat se jedná, specifikuje mimetype. V mém případě aplikace dokáže přijmout data ve formátu text/plain, což jsou textové soubory. Dalším krokem je třeba v aktivitě obsahující daný intent filtr napsat kód zajišťující kontrolu přijatých dat včetně následného zpracování těchto dat. // kontrola, jestli uživatel nenačítá data např. ze souboru Intent intent = getintent(); if (intent!= null) { // zjištění, jakým způsobem byla aplikace spuštěna String receivedaction = intent.getaction(); // aplikace byla spuštěna pomocí ACTION_SEND if (receivedaction!= null && receivedaction.equals(intent.action_send)) { // načtení mimetype (kdyby jich v AndroidManifestu bylo více) String mimetype = intent.gettype(); // byl přijat mimetype "text/plain" if (mimetype.startswith("text/plain")) { Uri receiveduri = (Uri) intent.getparcelableextra(intent.extra_stream); // načtení cesty k souboru a následné zpracování String filepath = receiveduri.getpath(); Shares.readFromFile(filePath, this); 8.5 Navigační menu Již na začátku vývoje jsem byl plně rozhodnutý, že tuto vychytávku musím do aplikace za jakoukoliv cenu zakomponovat. Velmi mě zajímalo, jak se takové navigační menu vůbec programuje. Po prostudování dokumentace jsem zjistil, že se prakticky jedná o ListView (občas obsahující pár dalších prvků). Podle zvoleného řádku v komponentě ListView se následně změní fragment zobrazující obsah plochy. Vzhled komponenty ListView lze samozřejmě změnit pomocí vlastního adaptéru. Zde jsem adaptér využil na zvýraznění zvoleného řádku. K zprovoznění této funkčnosti stačí uchovávat v adaptéru datový typ int uchovávající pozici zvoleného řádku v komponentě ListView. V metodě getview() se podle zvolené pozice rozhoduje, zdali má být písmo tučné či nikoliv. 36

37 public class NavigationDrawerListAdapter extends BaseAdapter { private int selecteditem = 0; // pozice prvku, která má být public View getview(int position, View convertview, ViewGroup parent) {... txttitle.settypeface(null, position == selecteditem? Typeface.BOLD : Typeface.NORMAL);... // změna zvoleného prvku a následná aktualizace adaptéru public void selectitem(int selecteditem) { this.selecteditem = selecteditem; notifydatasetchanged();... Během testování na několika dostupných zařízeních jsem si všiml krátkého zastavení během zavírání navigačního menu. Po chvíli jsem našel zdroj tohoto zaseknutí. Mohla za to výměna fragmentů, která patří k náročnějším operacím. Na funkčnost to sice nemělo vliv, ale i tak jsem tomu věnoval pozornost. Napadl mě způsob řešení pomocí listeneru dávajícího mi vědět, kdy se navigační menu zavřelo. Po chvíli testování jsem tento způsob řešení zavrhl. Problém spočíval v tom, že zde bylo zpoždění mezi listenerem a tím, kdy se navigační menu zavřelo vzhledově. V referenci [7] jsem nalezl poměrně jednoduché řešení, které sice nefunguje vždy, ale ve velké většině případů postačuje. Řešení spočívá v nadefinování Handleru sloužícího ke zpožděnému zavření navigačního menu. Jako ideální hodnota během testování mi přišla 180 ms. // zpoždění zavření navigačního menu o 180 ms new Handler().postDelayed(new Runnable() public void run() { mdrawerlayout.closedrawer(mdrawerlist);, 180); Tabletovému rozhraní jsem se v rámci aplikace nevěnoval, jelikož jsem nebyl schopen navrhnout rozhraní, které by vzájemně ladilo a přitom plně využívalo schopností fragmentů. Alespoň jsem tedy do aplikace zakomponoval možnost stále otevřeného navigačního menu na tabletech. Jako vždy jsem zkoušel několik způsobů řešení. Prvním způsobem bylo využít přímo navigačního menu, které by při režimu na šířku zůstalo stále otevřené a nešlo zavřít. 37

38 Zde mi bohužel nastávaly problémy, které jsem nebyl schopen vyřešit. V případě, že jsem aplikaci spustil při orientaci tabletu na šířku, navigační menu nešlo vůbec zavírat. Naopak, pokud jsem aplikaci spustil při orientaci na výšku, tak po následné rotaci na šířku bylo navigační menu sice otevřené, ale šlo stále zavírat, ikdyž jsem to programově zakázal a prokrokoval celý program debuggerem, abych se ujistil, že to tak opravdu proběhlo. V druhém způsobu řešení jsem vyzkoušel trošku jiný způsob. U tabletového layoutu, který je umístněn v /res/layout-sw600dp-land/ jsem předělal navigační menu na klasický ListView. V programu následně porovnávám, zdali je DrawerLayout (který nepoužívám v tabletovém layoutu) různý od null. Podle toho určuji, zdali zařízení je tablet a současně má orientaci na šířku, či nikoliv. Pokud se jedná o tablet a je na šířku, použije se tabletový layout, kde už nemám navigační menu. Důležité je také dát kontrolu na null u všech prvků, kde je zapotřebí, jinak aplikace samozřejmě nebude stabilní a bude docházet k pádům. 8.6 Práce s databází Pro uchovávání dat jsem využil open source SQLite databázi, jež je dostupná v každém zařízení s Android OS. Obsluhu celé databáze jsem rozdělil do tří tříd Třída DatabaseOperations V této třídě se provádí veškeré operace s databází. Pro vkládání záznamů do více tabulek využívám transakce. Tím docílím jistoty, že se vloží veškeré záznamy. Transakce mají obrovskou výhodu v tom, že se provedou všechny nadefinované dotazy (v mém případě vložení záznamů do tabulky) nebo se v případě chyby neprovede nic. Transakcí využívám při vytváření nových slovíček, kdy současně vkládám primární slovo a jeho překlady, jež jsou umístěny v jiné tabulce. Při odstraňování záznamů využívám mazání v kaskádě. Jedním dotazem tak docílím smazání veškerých na sebe navazujících záznamů. Tím pádem není třeba postupně mazat lekci, všechna slovíčka a překlady této lekce. Než se mi podařilo zprovoznit mazání v kaskádě, dalo mi to chvíli zabrat. S pomocí reference [6] jsem zjistil, že SQLite má standardně vypnutou podporu pro cizí klíče. Podpora se musí po každém 38

39 připojení k databázi zapnout. K tomu stačí po otevření databázového spojení provést jednoduchý dotaz. // zapnutí cizích klíčů if (!database.isreadonly()) { database.execsql("pragma foreign_keys = ON;"); V případě vývoje aplikace pro Android 4.1 a výše, stačí využít metody setforeignkeyconstraintsenabled(true), která je schopna zapnout podporu cizích klíčů. Pro úpravu údajů nic zvláštního nevyužívám. Při úpravě slovíček mi přišlo nejjednodušší dané slovíčko odstranit a následně celé znovu vložit do databáze. V případě využití úpravy záznamu je podle mého názoru poměrně zbytečné a komplikované kontrolovat u primárního slova a jeho překladů, co se změnilo, případně zdali nějaký překlad nepřibyl Třída DatabaseHelper Tato třída je potomkem třídy SQLiteOpenHelper. Má na starost vytváření databáze, přidávání tabulek, případně aktualizaci databáze. Uchovávám zde názvy sloupců ve formě veřejných statických proměnných, ke kterým mohu přistupovat v rámci celé aplikace. Konstruktor třídy slouží k vytvoření databáze. Metoda super() volá svého rodiče, předá mu kontext aplikace, jméno a verzi databáze. Verze databáze se musí změnit pokaždé, upravuji-li nějakou tabulku. Pokud vývojář verzi nezmění, dojde k problému u veškerých zařízení, která již mají uloženou starší verzi databáze. Aplikace by využívala starší verzi databáze a přitom metody, které s ní pracují, by byly navrženy pro novou strukturu databáze. S tím také souvisí (v lepším případě) částečná nefunkčnost aplikace a zvýšené riziko pádů aplikace. Po změně verze databáze dojde k zavolání metody onupgrade(), kterou popisuji dále. private static final String DATABASE_NAME = "Database.db"; private static final int DATABASE_VERSION = 2; // konstruktor předávající kontext, jméno a verzi databáze public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); 39

40 Metoda oncreate() je zavolána pouze tehdy, pokud databáze ještě nebyla vytvořena. Tím je toto místo ideální pro tvorbu tabulek, které chci mít umístěné v databázi. Veškeré tabulky by měly mít identifikátor pojmenován jako _id. Tohoto následně mohou využívat některé specifické komponenty (například CursorAdapter). V aplikaci jsem toho nevyužil, jelikož data načítám formou spojení více tabulek. Tyto data následně parsuji podle názvů sloupců a převádím do datových tříd uchovávajících načtené záznamy. Během parsování by v mém případě nastal problém, jelikož by více sloupců mělo stejný název. Pokud bych nenačítal všechna id, nastaly by problémy pří úpravě a mazání záznamů, jelikož bych tyto záznamy nemohl přesně určit. Metoda onupgrade() je automaticky zavolána při změně verze databáze. Zde je umožněno porovnávání čísla databáze nové a staré verze. Podle toho je možno si data ze staré verze načíst a následně je vložit do nové verze, případně pouze odstranit veškerá data, pokud nejsou důležitá. Záleží pouze na vývojáři, čemu dá přednost. Po provedení operací je třeba zavolat oncreate() kvůli vytvoření tabulek s novou strukturou Třída Database Třídu využívám pro spojení obou dříve jmenovaných tříd. Také slouží k otevírání a zavírání databázového spojení. V neposlední řadě v metodě open(), jež otevírá databázové spojení, také zapínám podporu pro cizí klíče. 8.7 Vyhledávání pomocí Action Baru Jelikož jsem jako ukázkovou aplikaci zvolil aplikaci podporující prohlížení slovíček, bylo by více než vhodné umožnit uživateli slovíčka vyhledávat. K tomu jsem využil SearchView widget. Často se po kliknutí na ikonu hledání v Action baru, zadání hledaného textu a následného potvrzení spustí nová aktivita zobrazující výsledky hledání. V mém případě jsem na to šel trošku jinak. SearchView widget jsem využil jako dynamické vyhledávání v původní aktivitě. Nejdříve bylo potřeba implementovat vhodný listener zprostředkovávající opětovné hledání při jakékoliv změně textu. Dále jsem musel zajistit zobrazení původních dat při ukončení hledání. K tomu jsem chtěl využít oncloselistener(), který by se zavolal při ukončení hledání. K mému překvapení jsem 40

41 zjistil, že minimálně na Androidu 4+ nefunguje a nezavolá se. Naštěstí se tato nefunkčnost dala obejít využitím onactionexpandlistener(). private SearchView msearchview; // načtení Action public boolean oncreateoptionsmenu(menu menu) { // načtení menu z \res\menu\wods_menu, který obsahuje prvek pro vyhledávání getmenuinflater().inflate(r.menu.words_menu, menu); // najití vyhledávacího prvku v Action Baru MenuItem searchitem = menu.finditem(r.id.action_words_search); msearchview = (SearchView) MenuItemCompat.getActionView(searchItem); // listener pro kontrolu změny textu msearchview.setonquerytextlistener(new OnQueryTextListener() {... ); // nastavení onactionexpandlisteneru místo oncloselisteneru searchitem.setonactionexpandlistener(new MenuItem.OnActionExpandListener() {... ); return true; 8.8 Rozpoznávání hlasu Android aplikace velmi často umožňují pro snažší zadávání textu využívat rozpoznávání hlasu, jenž je následně převeden na text. Rozpoznávání hlasu jsem využil při testování slovíček formou vyplňování. Implementace je poměrně jednoduchá. Stačí pouze spustit vhodný intent obstarávající zpracování hlasu. Výsledný text se přijme v metodě onactivityresult(). Jako správný programátor nesmím zapomenout na možnost, kdy by uživatelovo zařízení nepodporovalo rozpoznávání hlasu. V tomto případě je třeba tlačítko spouštějící rozpoznávání hlasu vypnout a skrýt. Skrytím tlačítka, zde myslím úplné odstranění tlačítka z layoutu a ne pouze zneviditelnění. Pro otestování, zda aplikace je schopná zpracovávat rozpoznávání hlasu jsem využil metody queryintentactivities() vracející veškeré aktivity, které jsou schopné zpracovat daný intent. Pokud bude počet vrácených aktivit roven nule, zneviditelní se tlačítko pro zpracování hlasu, jinak se nastaví listener na stisk tlačítka. Toto otestování je vhodné provést v metodě oncreate(), případně nějaké obdobné. 41

42 Ukázkový příklad je zde: // Tlačítko pro rozpoznávání hlasu a následné vyzkoušení, zdali rozpoznávání // hlasu zařízení umožňuje. ImageButton speakbutton = (ImageButton) getview().findviewbyid(r.id.a_testing_text_speechtotext); List<ResolveInfo> activities = getactivity().getpackagemanager().queryintentactivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); // pokud se vrátí 0, funkce pro rozpoznávání hlasu není dostupná if (activities.size() == 0) { speakbutton.setenabled(false); speakbutton.setvisibility(view.gone); else { speakbutton.setonclicklistener(this); Po otestování přítomnosti rozpoznávání hlasu je třeba naprogramovat spuštění samotného intentu zprostředkovávajícího rozpoznání hlasu. Zde je velmi důležitá metoda putextra() obsahující jako jméno RecognizerIntent.EXTRA_LANGUAGE_MODEL, jehož hodnotou řekneme, jaký jazyk chceme zpracovat, případně zdali se hlas má zpracovat přesně tak, jak jde slyšet. // Spuštění intentu pro rozpoznávání hlasu. Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putextra(recognizerintent.extra_language_model,recognizerintent.langua GE_MODEL_FREE_FORM); startactivityforresult(intent, 1); Nakonec stačí výsledný text přijmout v již zmiňované metodě onactivityresult() a libovolně public void onactivityresult(int requestcode, int resultcode, Intent data) { switch (requestcode) { case 1: if (resultcode == Activity.RESULT_OK) { ArrayList<String> found = data.getstringarraylistextra(recognizerintent.extra_results); String receivedtext = found.get(0); break; default: break; super.onactivityresult(requestcode, resultcode, data); 42

43 8.9 Nastavení aplikace Nastavení aplikace považuji za takový speciální případ aktivity. Pokud vývojář chce nabídnout uživateli nějaké možnosti nastavení aplikace, využije pomocnou třídu PreferenceFragment. Na rozdíl od ostatních aktivit a fragmentů, kde jejich vzhled bývá umístěn v \res\layout\, je vzhled nastavení umístěn v \res\xml\. Vzhled nastavení aplikace je zpravidla konzistentní napříč různými aplikacemi. Je sice možnost si nastylovat vlastní vzhled, ale dělá se to poměrně obtížně. Přídávání prvků do nastavení je naprosto jednoduché. Stačí do souboru reprezentujícího vzhled přidat prvky, které bude moci uživatel měnit (CheckBoxPreference, ListPreference, EditTextPreference, ) a případně je rozkategorizovat podle typu použití. Těmto prvkům se také musí přiřadit klíč, podle kterého bude moci vývojář nastavené hodnoty načíst a využívat v aplikaci. Klíče slouží jako spojení mezi položkamy v SharedPreferences a zdrojovým kódem aplikace. Pro jednoduchý přístup a změnu hodnot nastavení mimo PreferenceActivity jsem si vytvořil třídu Preferences, kde mám vytvořeny veřejné statické metody get() a set() sloužící k nastavení a vrácení prvků z nastavení aplikace. Díky tomuto způsobu řešení mohu jednoduše přistupovat k uloženým hodnotám odkudkoliv a současně si nemusím neustále pamatovat klíč ke každé hodnotě. // vrácení hodnoty (pokud uživatel nic nenastavil, vrátí se 0) public static int getcountfrompreference(context context) { return getpreferences(context).getint("key1", 0); // změna hodnoty public static void setcountfrompreference(context context, int number) { getpreferences(context).edit().putint("key1", number).apply(); private static SharedPreferences getpreferences(context context) { return context.getsharedpreferences("mojepref", Context.MODE_PRIVATE); 43

44 9 Závěr Práce na této aplikaci mi dala obrovské množství zkušeností v oboru, kterému jsem se dosud nikdy nevěnoval. Při vytváření aplikace mi nejednou pomohlo každodenní zálohování. Při větších změnách napříč celou aplikací, které ne vždy dopadly nejlépe, jsem se mohl vrátit k starší a v té době funkčnější verzi. Výsledná aplikace slouží k prohlížení a zkoušení cizojazyčných slovíček. Uživatel si může v aplikaci vytvářet lekce, do kterých si následně může nadefinovat slovíčka. Lekce je možno sdílet a následně opětovně načíst do aplikace. Velkou pomocí pro mě byl emulátor usnadňující testování aplikace bez nutnosti vlastnit naemulované zařízení. V pozdější fázi vývoje jsem začal zjišťovat, že ne vše jde vyzkoušet na emulátoru. Tím, že si výrobci zařízení přidávají různé grafické nadstavby a podobně, dochází k problémům, jenž by jinak nemusely nastávat. Nejhorší na tomto je, že vývojář tyto problémy není schopen nijak naemulovat bez přístupu k fyzickému zařízení. Jak jsem již na začátku zmiňoval, jakožto začátečníka pro mě byla tvorba Android aplikace opravdu výzva. Několikrát se mi během vývoje stalo, že se mi podařila zprovoznit nějaká funkce, kterou jsem chtěl mít obsaženou v aplikaci a postupem času jsem zjistil, že se tento způsob řešení přestal využívat a nahradil ho nějaký jiný. Na této práci se mi podařilo demonstrovat využití aktivit, fragmentů, dialogů, adaptérů, nastavení aplikace, komponenty Action Bar se zakomponovaným vyhledáváním a intentů. Nejvíce mě mrzí, že jsem z časových důvodů nestihl zakomponovat práci s více vlákny. Chvíli jsem měl v projektu zpracování ve více vláknech obsažené, ale nebylo to ve stavu, který bych mohl nazvat plně funkční. Mezi další možnosti rozšíření bych viděl vytvoření tabletového rozhraní a ukládání hodnocení ze zkoušení do databáze. Tyto výsledky by se následně daly využít pro zobrazení různých grafů, procentuální úspěšnosti a podobně. V neposlední řadě také již zmíněné zpracování ve více vláknech. 44

45 Seznam použité literatury [1] Activity. Android Developers [online]. 25 Apr 2014 [cit ]. Dostupné z: [2] Aktivity a intenty. AndroidWiKi [online] [cit ]. Dostupné z: [3] Fragments. Android Developers [online] [cit ]. Dostupné z: [4] Mobilní operační systém: jak to všechno začalo. Diit.cz [online] [cit ]. Dostupné z: [5] Android Architecture. Tutorialspoint [online] [cit ]. Dostupné z: [6] SQLite Delete Cascade not working. Stack Overflow [online] [cit ]. Dostupné z: [7] Optimizing drawer and activity launching speed. Stack Overflow [online] [cit ]. Dostupné z: [8] GRANT, Allen a Jakub MUŽÍK. Android 4: Průvodce programováním mobilních aplikací. 1. vyd. Brno: Computer Press, ISBN

46 Seznam obrázků Obrázek 1: Architektura systému Android Obrázek 2: Struktura projektu Obrázek 3: Princip získání výsledku z aktivity Obrázek 4: Životní cyklus aktivity Obrázek 5: Životní cyklus fragmentu (pokud je aktivita spuštěna) Obrázek 6: ERA model databáze Obrázek 7: Dialog sloužící k vytváření nových slovíček Obrázek 8: Prohlížení slovíček Obrázek 9: Diagram zobrazující průběh zkoušení Obrázek 10: Zkoušení slovíček formou vyplňování Obrázek 11: Zkoušení slovíček formou volby vím/nevím

47 Seznam použitých zkratek ADT Android Developer Tools JDK Java SE Development Kit JRE Java Runtime Enviroment NFC Near Field Communication OS operační systém SDK Software Development Kit SQL Structured Query Language XML extensible Markup Language 47

48 Přílohy 1 Obsah přiloženého CD Na přiloženém CD se v kořenovém adresáři nachází tato bakalářská práce ve formátu bakalarska_prace.pdf s jednoduchým návodem navod.txt pro spuštění a obsluhu programu. V adresáři Projekt se nachází kompletní projekt se všemi zdrojovými kódy. V adresáři Apk je umístěn instalační soubor. Adresář Dokumentace obsahuje vygenerovanou dokumentaci Javadoc. 48

49 2 Uživatelský manuál Manuál slouží ke stručnému popisu uživatelského rozhraní společně s jeho ovládáním. Aplikace je rozdělena do několika sekcí. Domovská obrazovka Na obrazovce jsou zobrazeny veškeré uživatelem vytvořené lekce. Uživatel může pomocí vysouvacího menu volit mezi režimem prohlížení slovíček, zkoušení formou doplňování odpovědi (zkoušení textem) a zkoušení formou odpovědi vím/nevím. Symbol + umístěný v pravém horním rohu slouží k vytváření nové lekce. Pro vytvoření nové lekce je třeba zadat minimálně jméno lekce. Obrázek 1: Domovská obrazovka Při dlouhém stisku na jakoukoliv lekci se zobrazí kontextové menu umožňující úpravu, odstranění a sdílení zvolené lekce. Dále je zde umístěna volba pro otevření nastavení aplikace. 49

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é

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é Analyzujte, navrhněte a implementujte aplikaci pro sledování spánku dětí Chůvička pro telefony na platformě Android. Od existujících aplikací se bude aplikace odlišovat tímto: funkční na dual-sim telefonech

Více

Manuál Kentico CMSDesk pro KDU-ČSL

Manuál Kentico CMSDesk pro KDU-ČSL Manuál Kentico CMSDesk pro KDU-ČSL 2011 KDU-ČSL Obsah 1 Obecně... 3 1.1 Přihlašování... 3 1.2 Uživatelské prostředí... 4 2 Stránky... 4 2.1 Vytvoření nové stránky... 4 2.1.1 Texty... 7 2.1.2 Styly textu...

Více

WEBDISPEČINK NA MOBILNÍCH ZAŘÍZENÍCH PŘÍRUČKA PRO WD MOBILE

WEBDISPEČINK NA MOBILNÍCH ZAŘÍZENÍCH PŘÍRUČKA PRO WD MOBILE WEBDISPEČINK NA MOBILNÍCH ZAŘÍZENÍCH PŘÍRUČKA PRO WD MOBILE Úvodem WD je mobilní verze klasického WEBDISPEČINKU, která je určena pro chytré telefony a tablety. Je k dispozici pro platformy ios a Android,

Více

WEBMAP Mapový server PŘÍRUČKA PRO WWW UŽIVATELE. 2005-2008 Hydrosoft Veleslavín, s.r.o., U Sadu 13, Praha 6 www.hydrosoft.eu

WEBMAP Mapový server PŘÍRUČKA PRO WWW UŽIVATELE. 2005-2008 Hydrosoft Veleslavín, s.r.o., U Sadu 13, Praha 6 www.hydrosoft.eu WEBMAP Mapový server PŘÍRUČKA PRO WWW UŽIVATELE 2005-2008 Hydrosoft Veleslavín, s.r.o., U Sadu 13, Praha 6 www.hydrosoft.eu Obsah Obsah 1 1.1 3 Internetový... prohlížeč map 4 Rozložení ovládacích... prvků

Více

Úvodní příručka k aplikaci Novell Messenger 3.0.1 Mobile

Úvodní příručka k aplikaci Novell Messenger 3.0.1 Mobile Úvodní příručka k aplikaci Novell Messenger 3.0.1 Mobile Květen 2015 Program Novell Messenger 3.0.1 a novější je k dispozici pro podporovaná mobilní zařízení ios, Android BlackBerry. Protože k systému

Více

Návod k použití aplikace MARKETINGOVÉ PRŮZKUMY.CZ

Návod k použití aplikace MARKETINGOVÉ PRŮZKUMY.CZ www.marketingovepruzkumy.cz Návod k použití aplikace MARKETINGOVÉ PRŮZKUMY.CZ 28.4.2011 Miloš Voborník Obsah 1. Uživatelská příručka... 1 1.1. Běžný uživatel... 1 1.1.1. Celkové rozvržení, úvodní strana...

Více

Návod k používání registračního systému ČSLH www.hokejovaregistrace.cz

Návod k používání registračního systému ČSLH www.hokejovaregistrace.cz Návod k používání registračního systému ČSLH www.hokejovaregistrace.cz Osnova Přihlášení do systému Základní obrazovka Správa hráčů Přihlášky hráčů k registraci Žádosti o prodloužení registrace Žádosti

Více

Příručka poskytovatele Národního geoportálu INSPIRE

Příručka poskytovatele Národního geoportálu INSPIRE Příručka poskytovatele Národního geoportálu INSPIRE 1 // 32 OBSAH Funkcionalita poskytovatele... 3 1. Správa metadat datových sad... 3 Zveřejnění/skrytí záznamu... 4 Sdílení záznamu... 4 2. Nahrání datové

Více

INTERNETOVÝ TRH S POHLEDÁVKAMI. Uživatelská příručka

INTERNETOVÝ TRH S POHLEDÁVKAMI. Uživatelská příručka INTERNETOVÝ TRH S POHLEDÁVKAMI Uživatelská příručka 1. března 2013 Obsah Registrace... 3 Registrace fyzické osoby... 3 Registrace právnické osoby... 6 Uživatelské role v systému... 8 Přihlášení do systému...

Více

29 Evidence smluv. Popis modulu. Záložka Evidence smluv

29 Evidence smluv. Popis modulu. Záložka Evidence smluv 29 Evidence smluv Uživatelský modul Evidence smluv slouží ke správě a evidenci smluv organizace s možností připojení vlastní smlouvy v elektronické podobě včetně přidělování závazků ze smluv jednotlivým

Více

Zabezpečení Uživatelská příručka

Zabezpečení Uživatelská příručka Zabezpečení Uživatelská příručka Copyright 2008 Hewlett-Packard Development Company, L.P. Microsoft a Windows jsou registrované ochranné známky společnosti Microsoft Corporation v USA. Informace uvedené

Více

1. Požadavky na provoz aplikací IISPP

1. Požadavky na provoz aplikací IISPP 1. Požadavky na provoz aplikací IISPP 1.1. Podporované prohlížeče Aplikace IISPP jsou primárně vyvíjeny a testovány v prohlížečích Internet Explorer a Mozilla Firefox. V jiných než uvedených prohlížečích

Více

V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému.

V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému. V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému. MENU Tvorba základního menu Ikona Menu umožňuje vytvořit

Více

Poukázky v obálkách. MOJESODEXO.CZ - Poukázky v obálkách Uživatelská příručka MOJESODEXO.CZ. Uživatelská příručka. Strana 1 / 1. Verze aplikace: 1.4.

Poukázky v obálkách. MOJESODEXO.CZ - Poukázky v obálkách Uživatelská příručka MOJESODEXO.CZ. Uživatelská příručka. Strana 1 / 1. Verze aplikace: 1.4. MOJESODEXO.CZ Poukázky v obálkách Verze aplikace: 1.4.0 Aktualizováno: 22. 9. 2014 17:44 Strana 1 / 1 OBSAH DOKUMENTU 1. ÚVOD... 2 1.1. CO JSOU TO POUKÁZKY V OBÁLKÁCH?... 2 1.2. JAKÉ POUKÁZKY MOHOU BÝT

Více

MATURITNÍ PRÁCE dokumentace

MATURITNÍ PRÁCE dokumentace MATURITNÍ PRÁCE dokumentace 3D hra pro Android Petr Dobeš školní rok: 2012/2013 obor: třída: Elektronické počítačové systémy PS4B ABSTRAKT Tato maturitní práce se zabývá tvorbou hry Akarun, která je

Více

Nastavení telefonu T-Mobile MDA Touch

Nastavení telefonu T-Mobile MDA Touch Nastavení telefonu T-Mobile MDA Touch Telefon s integrovaným kapesním počítačem T-Mobile MDA Touch, zakoupený v prodejní síti společnosti T-Mobile Czech Republic a.s., má potřebné parametry pro použití

Více

ČÁST PÁTÁ POZEMKY V KATASTRU NEMOVITOSTÍ

ČÁST PÁTÁ POZEMKY V KATASTRU NEMOVITOSTÍ ČÁST PÁTÁ POZEMKY V KATASTRU NEMOVITOSTÍ Pozemkem se podle 2 písm. a) katastrálního zákona rozumí část zemského povrchu, a to část taková, která je od sousedních částí zemského povrchu (sousedních pozemků)

Více

Pokyn D - 293. Sdělení Ministerstva financí k rozsahu dokumentace způsobu tvorby cen mezi spojenými osobami

Pokyn D - 293. Sdělení Ministerstva financí k rozsahu dokumentace způsobu tvorby cen mezi spojenými osobami PŘEVZATO Z MINISTERSTVA FINANCÍ ČESKÉ REPUBLIKY Ministerstvo financí Odbor 39 Č.j.: 39/116 682/2005-393 Referent: Mgr. Lucie Vojáčková, tel. 257 044 157 Ing. Michal Roháček, tel. 257 044 162 Pokyn D -

Více

Vodafone promo kit uživatelský manuál http://promo.vodafone.cz/ Uživatelský manuál pro aplikaci. Vodafone promo kit. Verze dokumentu: 2.

Vodafone promo kit uživatelský manuál http://promo.vodafone.cz/ Uživatelský manuál pro aplikaci. Vodafone promo kit. Verze dokumentu: 2. Uživatelský manuál pro aplikaci Vodafone promo kit Verze dokumentu: 2.1 Vytvořeno: V Praze dne 8. 9. 2011 1 Obsah Vodafone promo kit uživatelský manuál Webové rozhraní aplikace Vodafone promo kit... 4

Více

veřejná zakázka na stavební prace s názvem: Sdružená kanalizační přípojka - Město Lázně Bělohrad

veřejná zakázka na stavební prace s názvem: Sdružená kanalizační přípojka - Město Lázně Bělohrad Zadávací dokumentace pro veřejnou zakázku malého rozsahu na stavební prace mimo režim zák. č. 137/2006 Sb., o veřejných zakázkách, v platném znění (dále jen zákon ) veřejná zakázka na stavební prace s

Více

Management projektů. Programová podpora auditu sytému managementu kvality HOT 4IT. Návrh

Management projektů. Programová podpora auditu sytému managementu kvality HOT 4IT. Návrh Management projektů Programová podpora auditu sytému managementu kvality HOT 4IT Návrh Historie Verze Datum Status Kdo Poznámka 1 16 3 2009 Tisoň, Horník 11 4 4 2010 Tisoň Přidáno GUI 12 84 2010 Tisoň

Více

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é

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é Analyzujte, navrhněte a implementujte aplikaci pro sledování spánku dětí Chůvička pro telefony na platformě Android. Od existujících aplikací se bude aplikace odlišovat tímto: funkční na dual-sim telefonech

Více

PŘÍLOHA 10 SMLOUVY O PŘÍSTUPU KE KONCOVÝM ÚSEKŮM. Pravidla a postupy

PŘÍLOHA 10 SMLOUVY O PŘÍSTUPU KE KONCOVÝM ÚSEKŮM. Pravidla a postupy PŘÍLOHA 10 SMLOUVY O PŘÍSTUPU KE KONCOVÝM ÚSEKŮM Pravidla a postupy OBSAH Rozsah dokumentu... 3 1 Implementace Smlouvy... 3 2 Popisy metod komunikace... 4 2.1 B2B GW (SI)... 4 2.2 WEB Interface (WI)...

Více

téma: Formuláře v MS Access

téma: Formuláře v MS Access DUM 06 téma: Formuláře v MS Access ze sady: 3 tematický okruh sady: Databáze ze šablony: 07 - Kancelářský software určeno pro: 2. ročník vzdělávací obor: vzdělávací oblast: číslo projektu: anotace: metodika:

Více

Příloha č. 3 VÝKONOVÉ UKAZATELE

Příloha č. 3 VÝKONOVÉ UKAZATELE Příloha č. 3 VÝKONOVÉ UKAZATELE OBSAH 0. ÚVODNÍ USTANOVENÍ... 3 0.1. Vymezení obsahu přílohy... 3 0.2. Způsob vedení evidencí... 3 0.3. Hodnocené období... 4 1. VÝKONOVÉ UKAZATELE ODPADNÍ VODA... 5 1.1.

Více

Programový komplet pro evidence provozu jídelny v. 2.55. modul Sklad. 2001 Sviták Bechyně Ladislav Sviták hotline: 608/253 642

Programový komplet pro evidence provozu jídelny v. 2.55. modul Sklad. 2001 Sviták Bechyně Ladislav Sviták hotline: 608/253 642 Programový komplet pro evidence provozu jídelny v. 2.55 modul Sklad 2001 Sviták Bechyně Ladislav Sviták hotline: 608/253 642 Obsah 1 Programový komplet pro evidenci provozu jídelny modul SKLAD...3 1.1

Více

PŘIJÍMACÍ ŘÍZENÍ. Strana

PŘIJÍMACÍ ŘÍZENÍ. Strana PŘIJÍMACÍ ŘÍZENÍ Strana Vyhledávání textu - přidržte klávesu Ctrl, kurzor umístěte na příslušný řádek a klikněte levým tlačítkem myši. 1. Právní předpisy upravující přijímací řízení ke studiu ve střední

Více

Návod na zřízení datové schránky právnické osoby nezapsané v obchodním rejstříku

Návod na zřízení datové schránky právnické osoby nezapsané v obchodním rejstříku Návod na zřízení datové schránky právnické osoby nezapsané v obchodním rejstříku Zřízení datové schránky Právnické osobě, která není zapsána v obchodním rejstříku, zřídí ministerstvo datovou schránku právnické

Více

MATURITNÍ PRÁCE dokumentace

MATURITNÍ PRÁCE dokumentace MATURITNÍ PRÁCE dokumentace Jídelníček SŠIEŘ pro Android Martin Bartoň školní rok: 2012/2013 obor: třída: Počítačové systémy PS4.A ABSTRAKT Práce je zaměřená na problematiku tvorby Android aplikací,

Více

Manuál uživatele čipové karty s certifikátem

Manuál uživatele čipové karty s certifikátem Manuál uživatele čipové karty s certifikátem Obsah 1 Úvod... 3 2 Instalace čipové karty s certifikátem... 5 3 Instalace čtečky čipových karet... 10 3.1 Instalace z Windows Update... 10 3.2 Manuální instalace

Více

Zadání. Založení projektu

Zadání. Založení projektu Zadání Cílem tohoto příkladu je navrhnout symetrický dřevěný střešní vazník délky 13 m, sklon střechy 25. Materiálem je dřevo třídy C24, fošny tloušťky 40 mm. Zatížení krytinou a podhledem 0,2 kn/m, druhá

Více

STANDARD 3. JEDNÁNÍ SE ZÁJEMCEM (ŽADATELEM) O SOCIÁLNÍ SLUŽBU

STANDARD 3. JEDNÁNÍ SE ZÁJEMCEM (ŽADATELEM) O SOCIÁLNÍ SLUŽBU STANDARD 3. JEDNÁNÍ SE ZÁJEMCEM (ŽADATELEM) O SOCIÁLNÍ SLUŽBU CÍL STANDARDU 1) Tento standard vychází ze zákona č. 108/2006 Sb., o sociálních službách (dále jen Zákon ) a z vyhlášky č. 505/2006 Sb., kterou

Více

Android Elizabeth. Verze: 1.3

Android Elizabeth. Verze: 1.3 Android Elizabeth Program pro měření mezičasů na zařízeních s OS Android Verze: 1.3 Naposledy upraveno: 12. března 2014 alesrazym.cz Aleš Razým fb.com/androidelizabeth Historie verzí Verze Datum Popis

Více

Obsah. Obsah. Úvod... 7

Obsah. Obsah. Úvod... 7 Obsah Obsah Úvod... 7 1. Digitální fotografie... 10 1.1 Prohlížení obrázků pomocí Nero PhotoSnap Viewer... 10 1.1.1 Zobrazení na celou obrazovku...12 1.1.2 Jak zjednodušit přechod do jiné složky...13 1.1.3

Více

NEJČASTĚJI KLADENÉ DOTAZY K PUBLICITĚ PROJEKTŮ OP LZZ

NEJČASTĚJI KLADENÉ DOTAZY K PUBLICITĚ PROJEKTŮ OP LZZ NEJČASTĚJI KLADENÉ DOTAZY K PUBLICITĚ PROJEKTŮ OP LZZ A) Povinnost příjemců zajišťovat publicitu projektů 1. Z čeho vyplývá povinnost příjemců podpory dodržovat vizuální identitu ESF/OP LZZ a zajišťovat

Více

Modul Řízení objednávek. www.money.cz

Modul Řízení objednávek. www.money.cz Modul Řízení objednávek www.money.cz 2 Money S5 Řízení objednávek Funkce modulu Obchodní modul Money S5 Řízení objednávek slouží k uskutečnění hromadných akcí s objednávkami, které zajistí dostatečné množství

Více

Výsledky přijímacích zkoušek

Výsledky přijímacích zkoušek Výsledky přijímacích zkoušek V tomto modulu komise zadává výsledky přijímací zkoušky a navrhuje, zda uchazeče přijmout či nepřijmout včetně odůvodnění. 1. Spuštění modulu "Výsledky přijímacích zkoušek"

Více

Záloha a obnovení Uživatelská příručka

Záloha a obnovení Uživatelská příručka Záloha a obnovení Uživatelská příručka Copyright 2009 Hewlett-Packard Development Company, L.P. Windows je ochranná známka společnosti Microsoft Corporation registrovaná v USA. Informace uvedené v této

Více

PŘÍLOHA 1.6 SMLOUVY O PŘÍSTUPU K VEŘEJNÉ PEVNÉ KOMUNIKAČNÍ SÍTI LOGISTIKA KONCOVÝCH ZAŘÍZENÍ

PŘÍLOHA 1.6 SMLOUVY O PŘÍSTUPU K VEŘEJNÉ PEVNÉ KOMUNIKAČNÍ SÍTI LOGISTIKA KONCOVÝCH ZAŘÍZENÍ PŘÍLOHA 1.6 SMLOUVY O PŘÍSTUPU K VEŘEJNÉ PEVNÉ KOMUNIKAČNÍ SÍTI LOGISTIKA KONCOVÝCH ZAŘÍZENÍ Obsah 1 Koncová zařízení... 3 2 Charakteristika typů služeb logistika KZ Dodání KZ, Instalace KZ... 3 3 Další

Více

PŘÍLOHA č. 2C PŘÍRUČKA IS KP14+ PRO OPTP - ZPRÁVA O REALIZACI

PŘÍLOHA č. 2C PŘÍRUČKA IS KP14+ PRO OPTP - ZPRÁVA O REALIZACI PŘÍLOHA č. 2C PRAVIDEL PRO ŽADATELE A PŘÍJEMCE PŘÍRUČKA IS KP14+ PRO OPTP - ZPRÁVA O REALIZACI OPERAČNÍ PROGRAM TECHNICKÁ POMOC Vydání 1/7, platnost a účinnost od 04. 04. 2016 Obsah 1 Zprávy o realizaci...

Více

Kingston DataTraveler Locker+ G3. Instalační příručka. Kingston DataTraveler Locker+ G3

Kingston DataTraveler Locker+ G3. Instalační příručka. Kingston DataTraveler Locker+ G3 Instalační příručka Kingston DataTraveler Locker+ G3 Obsah O této instalační příručce... 4 Systémové požadavky... 4 PC platforma... 4 Mac platforma... 4 Doporučení... 4 Nastavení (prostředí Windows)...

Více

NÁVODY PRO PEDAGOGY. Garant LMS Moodle Mgr. Naděžda Fasurová, Ph.D. VŠKE, a.s. Vstup do systému Moodle na VŠKE

NÁVODY PRO PEDAGOGY. Garant LMS Moodle Mgr. Naděžda Fasurová, Ph.D. VŠKE, a.s. Vstup do systému Moodle na VŠKE NÁVODY PRO PEDAGOGY Garant LMS Moodle Mgr. Naděžda Fasurová, Ph.D. VŠKE, a.s. Vstup do systému Moodle na VŠKE Elektronický výukový systém VŠKE pro podporu kombinované formy studia a elearning najdete na

Více

Informace o přijímaných způsobech platby jsou uvedeny zde. Prodávající nepožaduje žádné poplatky v závislosti na způsobu platby.

Informace o přijímaných způsobech platby jsou uvedeny zde. Prodávající nepožaduje žádné poplatky v závislosti na způsobu platby. Obchodnı podmıńky Tyto obchodní podmínky platí pro nákup v internetovém obchodě www.kvalitnimobily.cz. Podmínky blíže upřesňují práva a povinnosti prodávajícího a kupujícího. Kontaktní údaje Název: ESSENTIAL

Více

Právní úprava spolků dle nového občanského zákoníku

Právní úprava spolků dle nového občanského zákoníku Právní úprava spolků dle nového občanského zákoníku Konkrétní doporučení pro sportovní organizace občanská sdružení Legislativní rada Českého olympijského výboru 2013 Právní úprava spolků dle nového občanského

Více

ZADÁVACÍ DOKUMENTACE

ZADÁVACÍ DOKUMENTACE ZADÁVACÍ DOKUMENTACE VÝZVA K PODÁNÍ NABÍDKY NA VEŘEJNOU ZAKÁZKU MALÉHO ROZSAHU ve smyslu ustanovení 18 odst. 5 zákona č. 137/2006 Sb. Výměna 4 ks interiérových dveří v budově kina Art Veřejná zakázka (zatrhněte)

Více

Pravidla. používání Národního elektronického nástroje při realizaci zadávacích postupů prostřednictvím národního elektronického nástroje

Pravidla. používání Národního elektronického nástroje při realizaci zadávacích postupů prostřednictvím národního elektronického nástroje Příloha usnesení vlády ze dne 18. ledna 2016 č. 25 Pravidla používání Národního elektronického nástroje při realizaci zadávacích postupů prostřednictvím národního elektronického nástroje Preambule V souladu

Více

Zákaznická linka: +420 585 496 211. Uživatelský manuál mobilní aplikace. Patriot EU

Zákaznická linka: +420 585 496 211. Uživatelský manuál mobilní aplikace. Patriot EU Zákaznická linka: +420 585 496 211 Uživatelský manuál mobilní aplikace Patriot EU 1.4.2016 1. OBSAH 1. OBSAH... 2 2. APLIKACE PATRIOT EU... 3 2.1 Stažení a instalaci aplikace... 3 2.2 Přidání vozidel do

Více

Jak pracovat s kalkulačním programem HELUZ komín

Jak pracovat s kalkulačním programem HELUZ komín Jak pracovat s kalkulačním programem HELUZ komín Aplikace Heluz komíny je určena pro výpočet potřebných komponentů zvoleného komínového systému a pro zjištění jeho ceníkové ceny. V levém sloupci je nabídka:

Více

Pokyny k instalaci FRIATRACE Verze 5.3

Pokyny k instalaci FRIATRACE Verze 5.3 FRIATOOLS CS Pokyny k instalaci FRIATRACE Verze 5.3 1 1 Obsah 1. Představení softwaru FRIATRACE 3 2. Instalace softwaru FRIATRACE 4 3. Instalační program 4 4. Instalace v systémech Microsoft Windows 2000,

Více

Semestrální práce z NUR Uživatelské rozhraní pro automat MHD. Michal Samek (samekmic)

Semestrální práce z NUR Uživatelské rozhraní pro automat MHD. Michal Samek (samekmic) Semestrální práce z NUR Uživatelské rozhraní pro automat MHD Michal Samek (samekmic) Zadání: Návrh uživatelského rozhraní pro automat MHD v Pardubicích, kde se kromě klasických papírových jízdenek využívá

Více

Podrobný postup pro vygenerování a zaslání Žádosti o podporu a příloh OPR přes Portál farmáře

Podrobný postup pro vygenerování a zaslání Žádosti o podporu a příloh OPR přes Portál farmáře Podrobný postup pro vygenerování a zaslání Žádosti o podporu a příloh OPR přes Portál farmáře 3. a 4. výzva příjmu žádostí Operačního programu Rybářství (2014 2020) V následujícím dokumentu je uveden podrobný

Více

Výzva zájemcům k podání nabídky a Zadávací dokumentace

Výzva zájemcům k podání nabídky a Zadávací dokumentace Výzva zájemcům k podání nabídky a Zadávací dokumentace dle 6 a 18 odst.5 Zákona č.137/2006 Sb. o veřejných zakázkách (dále jen Zákon ) a Závazných pokynů pro žadatele a příjemce podpory v OPŽP na veřejnou

Více

Autodesk Inventor 8 vysunutí

Autodesk Inventor 8 vysunutí Nyní je náčrt posazen rohem do počátku souřadného systému. Autodesk Inventor 8 vysunutí Následující text popisuje vznik 3D modelu pomocí příkazu Vysunout. Vyjdeme z náčrtu na obrázku 1. Obrázek 1: Náčrt

Více

S_5_Spisový a skartační řád

S_5_Spisový a skartační řád Základní škola a mateřská škola Staré Město, okres Frýdek-Místek, příspěvková organizace S_5_Spisový a skartační řád Č.j.:ZS6/2006-3 Účinnost od: 1. 5. 2011 Spisový znak: C19 Skartační znak: S10 Změny:

Více

Obchodní podmínky 1. 2. 2016

Obchodní podmínky 1. 2. 2016 Obchodní podmínky 1. 2. 2016 Obchodní podmínky společnosti Celius CZ s.r.o, které platí pro nákup zboží v internetovém obchodě www.ultra-fit-slim.fast.cz a blíže specifikují práva i povinnosti prodávajícího

Více

tímto vyzývá k podání nabídky a prokázání kvalifikace a poskytuje zadávací dokumentaci na veřejnou zakázku malého rozsahu na dodávky

tímto vyzývá k podání nabídky a prokázání kvalifikace a poskytuje zadávací dokumentaci na veřejnou zakázku malého rozsahu na dodávky Zadavatel: Město Oslavany, náměstí 13. prosince 2, 664 12 Oslavany, IČ: 00282286 ve smyslu 6, 12 a 18 odst. 5 zákona č. 137/2006 Sb. (dále jen zákona) tímto vyzývá k podání nabídky a prokázání kvalifikace

Více

Seriál: Management projektů 7. rámcového programu

Seriál: Management projektů 7. rámcového programu Seriál: Management projektů 7. rámcového programu Část 4 Podpis Konsorciální smlouvy V předchozím čísle seriálu o Managementu projektů 7. rámcového programu pro výzkum, vývoj a demonstrace (7.RP) byl popsán

Více

Semestrální práce Testování uživatelského rozhraní

Semestrální práce Testování uživatelského rozhraní Semestrální práce Testování uživatelského rozhraní Koudelka Lukáš A2 testování bez uživatele Stránka 1 Úvod... 3 Popis zařízení... 3 Cílová skupina... 3 Testované případy... 3 Kontingentní průchod... 4

Více

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java 3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java Studijní cíl V tomto bloku navážeme na konec předchozího bloku a seznámíme se s vývojovými prostředími, které se nejčastěji používají

Více

Registr UJO. Příručka pro uživatele. Institut biostatistiky a analýz. Lékařské a Přírodovědecké fakulty Masarykovy univerzity.

Registr UJO. Příručka pro uživatele. Institut biostatistiky a analýz. Lékařské a Přírodovědecké fakulty Masarykovy univerzity. Registr UJO Příručka pro uživatele Vytvořil: Lékařské a Přírodovědecké fakulty Masarykovy univerzity Obsah Projekt UJO...... 3 On-line klinický registr obecná charakteristika. 4 On-line Registr UJO - základní

Více

Kritéria zelených veřejných zakázek v EU pro zdravotnětechnické armatury

Kritéria zelených veřejných zakázek v EU pro zdravotnětechnické armatury Kritéria zelených veřejných zakázek v EU pro zdravotnětechnické armatury Zelené veřejné zakázky jsou dobrovolným nástrojem. V tomto dokumentu jsou uvedena kritéria EU, která byla vypracována pro skupinu

Více

Web n walk NÁVOD PRO UŽIVATELE. Manager

Web n walk NÁVOD PRO UŽIVATELE. Manager Web n walk NÁVOD PRO UŽIVATELE Manager Obsah 03 Úvod 04 Požadavky na hardware a software 04 Připojení zařízení k počítači 05 Uživatelské rozhraní 05 Výběr sítě 06 Připojení k internetu 06 Nastavení možností

Více

Využití EduBase ve výuce 10

Využití EduBase ve výuce 10 B.I.B.S., a. s. Využití EduBase ve výuce 10 Projekt Vzdělávání pedagogů v prostředí cloudu reg. č. CZ.1.07/1.3.00/51.0011 Mgr. Jitka Kominácká, Ph.D. a kol. 2015 1 Obsah 1 Obsah... 2 2 Úvod... 3 3 Autorský

Více

V Černošicích dne 30. 9. 2014. Výzva k podání nabídky na veřejnou zakázku malého rozsahu s názvem: Nákup a pokládka koberců OŽÚ.

V Černošicích dne 30. 9. 2014. Výzva k podání nabídky na veřejnou zakázku malého rozsahu s názvem: Nákup a pokládka koberců OŽÚ. Město Černošice IČ: 00241121 Riegrova 1209 252 28 Černošice V Černošicích dne 30. 9. 2014 Výzva k podání nabídky na veřejnou zakázku malého rozsahu s názvem: Nákup a pokládka koberců OŽÚ. Město Černošice

Více

5.6.6.3. Metody hodnocení rizik

5.6.6.3. Metody hodnocení rizik 5.6.6.3. Metody hodnocení rizik http://www.guard7.cz/lexikon/lexikon-bozp/identifikace-nebezpeci-ahodnoceni-rizik/metody-hodnoceni-rizik Pro hodnocení a analýzu rizik se používají různé metody. Výběr metody

Více

AutoCAD Architecture 2008

AutoCAD Architecture 2008 AutoCAD Architecture 2008 AutoCAD Architecture 2008 (dále jen ACA2008) je nová verze (a nový název) známého a oblíbeného stavařského programového balíku Architectural Desktop (ADT). Je speciálně navržený

Více

Oprava střechy a drenáže, zhotovení a instalace kované mříže kostel Sv. Václava Lažany

Oprava střechy a drenáže, zhotovení a instalace kované mříže kostel Sv. Václava Lažany Zadávací dokumentace na podlimitní veřejnou zakázku na stavební práce zadávanou dle zákona 137/2006 Sb., o veřejných zakázkách, v platném znění: Zadavatel: Římskokatolická farnost děkanství Skuteč Tyršova

Více

DOTWALKER NAVIGACE PRO NEVIDOMÉ A SLABOZRAKÉ

DOTWALKER NAVIGACE PRO NEVIDOMÉ A SLABOZRAKÉ DOTWALKER NAVIGACE PRO NEVIDOMÉ A SLABOZRAKÉ Libor DOUŠEK, Marek SUSČÍK ACE Design, s.r.o., Drážní 7, Brno, oko@acedesign.cz Anotace: DotWalker je aplikace pro usnadnění cestování zrakově hendikepovaných

Více

Využití interaktivní tabule ve výuce

Využití interaktivní tabule ve výuce Využití interaktivní tabule ve výuce Vzdělávání je neustále inovováno využíváním moderní didaktické techniky a učebních pomůcek, které se pro dnešní generaci vzdělávání staly téměř nepostradatelnými. V

Více

Komplexní pojištění pro město Uherské Hradiště. Zadavatel: město Uherské Hradiště Sídlo: Masarykovo náměstí 19, 686 70 Uherské Hradiště IČ: 00291471

Komplexní pojištění pro město Uherské Hradiště. Zadavatel: město Uherské Hradiště Sídlo: Masarykovo náměstí 19, 686 70 Uherské Hradiště IČ: 00291471 Zadávací dokumentace podlimitní veřejné zakázky na služby zadávané druhem zjednodušeného podlimitního řízení dle ust. 38 zákona č. 137/2006 Sb., o veřejných zakázkách, ve znění pozdějších předpisů (dále

Více

Obchodní podmínky pro spolupráci se společností Iweol EU s.r.o.

Obchodní podmínky pro spolupráci se společností Iweol EU s.r.o. Obchodní podmínky pro spolupráci se společností Iweol EU s.r.o. 1. ÚVODNÍ USTANOVENÍ 1.1. Tyto obchodní podmínky (dále jen obchodní podmínky ) obchodní společnosti Iweol EU s.r.o., se sídlem Kovářská 140/10,

Více

INTELIGENTNÍ DŮM. Zdeněk Kolář, Viktor Daněk. Střední průmyslová škola sdělovací techniky Panská 856/3, 110 00 Praha 1

INTELIGENTNÍ DŮM. Zdeněk Kolář, Viktor Daněk. Střední průmyslová škola sdělovací techniky Panská 856/3, 110 00 Praha 1 Středoškolská technika 2013 Setkání a prezentace prací středoškolských studentů na ČVUT INTELIGENTNÍ DŮM Zdeněk Kolář, Viktor Daněk Střední průmyslová škola sdělovací techniky Panská 856/3, 110 00 Praha

Více

ZADÁVACÍ DOKUMENTACE

ZADÁVACÍ DOKUMENTACE ZADÁVACÍ DOKUMENTACE V JEDNACÍM ŘÍZENÍ S UVEŘEJNĚNÍM podle ust. 44 zákona č. 137/2006 Sb., o veřejných zakázkách, v platném znění (dále jen zákon ) NA PODLIMITNÍ VEŘEJNOU ZAKÁZKU NA DODÁVKY S NÁZVEM Rekonstrukce

Více

Obchodní podmínky PRESPLAST s.r.o.

Obchodní podmínky PRESPLAST s.r.o. Obchodní podmínky PRESPLAST s.r.o. I. ÚVODNÍ USTANOVENÍ Obchodní podmínky. Obchodní společnost PRESPLAST s.r.o., se sídlem Česká Třebová, Kubelkova 497, PSČ 560 02, IČ 27502317, společnost zapsaná v obchodním

Více

ZADÁVACÍ DOKUMENTACE. Pořízení a provoz konsolidované IT infrastruktury

ZADÁVACÍ DOKUMENTACE. Pořízení a provoz konsolidované IT infrastruktury ZADÁVACÍ DOKUMENTACE k nadlimitní veřejné zakázce na dodávky zadávané v otevřeném řízení dle 21 odst. 1 písm. a) a 27 zákona č. 137/2006 Sb., o veřejných zakázkách, ve znění pozdějších předpisů (dále jen

Více

KVALIFIKAČNÍ DOKUMENTACE k veřejné zakázce zadávané podle zákona č. 137/2006 Sb., o veřejných zakázkách, ve znění pozdějších předpisů

KVALIFIKAČNÍ DOKUMENTACE k veřejné zakázce zadávané podle zákona č. 137/2006 Sb., o veřejných zakázkách, ve znění pozdějších předpisů KVALIFIKAČNÍ DOKUMENTACE k veřejné zakázce zadávané podle zákona č. 137/2006 Sb., o veřejných zakázkách, ve znění pozdějších předpisů název veřejné zakázky: Správa identit druh zadávacího řízení: otevřené

Více

účetních informací státu při přenosu účetního záznamu,

účetních informací státu při přenosu účetního záznamu, Strana 6230 Sbírka zákonů č. 383 / 2009 Částka 124 383 VYHLÁŠKA ze dne 27. října 2009 o účetních záznamech v technické formě vybraných účetních jednotek a jejich předávání do centrálního systému účetních

Více

Jana Pospíšková - OBCHODNÍ PODMÍNKY platné k: 6.6.2015, 7:45

Jana Pospíšková - OBCHODNÍ PODMÍNKY platné k: 6.6.2015, 7:45 Vítám vás v mém internetovém obchodě VŠE PRO MIMČO, kde naleznete hlavně výbavičky do postýlek, polštářky a jiné zboží s výšivkou, ale také ostatní zboží pro miminka, hračky, galanterii, oblečení a jiné...

Více

Specifikace předmětu plnění veřejné zakázky: Poskytování mobilních hlasových a datových služeb pro potřeby Města Uherské Hradiště

Specifikace předmětu plnění veřejné zakázky: Poskytování mobilních hlasových a datových služeb pro potřeby Města Uherské Hradiště Specifikace předmětu plnění veřejné zakázky: Poskytování mobilních hlasových a datových služeb pro potřeby Města Uherské Hradiště 1. Předmět veřejné zakázky Předmětem plnění veřejné zakázky je poskytování

Více

Rozšířená nastavení. Kapitola 4

Rozšířená nastavení. Kapitola 4 Kapitola 4 Rozšířená nastavení 4 Nástroje databáze Jak již bylo zmíněno, BCM používá jako úložiště veškerých informací databázi SQL, která běží na všech lokálních počítačích s BCM. Jeden z počítačů nebo

Více

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová Struktura třídy, operátory, jednoduché algoritmy, junit 2. cvičení Alena Buchalcevová Cíle cvičení seznámit se s rozhraním (interface) v Javě seznámit se s testováním při vývoji (makety, JUnit) naučit

Více

Zabezpečení. Uživatelská příručka

Zabezpečení. Uživatelská příručka Zabezpečení Uživatelská příručka Copyright 2006 Hewlett-Packard Development Company, L.P. Microsoft a Windows jsou registrované ochranné známky společnosti Microsoft Corporation v USA. Informace uvedené

Více

Výzva k podání nabídek (zadávací dokumentace)

Výzva k podání nabídek (zadávací dokumentace) Výzva k podání nabídek (zadávací dokumentace) 1.Číslo zakázky 2.Název programu: 3.Registrační číslo projektu 4.Název projektu: 5.Název zakázky: Operační program Vzdělání pro konkurenceschopnost CZ.1.07/1.1.07/02.0129

Více

DATABÁZE 2007. DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní:

DATABÁZE 2007. DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní: DATABÁZE 2007 DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní: - jednoduše a rychle provést úpravy ve struktuře vaší databáze podle potřeby

Více

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY ANDROID APLIKACE PRO VÝUKU SLOVNÍ ZÁSOBY ANDROID APPLICATION FOR LEARNING VOCABULARY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY ANDROID APLIKACE PRO VÝUKU SLOVNÍ ZÁSOBY ANDROID APPLICATION FOR LEARNING VOCABULARY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULTIMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND

Více

Smluvní podmínky (KTv)

Smluvní podmínky (KTv) Smluvní podmínky (KTv) Čl. 1 - Předmět smlouvy 1.1. Dodavatel se zavazuje poskytovat Uživateli časově a datově neomezený přístup k síti Internet a jejím službám (dále jen Služby) prostřednictvím pevného

Více

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy -1- I I. N á v r h VYHLÁŠKY ze dne 2009 o účetních záznamech v technické formě vybraných účetních jednotek a jejich předávání do centrálního systému účetních informací státu a o požadavcích na technické

Více

Operace nad celými tabulkami

Operace nad celými tabulkami 10 Operace nad celými tabulkami V předchozích kapitolách jsme se převážně zabývali sloupci tabulek. V této kapitole se naučíme provádět některé operace, které ovlivňují tabulky jako celek. Probereme vlastnosti

Více

Abeceda elektronického podpisu

Abeceda elektronického podpisu Abeceda elektronického podpisu A. Alena se rozhodla, že bude elektronicky podepisovat datové zprávy, které předává Petrovi. B. Petr může být její kolega, přítel, ale může být i osobou, která provozuje

Více

se věc hodí k účelu, který pro její použití Prodávající uvádí nebo ke kterému se věc tohoto druhu obvykle používá,

se věc hodí k účelu, který pro její použití Prodávající uvádí nebo ke kterému se věc tohoto druhu obvykle používá, Reklamační řád Výrobní společnosti SIR JOSEPH s.r.o., se sídlem Koškova 1766, Turnov, 51101, IČ 46506152, DIČ CZ46506152, zapsané v obchodním rejstříku vedeném u Krajského soudu v Hradci Králové, oddíl

Více

OBCHODNÍ PODMÍNKY. evidující úřad: Městský úřad Nýřany, evidenční číslo OŽÚ PaŠ/3850/2010

OBCHODNÍ PODMÍNKY. evidující úřad: Městský úřad Nýřany, evidenční číslo OŽÚ PaŠ/3850/2010 OBCHODNÍ PODMÍNKY Tyto obchodní podmínky platí pro nákup v internetovém obchodě www.detskebotyaobleceni.cz. Podmínky blíže upřesňují práva a povinnosti prodávajícího a kupujícího. 1. Kontaktní údaje: Mgr.

Více

Všeobecné obchodní podmínky

Všeobecné obchodní podmínky Všeobecné obchodní podmínky 1. Definice pojmů Pro účely těchto Všeobecných obchodních podmínek se následujícími pojmy rozumí: 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. 2. 2.1 2.2 2.3 2.4 2.5 3. 3.1

Více

Mobilní aplikace. Dokument nepopisuje administrační rozhraní (backend) ani napojení na příbuzné databáze.

Mobilní aplikace. Dokument nepopisuje administrační rozhraní (backend) ani napojení na příbuzné databáze. oolczechguide Mobilní aplikace! O dokumentu Tento dokument popisuje uživatelské rozhraní nativní mobilní aplikace CoolCzechGuide pro operační systémy Android (verze 4 a výše) a ios (verze 7 a výše). Popisuje

Více

SMLOUVA O POSKYTOVÁNÍ SOCIÁLNÍ SLUŽBY č.../2013

SMLOUVA O POSKYTOVÁNÍ SOCIÁLNÍ SLUŽBY č.../2013 SMLOUVA O POSKYTOVÁNÍ SOCIÁLNÍ SLUŽBY č.../2013 Poskytovatelem sociální služby: Adresa: Sídlo: DOMOV PRO SENIORY JAVORNÍK, p. o., Školní 104, 790 70 J a v o r n í k J A V O R N Í K IČO: 75004101 Zapsán:

Více

MSSF Benefit praktický průvodce pro žadatele v rámci Operačního programu Rozvoj lidských zdrojů

MSSF Benefit praktický průvodce pro žadatele v rámci Operačního programu Rozvoj lidských zdrojů MSSF Benefit praktický průvodce pro žadatele v rámci Operačního programu Rozvoj lidských zdrojů MSSF Benefit dostupnost a instalace MSSF Benefit bude dostupný ke stažení na stránkách www.kr-olomoucky.cz

Více

2008 Nokia. Všechna práva vyhrazena. Nokia, Nokia Connecting People a Nseries jsou ochranné známky nebo registrované ochranné známky společnosti

2008 Nokia. Všechna práva vyhrazena. Nokia, Nokia Connecting People a Nseries jsou ochranné známky nebo registrované ochranné známky společnosti Chat 1. vydání 2008 Nokia. Všechna práva vyhrazena. Nokia, Nokia Connecting People a Nseries jsou ochranné známky nebo registrované ochranné známky společnosti Nokia Corporation. Nokia tune je zvuková

Více

Ovoce do škol Příručka pro žadatele

Ovoce do škol Příručka pro žadatele Ve smečkách 33, 110 00 Praha 1 tel.: 222 871 556 fax: 296 326 111 e-mail: info@szif.cz Ovoce do škol Příručka pro žadatele OBSAH 1. Základní informace 2. Schválení pro dodávání produktů 3. Stanovení limitu

Více

Obchodní podmínky společnosti SALON KORUNKA s.r.o.

Obchodní podmínky společnosti SALON KORUNKA s.r.o. Obchodní podmínky společnosti SALON KORUNKA s.r.o. Obecné S těmito obchodními podmínkami se kupující seznámil před odesláním své objednávky a je na ně předem upozorněn. Kupující odesláním své objednávky

Více

vismo Edituj, co vidíš.

vismo Edituj, co vidíš. WEBHOUSE Pojdte dál. Online vismo Edituj, co vidíš. První kroky s WEBHOUSE vismo Online 5.2 Děkujeme za zájem o systém WEBHOUSE vismo Online moderní redakční systém určený pro správu obsahu webových stránek.

Více

HD satelitní přijímač SLOTH Opticum Ultra plus

HD satelitní přijímač SLOTH Opticum Ultra plus HD satelitní přijímač SLOTH Opticum Ultra plus recenze přijímače strana 1/16 Obsah: Představení přijímače... 3 Balení... 3 Přijímač... 4 Přední strana přijímače... 4 Zadní strana přijímače... 4 Levá strana

Více