I v J2ME aplikacích občas dochází k chybám, pak je zapotřebí na to uživatele nějak upozornit. Je třeba použít něco, co funguje na většině mobilních telefonů a zároveň plní daný účel. Vypadá to celkem složitě, ale pro programátora to neznamená žádný složitý zásah do aplikace. Vše se dá elegantně vyřešit objektem Alert, který slouží právě k zobrazování chybových hlášek.

Alert a jeho použití

Třída Alert, jak už název napovídá, je upozornění. Upozorňuje uživatele na skutečnost, že se stalo něco, čemu by měl věnovat pozornost. Tou událostí může být například špatné zadání dat, oznámení o dokončení nějaké operace, jakákoliv chyba či výjimka v běhu aplikace nebo prostě jen informace provázející činnost midletu.

Na displeji mobilního telefonu zobrazí Alert chybovou hlášku, kterou si sami zadáme (případně můžeme připojit obrázek), a podle typu mobilního telefonu zazní i výstražný tón. Další výhodou je zobrazení kontextového tlačítka, kterým je možno upozornění potvrdit, to je zobrazeno automaticky v rámci implementace Javy v mobilním telefonu. Jde o vysokoúrovňovou komponentu, takže nemáme šanci ovlivnit její chování v aplikaci. Což je nakonec výhodou, protože upozornění vytvořené pomocí této komponenty bude funkční na všech mobilních telefonech a bude vypadat přirozeně.

Upozornění můžeme v podstatě rozdělit na dva základní druhy podle jejich chování, na takzvaná upozornění časovaná a upozornění modální.

Upozornění časované

Tento druh upozornění je zobrazen na displeji mobilního telefonu pouze po předem nastavený časový interval. Je vhodné k zobrazování zpráv, u kterých není nutné, aby je uživatel potvrdil stiskem tlačítka. Zároveň ale musíme předpokládat, že uživatel toto upozornění uvidí, je proto vhodné ho používat jako bezprostřední reakci na uživatelský vstup. Použití je celkem jednoduché, za zmínku stojí snad jen fakt, že interval, po který je upozornění zobrazeno, se nenastavuje v konstruktoru, ale až po vytvoření instance objektu.

Následující konstruktor vytvoří upozornění, které bude zobrazeno 5 sekund a pak se buď vrátí na původní obsah nebo může pokračovat jinam. Čas, jak jste si jistě všimli, se zadává v milisekundách.

Alert al = new Alert(String titulek, String obsah, Image obrázek, AlertType typ upozornění);
al.setTimeout(5000);

Klasické použití tohoto typu upozornění spočívá v tom, že aplikace po provedení nějaké činnosti, vyvolané uživatelem, vypíše výsledek akce a pokračuje dál. Nejčastějším případem jsou špatně zadané vstupní údaje. Aplikace v tomto případě zobrazí na určitý čas varovnou hlášku a pak se vrátí k zadávání údajů, kde má uživatel šanci svůj omyl napravit.

Display disp = Display.getDisplay(this);
Alert al = new Alert(„Pozor!“, „Spatne zadane udaje.“, null, AlertType.ALARM);
al.setTimeout(5000);
disp.setCurrent(al, form_input);

Předchozí kód nejdříve zobrazí upozornění typu ALARM po dobu pěti sekund a pak zobrazí na displeji form_input, což je objekt typu Form sloužící k zadávání dat.

Alert typu Error na Nokii 7210
alert typu ERROR na mobilním telefonu Nokia 7210

Alert typu Info na Nokii 7210
alert INFO na Nokii 7210

Upozornění modální

Modální upozornění se od časovaného liší dobou zobrazení. Zatímco časované upozornění po uplynutí nastaveného času přejde na další obrazovku, modální upozornění zůstane na displeji, dokud ho uživatel nepotvrdí tlačítkem. Modální z časovaného upozornění uděláme tím, že timeout nastavíme na hodnotu Alert.FOREVER.

Alert al = new Alert(„Pozor!“, „Spatne zadane udaje!“, null, AlertType.ALARM);
al.setTimeout(Alert.FOREVER);

Toto vytvoří upozornění, které zůstane zobrazené až do doby, kdy ho uživatel potvrdí stiskem tlačítka. Tvorba a obsluha tlačítka je plně v režii třídy Alert, použití této třídy je tedy velmi jednoduché.

Typy upozornění

Upozornění jsou rozdělena na následující typy, lišící se jak zobrazením, tak zvukem. Podle toho, jaký účel mají v aplikaci plnit, si vybereme příslušný typ:

  • ALARM – je pro upozornění uživatele na nějakou událost, na kterou si předem přál být upozorněn. Klasickým příkladem je upozornění na uplynulý termín pro kontrolu aktuální verze aplikace.
  • CONFIRMATION – používá se k potvrzení ukončení nějaké operace, vhodné použití je například upozornění typu „Výpočet byl dokončen!“
  • ERROR – upozorňuje na chybu, která vznikla při běhu aplikace. Chybu a výjimku touto chybou vyvolanou je samozřejmě potřeba ošetřit přímo v kódu aplikace. Typické použití je „Nesprávně zadaná data!“, nebo „Spojení se serverem nebylo navázáno!“
  • INFO – sděluje uživateli, že se stala nějaká událost, která není kritická pro běh aplikace. Nejčastěji se, jak i název napovídá, používá pouze pro sdělení.
  • WARNING – tento typ je nejčastěji používán v případě, že chceme uživatele předem varovat na možné riziko, plynoucí z nějaké jím zvolené akce, například „Pozor! Vaše data budou smazána!“

Alarm trochu jinak

Občas se stává, že potřebujeme aplikaci v mobilním telefonu „ozvučit“ nějakým pípnutím. To se dá vyřešit například použitím API funkcí, které implementuje přímo výrobce mobilního telefonu. Pak je ale aplikace závislá na přítomnosti tříd a balíčků podle výrobce telefonu. Zjednodušeně řečeno, pokud použijeme API funkce pro zvuk Nokia telefonů, aplikaci zpravidla nespustíme na mobilu jiné značky.

Poněkud lepším řešením je použití metody playSound(). Tím zajistíme, že naše aplikace bude fungovat na všech mobilních telefonech s podporou Javy. Tato metoda se při zavolání pokusí přehrát zvuk, který patří ke zvolenému typu upozornění, a vrátí boolean hodnotu podle toho, jestli byl zvuk přehrán nebo ne. Pokud použijeme typ upozornění, ke kterému nepatří žádný zvuk, pak funkce playSound vrací hodnotu false. Jednoduchý příklad:

Display disp = Display.getDisplay(this);
boolean ps = AlertType.INFO.playSound(disp);

Přehraje zvuk patřící k upozornění INFO a do proměnné ps uloží true v případě, že byl zvuk přehrán, v opačném případě bude hodnota false.

Příklad, ve kterém je použito všech typů upozornění, si můžete stáhnout a otestovat.

Další zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět