České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Využití Bluetooth přenosu v J2ME aplikacích - BT Messenger Tomáš Valenta
Vedoucí práce:
Ing. Zdeněk Míkovec
Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika Červen 2006
ii
Poděkování Zde bych chtěl poděkovat členům mé rodiny, spolužákům a mému spolubydlícímu, kteří mi laskavě poskytovali k dispozici své mobilní telefony k účelům testování vyvíjené aplikace. Své rodině dále děkuji za morální podporu, zázemí a tolerantní přístup, kterého se mi po celou dobu dostávalo. Nesmím zapomenout na vedoucího mé bakalářské práce, který mi věnoval svůj čas, konzultoval se mnou všechny problémy a poskytl mi mnoho užitečných rad.
iii
iv
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 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ů (autorský zákon).
V Praze dne 18.6.2006
……………………………………………….
v
vi
Abstract My work contains research of Bluetooth usage in applications for mobile device. In addition to detailed exploration of Bluetooth and J2ME the work consists of design and implementation of sample application using Bluetooth transfer called BT Messenger. This application serves as a communication platform, enabling two participants to connect their mobile phones and send each other text messages (chat). My work contains also instructions, how to quickly start programming application for mobile device.
Abstrakt Obsahem mé práce je studium využití technologie Bluetooth v aplikacích pro mobilní zařízení. Kromě podrobného prozkoumání problematiky Bluetooth a J2ME práce obsahuje také návrh a realizaci ukázkové aplikace využívající Bluetooth přenosy s názvem BT Messenger. Tato aplikace slouží jako komunikační program, umožňující dvěma účastníkům propojit své mobilní telefony a zasílat si textové zprávy (chatovat). Součástí mé bakalářské práce je i návod, jak rychle začít programovat aplikace pro mobilní zařízení.
vii
viii
Obsah: 1
Úvod ............................................................................................................................... 1 1.1 Motivace................................................................................................................. 1 1.2 Možnosti moderní techniky.................................................................................... 1 1.3 Oblasti mého zájmu................................................................................................ 1
2
Zadání ............................................................................................................................. 1
3
J2ME............................................................................................................................... 2 3.1 Konfigurace a profil ............................................................................................... 2 Podporované balíčky a omezení............................................................................. 4 3.2 3.3 Další zdroje informací ............................................................................................ 4
4
Technologie Bluetooth ................................................................................................... 5 4.1 Klíčové vlastnosti................................................................................................... 5 4.2 Historie ................................................................................................................... 5 4.3 Využití technologie Bluetooth ............................................................................... 6 4.4 Bluetooth protocol stack......................................................................................... 6 4.5 Profily Bluetooth .................................................................................................... 7 4.6 Srovnání bezdrátových technologií ........................................................................ 8
5
Bluetooth a J2ME ........................................................................................................... 9 Scénář použití JABWT........................................................................................... 9 5.1 5.2 Podpora Bluetooth (JSR-82) na mobilních zařízeních......................................... 10
6
Programování aplikací pro mobilní zařízení ................................................................ 10 6.1 Předpoklady pro tvorbu J2ME aplikací................................................................ 10 6.2 Příprava vývojového prostředí ............................................................................. 11 6.3 Vývoj aplikace...................................................................................................... 11 6.3.1 Vytvoření projektu ....................................................................................... 12 Překlad projektu ........................................................................................... 12 6.3.2 6.3.3 Vytvoření Midletu (Java archivu) ................................................................ 12 6.3.4 Instalace a testování ..................................................................................... 13 6.4 Programování aplikací pracujících s Bluetooth.................................................... 13
7
Návrh aplikace BT Messenger ..................................................................................... 13 Návrh funkčnosti .................................................................................................. 13 7.1 7.1.1 Případ použití ............................................................................................... 14 7.1.2 Využití aplikace............................................................................................ 14 7.1.3 Životní cyklus aplikace ................................................................................ 15 7.2 Struktura zpráv ..................................................................................................... 15 7.3 Life cycle (životní cyklus) aplikace ..................................................................... 16 7.4 Komunikační protokoly........................................................................................ 17 7.4.1 Sestavení spojení .......................................................................................... 17 7.4.2 Chatování ..................................................................................................... 18 7.5 Návrh interface aplikace....................................................................................... 18
8
Vývoj aplikace Bluetooth Messenger........................................................................... 20 8.1 Změny oproti návrhu ............................................................................................ 20 8.1.1 Struktura zpráv ............................................................................................. 20 ix
8.1.2 Life cycle aplikace ....................................................................................... 20 8.1.3 Komunikační protokoly (komunikace) ........................................................ 20 8.1.4 Grafické rozhraní.......................................................................................... 20 8.2 Popis ovládání aplikace........................................................................................ 21 8.2.1 Navázání spojení .......................................................................................... 21 8.2.2 Zasílání zpráv ............................................................................................... 22 8.2.3 Ukončení aplikace ........................................................................................ 23 Podrobnější pohled na řešení................................................................................ 23 8.3 8.3.1 Třída BTMMIDlet........................................................................................ 24 8.3.2 Třída BTMessengerServer ........................................................................... 24 8.3.3 Třída BTMessengerClient ............................................................................ 25 8.3.4 Metoda stayOnline()..................................................................................... 25 8.3.5 Metoda sendMessage()................................................................................. 25 Problémy při tvorbě aplikace ............................................................................... 25 8.4 9
Závěr............................................................................................................................. 27
10 Seznam literatury.......................................................................................................... 28 11 Obsah přiloženého CD ................................................................................................. 29
x
Seznam obrázků Obrázek 1: Schéma jednotlivých vrstev J2ME .......................................................................... 3 Obrázek 2: Hierarchie jednotlivých konfigurací a profilů ......................................................... 4 Obrázek 3: Ukázka několika Bluetooth zařízení........................................................................ 5 Obrázek 4: Bluetooth protocol stack .......................................................................................... 7 Obrázek 5: Hierarchie základních Bluetooth profilů ................................................................. 7 Obrázek 6: Schéma přístupu MIDP aplikace k Bluetooth ......................................................... 9 Obrázek 7: Aplikace Wireless Toolkit ..................................................................................... 12 Obrázek 8: Use case diagram aplikace BT Messenger ............................................................ 14 Obrázek 9: Životní cyklus aplikace BT Messenger ................................................................. 15 Obrázek 10: Life cycle aplikace Bluetooth Messenger............................................................ 17 Obrázek 11: Schéma sestavení spojení .................................................................................... 18 Obrázek 12: Schéma popisující chatování ............................................................................... 18 Obrázek 13: Grafické rozhraní aplikace - navázání spojení..................................................... 19 Obrázek 14: Grafické rozhraní aplikace - chat......................................................................... 19 Obrázek 15: Souslednost displejů při sestavování spojení....................................................... 22 Obrázek 16: Grafické rozhraní - chatování .............................................................................. 23 Obrázek 17: Hierarchie a vlastnosti tříd................................................................................... 23
Seznam tabulek Tabulka 1: Dosah technologie Bluetooth ................................................................................... 5 Tabulka 2: Srovnání bezdrátových technologií.......................................................................... 8 Tabulka 3: Přípustný obsah jednotlivých elementů zasílané zprávy........................................ 16
xi
xii
1 Úvod 1.1 Motivace Fenomén dnešní doby – mobilní telefon, zařízení, bez kterého by si většina lidí dnes již nedokázala svůj život představit. Nedlouho po tom, co se tento vynález objevil také u nás, začal jsem se o něj zajímat i já. Nespokojil jsem se ale s jeho běžným používáním. Zkoušel jsem například vytvářet tzv. wapové stránky (obdoba webových, optimalizovaná pro mobilní zařízení), spojovat mobil s počítačem, upravovat jeho software nebo jej rozebírat na součástky a analyzovat jejich funkčnost. Tento koníček mě jen tak nepustil, a tak jsem měl při volbě tématu semestrální resp. bakalářské práce docela jasno.
1.2 Možnosti moderní techniky Mobilní telefony se stále více stávají součástí našeho života, nejen, že jsme díky nim v kontaktu s okolním světem, můžeme je využít i pro zjišťování mnoha užitečných informací, jako například vyhledání dopravního spojení, telefonního čísla, ostatně všeho, co je uveřejněno na „mobilním internetu“ – WAPu. Vývoj těchto technologií směřuje k integraci a slučování více zařízení s různými funkcemi do jednoho. Na trhu tak jsou již k dispozici mobilní telefony s vestavěným GPS přijímačem, některé manažerské telefony dokáží konkurovat kapesním počítačům, žádnou novinkou nejsou mobily nahrazující MP3 přehrávače. Nedávno byl dokonce představen telefon, který přehrává televizní vysílání, a je tedy možné ho použít místo přenosné televize. Před dokončením je dnes projekt mobilní peněženky, kdy bude možné telefonem platit za nákup v obchodě. Součástí téměř každého lepšího mobilu je integrovaný fotoaparát, přičemž některé se kvalitou svých fotografií blíží digitálním fotoaparátům. Technologie Bluetooth, kterou se zabývám ve své práci, se stále častěji objevuje i v mobilních telefonech nižší střední třídy. Je velmi vhodná pro bezdrátové propojení telefonu a handsfree sady, ale hodí se také pro komunikaci dvou různých zařízení, přičemž v této oblasti pomalu vytlačuje metodu infračerveného přenosu.
1.3 Oblasti mého zájmu Já svoji pozornost v poslední době věnuji hlavně programovacímu jazyku J2ME, který podporují dnes již téměř všechny nové telefony, a který slouží pro rozšíření jejich schopností. Pokud totiž konkrétní model ve své výbavě nemá požadovanou funkci (kalendář, převodník měn, hru) může si ji majitel ve formě J2ME aplikace koupit či stáhnout z webu a do svého přístroje jednoduše doinstalovat. V souvislosti s Javou pro mobilní telefony mě také zaujala rádiová technologie Bluetooth, která umožňuje komunikaci dvou zařízení na kratší vzdálenosti. Pustil jsem se tedy do studování možností skloubení těchto dvou technologií a začal jsem se učit jak programovat aplikace pro mobilní telefony a případně jak v těchto aplikacích využít Bluetooth přenosy. Rozhodl jsem se vytvořit aplikaci, která pomocí Bluetooth spojí dvě mobilní zařízení a jejich majitelé si budou moci posílat zprávy, samozřejmě aniž by za tyto zprávy cokoliv platili svému operátorovi.
2 Zadání Cílem mé bakalářské práce je prostudovat problematiku programování aplikací pro mobilní zařízení a seznámit se s bezdrátovou technologií Bluetooth. Dalším krokem je naučit se v jazyce J2ME programovat jednoduché i složitější aplikace určené pro malá zařízení a hlouběji proniknout do problematiky J2ME aplikací komunikujících bezdrátově mezi sebou. 1
Součástí mé bakalářské práce je i návrh a realizace J2ME aplikace využívající Bluetooth přenosy. Tato aplikace propojí dvě zařízení a umožňuje mezi nimi zasílat textové zprávy (chatovat). Kromě poznatků z J2ME a Bluetooth bude v mé práci zahrnut také návod, resp. tutoriál, jak začít programovat aplikace pro mobilní zařízení. Případné problémy při mém návrhu a implementaci budou zpracovány ve zvláštní kapitole.
3 J2ME Java 2 Micro Edition (zkráceně J2ME) je jedna ze tří edic jazyka Java. J2SE a J2EE slouží k tvorbě aplikací pro osobní počítače resp. servery. Cílem Javy Micro Edition je poskytnout programátorům vývojové prostředí pro tvorbu aplikací určených ke spouštění na malých přenosných zařízení, jakými jsou například mobilní telefony, pagery, PDA osobní asistenti, navigační systémy, atd.. Výhody J2ME jsou obdobné jako u klasické Javy, tedy přenositelnost kódu, objektově orientované programování, atp. J2ME byla přizpůsobena tak, aby mohla bez problémů fungovat na malých přenosných zařízeních. Omezení takovýchto zařízení jsou například: špatné zobrazovací schopnosti (malý displej s nízkým rozlišením a malou barevnou hloubkou), komplikovaný způsob ovládání (pouze numerická nebo žádná klávesnice), malá operační paměť, problém s ukládáním dat (malá pevná paměť), nízký výpočetní výkon (nesrovnatelný například s osobním počítačem). Těmto vlastnostem musela být specifikace J2ME přizpůsobena, takže bylo nutné omezit se pouze na některé balíčky z výchozí specifikace Javy. Na druhou stranu ale byly pro potřeby mobilních zařízení přidány balíčky, třídy a metody nové, podporující nové technologie a možnosti moderních zařízení.
3.1 Konfigurace a profil Jelikož existuje mnoho různých druhů mobilních zařízení, které se od sebe diametrálně liší, nebylo možné vytvořit jedinou specifikaci J2ME tak, aby fungovala bez rozdílu na všech takovýchto zařízeních. Bylo nutné rozdělit J2ME na několik tzv. konfigurací a profilů. Každý profil resp. konfigurace pokrývá určitou skupinu zařízení a definuje přesně metody a funkce, které tato zařízení podporují. Jinými slovy, konfigurace specifikuje potřebné vlastnosti zařízení a základní sadu knihoven, se kterou bude možné při programování pracovat. Profil tyto parametry ještě dále upřesňuje a zužuje výběr podporovaných zařízení, jelikož má obvykle větší nároky na vlastnosti koncových zařízení. V současné době existují dvě různé konfigurace The Connected Limited Device Configuration (CLDC) Connected Device Configuration (CDC) První je určena pro nejobyčejnější přenosná zařízení s malou pamětí a výpočetním výkonem (mobilní telefony, PDA, atd.). Druhá konfigurace se zaměřuje na vybavenější a výkonnější zařízení s rychlejšími procesory, větší pamětí a rychlým připojením k Internetu. Pro vývoj aplikací určených pro mobilní telefony je důležitá konfigurace CLDC, tudíž se na ní v dalším textu omezíme a konfigurací CDC se dále zabývat nebudeme. Vedle těchto dvou konfigurací existuje ještě mnoho konkrétních profilů, odpovídajících přímo danému zařízení. Mezi nejdůležitější profily patří Mobile Information Device Profile (MIDP) – objevil se jako první a byl navržen pro mobilní telefony, pagery a PDA, dohromady s CLDC tvoří vynikající základnu pro tvorbu náročných aplikací. V dnešní době je v oblasti mobilních telefonů
2
nejpoužívanější (aktuální verze podporující nové funkce telefonů má označení MIDP 2.0 a bývá implementována do většiny nově představovaných mobilů). Information Module Profile (IMP) – vychází z MIDP, určen pro tzv. embedded zařízení (výdejní automaty, průmyslové aplikace, bezpečnostní systémy a podobná zařízení s malým nebo žádným displejem a omezeným síťovým připojením), neobsahuje user interface API (bez grafického rozhraní) Foundation Profile (FP) – nachází uplatnění například u zařízení bez uživatelského rozhraní Personal Basis Profile – rozšířený Foundation profile, podpora GUI Personál Profile (PP) – často použit v herních konzolích, komunikátorech, podpora AWT a apletů Další profily a jejich příslušnost ke zmiňovaným konfiguracím znázorňuje přehledně Obrázek 2. Aby bylo možné přidávat podporu nových technologií, jsou postupem času navrhována nová Java aplikační rozhraní (APIs) – ve schématu hierarchie J2ME (viz Obrázek 1) odpovídají nejvýše postavené vrstvě „Optional packages“. Takovéto API může pak ovládat funkce specifické pouze pro dané zařízení, jako například Bluetooth, zvukové rozhraní, grafické rozhraní (GUI), atp. Výrobce při implementaci J2ME u konkrétního zařízení zajistí, které balíčky budou podporovány, tedy se kterými vlastnostmi telefonu bude moci Java Virtual Machine pracovat (a které bude moci programátor ovládat). Obrázek 1 ukazuje schéma vrstev J2ME na konkrétním zařízení. Nejníže se nachází operační systém zařízení, který se stará o běh Java Virtual Machine, nad ním jsou profily resp. knihovny jím podporované a nejvýše dodatečné balíčky, které specifikují zvláštní funkce vyskytující se u konkrétního mobilu).
Optional packages Profiles Libraries Configuration
J2ME
Virtual Machine
Host operating system Obrázek 1: Schéma jednotlivých vrstev J2ME
Pro lepší pochopení souvislostí mezi konfigurací a profilem v J2ME by měl posloužit Obrázek 2. Ten zobrazuje nejdůležitější z nich a jejich závislosti. Je z něho například patrné, že profil MIDP patří do konfigurace CLDC, která potřebuje pro svůj běh KVM (Kilobyte Virtual Machine), a Foundation profile patří do CDC konfigurace a vyžaduje daleko složitější virtuální stroj – CVM (Compact Virtual Machine).
3
Personal profile MIDP Mobile Information Device Profile
PDAP Personal Digital Assistant Profile
Personal Basis profile
RMI profile
Game profile
Foundation profile
CLDC Connected Limited Device Configuration
CDC Connected Device Configuration
KVM Kilobyte Virtual Machine
CVM Compact Virtual Machine
Obrázek 2: Hierarchie jednotlivých konfigurací a profilů
3.2 Podporované balíčky a omezení Jelikož aplikaci Bluetooth Messenger vyvíjím pro profil MIDP, budu se dále zabývat pouze rozebíráním tohoto profilu a jemu nadřazené konfiguraci CLDC. Konfigurace CLDC podporuje vybrané třídy z těchto knihoven standardní Javy
java.util java.lang java.io
A navíc přidává knihovnu javax.microedition.io, která obsahuje vlastní třídy pro vstupně-výstupní operace typické pro mobilní zařízení. Profil MIDP obohacuje konfiguraci CLDC o tyto knihovny:
javax.microedition.rms (pro ukládání dat) javax.microedition.midlet javax.microedition.io (rozšiřuje o třídu HttpConnection) javax.microedition.lcdui (pro ovládání uživatelského rozhraní)
Avšak profil MIDP s sebou přináší také několik omezení, jakými jsou například: displej o velikosti minimálně 96 x 54 pixelů přítomnost tlačítkové nebo dotykové klávesnice minimálně 128KB stálé paměti pro MIDP komponenty minimálně 8KB stálé paměti pro ukládání dat alespoň 32kB paměti pro běh programu (halda VM)
3.3 Další zdroje informací Veškerou dokumentaci k J2ME, tedy ke všem jejím profilům a konfiguracím, je možné najít na webových stránkách [7]. Na Internetu existuje mnoho tutoriálů a seriálů programování v J2ME, a to jak v angličtině, tak i v češtině. Velmi dobrý je seriál, který vycházel na serveru www.interval.cz [8] nebo podobný na serveru www.pcsvet.cz [9]. Anglické materiály týkající se J2ME je možné naleznout ve vývojářské sekci stránek společnosti Sun [6] stejně jako na stránkách některých výrobců mobilních zařízení. Například Nokia [14] nebo Sony Ericsson [15]. V tištěné podobě existuje již také dost publikací, a to dokonce v češtině. Já jsem začínal s knihou „Naučte se Java 2 Micro Edition“ [4], která mi poskytla dostatek informací, abych mohl začít programovat jednoduché midlety.
4
4 Technologie Bluetooth Bezdrátová technologie Bluetooth je krátkodosahový rádiový standard, jehož původním úkolem bylo oprostit elektronická zařízení od kabelů, kterými jsou mezi sebou propojovány. Po objevení všech jeho možností začala jeho obliba rapidně růst, přičemž dnes je například nedílnou součástí každého lépe vybaveného mobilního telefonu. Obrázek 3 zobrazuje několik běžně používaných Bluetooth zařízení. Bezdrátovou Bluetooth myš, handsfree sadu k mobilnímu telefonu a Bluetooth modul do USB portu počítače.
Obrázek 3: Ukázka několika Bluetooth zařízení
4.1 Klíčové vlastnosti Bezdrátová technologie Bluetooth se vyznačuje několika specifickými vlastnostmi. Následující body shrnují ty nejdůležitější z nich. Krátkodosahový radiový přenos – zařízení spolu komunikují po radiových vlnách na frekvenci 2,4 GHz. Maximální vzdálenost jednotlivých zařízení může být až 100 metrů, zpravidla bývá ale pouze 10 metrů. Nízký vysílací výkon (záleží na dosahu), takže vysílač v malém přenosném zařízení s omezenou kapacitou akumulátoru nespotřebovává tolik energie. Podpora nejen datových, ale také hlasových přenosů (využití například v profilu Headset při spojení bezdrátové handsfree soupravy s mobilním telefonem). Tabulka 1 uvádí jednotlivé třídy Bluetooth a jejich maximální možný dosah. Hodnoty se liší podle prostředí, kde Bluetooth přenos probíhá (budovy, volná prostranství, atd.). Z tabulky je patrné, že dosah souvisí s vysílacím výkonem zařízení. Mobilní telefony se nacházejí ve třídě Class 2, tudíž dosah jejich Bluetooth zařízení činí zhruba deset metrů. Třída Class 1 Class 2 Class 3
Maximální povolený výkon (mW) (dBm) 100 mW 20 dBm 2,5 mW 4 dBm 1 mW 0 dBm
Dosah (přibližný) ~ 100 m ~ 10 m ~1m
Tabulka 1: Dosah technologie Bluetooth
4.2 Historie Již v roce 1994 se u Ericsson začali zabývat navrhováním technologie, která by umožnila bezdrátové propojení mobilních zařízení a jejich příslušenství. Hlavními požadavky byla 5
nízká cena komponent, malý příkon a rozměry zařízení. Zanedlouho se k Ericsson připojuje Intel, IBM, Nokia a Toshiba a v roce 1998 spolu vytváří skupinu zabývající se výzkumem bezdrátové technologie Bluetooth (Bluetooth Special Interest Group - SIG), která má za úkol podrobně specifikovat standard Bluetooth. V červenci 1999 Bluetooth SIG publikuje Bluetooth specifikaci verze 1.0. V dnešní době je aktuální specifikace v1.2 a již se pracuje na v2.0 (specifikace jsou k dispozici na webu [11]). Bluetooth Special Interest Group má okolo 2 000 členů. Veškeré informace o technologii Bluetooth jsou dostupné na webových stránkách [10]. Zde je možné nalézt i podrobnosti o Bluetooth SIG skupině, konkrétně pod odkazem http://www.bluetooth.com/Bluetooth/SIG.
4.3 Využití technologie Bluetooth Technologie Bluetooth má v dnešní době nespočet různých využití v mnoha odvětvích. Následující přehled uvádí některé oblasti, ve kterých se Bluetooth technologie již uplatňuje. Datová komunikace mezi dvěma stejnými zařízeními (mobilní telefony, PDA zařízení, notebooky, atd.) Datová komunikace mezi dvěma různými zařízeními (PC a mobilní telefon, PC a PDA, mobilní telefon a tiskárna, atd.) Přenos hlasu mezi mobilním telefonem a handsfree sadou Propojení periferních zařízení k PC (klávesnice, myš, sluchátka, tiskárna) Ad-hoc lokální sítě mezi počítači Dálkové ovládání zařízeních v domácnosti (PC, atd.) Další využití Bluetooth může specifikovat sám programátor. A to jednoduše tak, že napíše aplikaci pracující s tímto rozhraním a nainstaluje ji do patřičně vybaveného zařízení. Případně si může také navrhnout samotné zařízení tak, aby přesně vyhovovalo požadavkům jeho aplikace.
4.4 Bluetooth protocol stack Jádrem specifikace Bluetooth je tzv. „Bluetooth protocol stack“, který definuje, jak celá technologie funguje. Rozděluje Bluetooth na jednotlivé vrstvy, podobně jako například ISO model OSI u počítačových sítí. Jeho schéma zobrazuje Obrázek 4, přičemž nižší vrstvy od těch vyšších odděluje tzv. HCI (Host Controller Interface). Nejníže se nachází Radio vrstva, která se stará o modulaci a demodulaci signálu a popisuje fyzické požadavky na Bluetooth vysílač a přijímač konkrétního zařízení. Baseband / Link controller vrstva se stará o formátování dat do podoby vhodné pro přenos vzduchem a synchronizaci spojení. Link manager vrstva navazuje a udržuje spojení mezi zařízeními. Obdobně jako v oblasti počítačových sítí, i zde rozlišujeme komunikaci podle způsobu navázání spojení. Existují dva druhy komunikace: Synchronní komunikace se spojováním - Synchronous, Connection-Oriented (SCO), sloužící zejména pro hlasovou komunikaci (například profil headset) Asynchronní komunikace bez spojování - Asynchronous, Connectionless (ACL), hodící se hlavně pro datovou komunikaci HCI (Host Controller Interface) se stará o spolupráci vyšších vrstev s vrstvami nižšími (Radio, Baseband, Link manager). Mezi vyšší vrstvy patří například L2CAP (Logical Link Control and Adaptation Protocol), která má na starosti zapouzdření paketů do formátu vhodného pro nižší vrstvy, multiplexování spojení tak, aby mohlo být využíváno více 6
aplikacemi, atd. SDP (Service Discovery Protocol) formuluje akce při nabízení a vyhledávání služeb Bluetooth zařízení. RFCOMM vrstva umožňuje emulovat propojení sériovým kabelem, přičemž má všechna specifika standardu RS-232. Díky tomu mohou přes Bluetooth komunikovat aplikace navržené pro komunikaci sériovým portem.
Obrázek 4: Bluetooth protocol stack
4.5 Profily Bluetooth Aby zařízení mohlo používat technologii Bluetooth, musí umět interpretovat jednotlivé Bluetooth profily. Ty jsou zde od toho, aby byla eliminována případná nekompatibilita vyvíjených programů u Bluetooth zařízení různých výrobců. Každý profil zastupuje jinou aplikaci, jiný úkol resp. možné použití technologie Bluetooth. Jeho specifikace musí zahrnovat: Závislosti na jiných profilech Navrhované formáty uživatelského rozhraní Části Bluetooth protocol stacku využívané tímto profilem Charakteristika některých profilů je uvedena v následujícím přehledu, přičemž jejich hierarchii zobrazuje Obrázek 5.
Obrázek 5: Hierarchie základních Bluetooth profilů
7
Hlavním (base) profilem je GAP (Generic Accces Profile). Z něj vycházejí všechny další profily, čímž je zaručena všeobecná kompatibilita. GAP zajišťuje mimo jiné například vyhledání či navázání spojení dvou Bluetooth zařízení. SDAP (Service Discovery Application Profile) popisuje, jak má aplikace využít SDP (viz Bluetooth stack protokol) pro vyhledání služeb na vzdáleném zařízení. SPP (Serial Port Profile) definuje emulaci RS-232 sériového rozhraní na Bluetooth zařízení. DUN (Dial-Up Networking) je postaven na profilu sériového portu a popisuje, jak má zařízení využívat modem pro připojení k telefonní síti. HSP (Headset Profile) popisuje způsob komunikace Bluetooth headset sady s počítačem či mobilním telefonem. Headset po propojení funguje jako vstupně/výstupní vzdáleně připojené zařízení. GOEP (Generic Object Exchange Profile) – je základem pro další profily zabývající se výměnou dat, definuje role serveru a klienta.
Ucelený přehled a definici všech profilů je možné nalézt na stránkách [10], konkrétně pod odkazem http://bluetooth.com/Bluetooth/Learn/Works/Profiles_Overview.htm.
4.6 Srovnání bezdrátových technologií Tabulka 2 uvádí srovnání tří nejběžnějších bezdrátových technologií, se kterými se dnes můžeme setkat. Infraport (IrDA) se používá na propojení dvou zařízení (PC a PDA, PC a mobil, mobil a mobil, atd.) na krátkou vzdálenost a přímou viditelnost. Přenosové rychlosti jsou u tohoto typu propojení velmi nízké. Wireless LAN se používá hlavně na připojení počítačů, resp. notebooků do lokální sítě. Má poměrně veliký dosah (řádově desítky až stovky metrů), vysoké přenosové rychlosti a nevyžaduje přímou viditelnost mezi zařízeními. Technologií Bluetooth se zabývám ve své práci, má dosah řádově několik metrů, nízký vysílací výkon a tedy malé nároky na napájecí proud. Do budoucna se jeví jako velmi perspektivní v mnoha oblastech elektroniky. Typ přenosu Způsob přenosu Vysílací výkon Maximální přenosová rychlost Dosah Počet komunikujících zařízení Hlasové kanály Adresování
IrDA Optický (vlnové délky 850 – 900 nm) 40-500 mW/Sr 9600 bps – 16 Mbps
Wireless LAN Radiová frekvence (2,4 GHz) 100 mW 11 Mbps (54 Mbps u 802.11a, 802.11g) 100 m Neomezeno, každé připojeno přes access point VoIP 48-bitová MAC
1m 2 Nepodporováno 32-bitové ID
Bluetooth Radiová frekvence (2,4 GHz) 10-100 mW 1 Mbps 10-100 m 8 (aktivních), 200 (pasivních) 3 48-bitová MAC
Tabulka 2: Srovnání bezdrátových technologií
Přestože bylo Bluetooth původně navrženo kvůli odstranění kabelů spojujících periferie, došlo k jeho velkému rozvoji i v jiných oblastech. Dnes již není nic neobvyklého na tom, když spolu dva lidé hrají přes Bluetooth nějakou hru nebo když si jdete vytisknout fotky tak, že mobil spojíte s tiskárnou přes Bluetooth a zmáčknutím jednoho tlačítka tisknete. Bluetooth je podle mého velmi zajímavá technologie, která má určitě budoucnost.
8
5 Bluetooth a J2ME Jednotlivá aplikační rozhraní jazyka Java (APIs) jsou definována a spravována skupinou Java Community Process (JCP). Veškeré informace o této programátorské skupině je možné nalézt na jejich webových stránkách [16]. Každé nové aplikační rozhraní se nazývá Java Specification Request (JSR) a má přiděleno unikátní číslo (např. JSR-37, což je MIDP specifikace, nebo JSR-139, což je specifikace CLDC). Java třídy podporující práci s technologií Bluetooth jsou nazývány JABWT (Java APIs for Bluetooth Wireless Technology, tedy Java aplikační rozhraní pro bezdrátovou Bluetooth technologii). Java Specification Request týkající se této problematiky má označení JSR-82 (dokumentace ke stažení na [12]). MIDP aplication Java APIs for Bluetooth
MIDP CLDC
Bluetooth Stack Operating Systém & Hardware Obrázek 6: Schéma přístupu MIDP aplikace k Bluetooth
Přístup Java aplikace k Bluetooth hardwaru zobrazuje Obrázek 6. Z něj je zřejmé, že JABWT (API určené pro práci s Bluetooth) jsou zvlášť oddělené od profilu MIDP i CLDC konfigurace. Pouze tyto API mohou Bluetooth ovládat, přičemž MIDP aplikace na ně samozřejmě může přistupovat. Jelikož jde o extra Java knihovny, je nutné, aby telefon tyto knihovny podporoval. JABWT definuje dvě základní třídy:
javax.bluetooth javax.obex
Obě tyto třídy jsou závislé na třídě javax.microedition.io, která obsluhuje vstupněvýstupní události aplikací. Některá mobilní zařízení podporují pouze třídu javax.bluetooth, zatímco s metodami javax.obex na nich není možné pracovat (typicky mobilní telefony Nokia).
5.1 Scénář použití JABWT Aplikace využívající Bluetooth má ve většině případů velmi podobný scénář, který shrnují následující body: 1. inicializace Bluetooth stacku (nastavení Bluetooth parametrů daného zařízení, spuštění Bluetooth) 2. hledání zařízení, která jsou v dosahu 3. hledání služeb na nalezených zařízeních 4. navázání spojení s vyhovujícím zařízením 5. vykonání vstupně / výstupních operací 6. uzavření všech otevřených spojení a streamů 9
Nejprve je nutné inicializovat Bluetooth stack, poté již můžeme zkusit vyhledat zařízení v dosahu. U všech nalezených zařízení dále zkoušíme vyhledat požadovanou službu a pokud se nám to povedeme, můžeme se pokusit ke konkrétnímu zařízení připojit. Jakmile dojde k navázání spojení, je možné provádět vstupně / výstupní operace (většinou ve formě zápisu a čtení ze streamu) a po ukončení komunikace nesmíme zapomenout spojení uzavřít.
5.2 Podpora Bluetooth (JSR-82) na mobilních zařízeních S podporou JSR-82 u mobilních zařízení je to trochu složitější. Představa, že když telefon má Bluetooth a zvládá J2ME aplikace, tak zároveň automaticky umí JSR-82, je totiž mylná! Přítomnost Bluetooth a mobilní Javy v zařízení ještě vůbec nic nevypovídá o podpoře JSR-82. Tímto aplikačním rozhraním bývají vybavovány až teprve nejnovější telefony a navíc ne úplně všechny. Pokud se chceme přesvědčit, zda konkrétní zařízení podporuje JSR-82, musíme hledat trochu hlouběji, neboť tato vlastnost se většinou u výčtu funkcí telefonu neuvádí. Často tyto informace nalezneme ve vývojářské sekci výrobců mobilních telefonů. Například společnost Nokia na stránkách [14] uvádí u každého svého zařízení přehledně seznam konfigurací, profilů a aplikačních rozhraní, které jsou podporovány. Přehledný seznam několika nejznámějších výrobců mobilních zařízení včetně podpory rozhraní u jednotlivých modelů je možné naleznout např. zde [17] nebo stránce [18], tyto seznamy ale nejsou zcela kompletní.
6 Programování aplikací pro mobilní zařízení Programování J2ME aplikací ve své podstatě není až tak těžké, jak se na první pohled může zdát. Nováčka ale asi odradí fakt, že zdrojový kód „Hello World“ aplikace zabírá zhruba dvacet řádek, přičemž pouze zobrazí na displeji zařízení hlášku „Ahoj světe!“. Zkušení Java programátoři jsou na její „ukecanost“ ale už zvyklí.
6.1 Předpoklady pro tvorbu J2ME aplikací Abychom mohli začít programovat J2ME aplikace je třeba splnit následující předpoklady: Hardwarové vybavení – PC a případně ještě zařízení s podporou J2ME, na kterém bude možné aplikace testovat Programové vybavení – knihovny jazyka Java a J2ME, překladač J2ME, případně emulátory konkrétních zařízení a vývojové prostředí (není podmínkou) Předchozí zkušenosti s jazykem Java Nároky na minimální konfiguraci počítače nejsou příliš veliké, důležitý je pouze procesor a operační paměť. Postačí Pentium II s 256 MB RAM. Programové vybavení, které budeme k vývoji potřebovat, obsahuje výhradně aplikace, které jsou distribuovány zdarma, což je veliké plus. Programovat v J2ME si tak může dovolit každý, kdo má k dispozici vhodný počítač a nejlépe připojení k Internetu, aby si mohl potřebné instalační soubory stáhnout. K vývoji nejjednodušších aplikací budeme potřebovat pouze dvě věci (instalaci Javy a J2ME), zkušenější programátoři se ale neobejdou bez emulátorů reálných zařízení, na kterých své aplikace mohou testovat. Díky těmto emulátorům si totiž mohou vyzkoušet, jak se jejich program chová na daném konkrétním zařízení, a mohou odladit případné problémy s kompatibilitou aplikace. Jelikož J2ME vychází z jazyku Java (je to vlastně jazyk Java ochuzený o některé balíčky), je předchozí zkušenost s programováním v Javě velkou výhodou.
10
6.2 Příprava vývojového prostředí Následujících několik bodů shrnuje nejdůležitější kroky, které je nutné provést, abychom mohli na svém počítači začít programovat aplikace v J2ME.
Nejprve musíme nainstalovat potřebné knihovny a balíky Java, to vše nám poskytne instalace platformy Java 2 Standart Edition (J2SE ve verzi nejméně 1.4.2). V současnosti je k dispozici verze 5.0 a lze ji nalézt na stránkách společnosti Sun v sekci Java (java.sun.com), konkrétně pod odkazem http://java.sun.com/j2se/1.5.0/download.jsp. Můžete si zvolit mezi stažením samotné JDK (J2SE Development Kit – vše potřebné pro tvorbu a spouštění Java aplikací) nebo lze stáhnout balíček obsahující navíc vývojové prostředí NetBeans. Rozšíření s názvem Mobility Pack, které je na Internetu také zdarma ke stažení, umožňuje programovat midlety přímo v prostředí NetBeans, což práci velmi zjednodušuje a urychluje. Já jsem ale jako vývojové prostředí používal textový editor PSPad (zdarma ke stažení na adrese http://www.pspad.com/). Další krok zahrnuje instalaci Java 2 Micro Edition platformy. Musíme ji provést až po nainstalování samotné Javy, provozování J2ME bez J2SE Development Kit není možné. Potřebná aplikace se jmenuje J2ME Wireless Toolkit a slouží pro překlad, tvorbu a spouštění J2ME aplikací. Ze stránek firmy Sun stáhneme aktuální verzi (v dnešní době 2.2). Instalační soubor nalezneme přímo na stránce http://java.sun.com/products/sjwtoolkit/download-2_2.html. No a v tuto chvíli už vlastně můžeme začít vytvářet Java 2 Micro Edition aplikace. Z vlastní zkušenosti ale ještě doporučím nainstalování některého z emulátorů reálného zařízení (mobilního telefonu). Většina výrobců mobilních telefonů nabízí na svých stránkách v sekci pro vývojáře zdarma ke stažení emulátory jejich mobilních telefonů. Můžete si tak vyzkoušet běh vaší aplikace na mnoha různých zařízeních, aniž byste je měli k dispozici. Já jsem zvolil emulátor od společnosti Nokia (Nokia Prototype SKD), který je opět volně ke stažení na stránkách http://forum.nokia.com. Ten v sobě obsahuje většinu mobilních zařízení vyvíjených společností Nokia, respektive platformy, na kterých jsou postaveny (Series 60, Series 40, Series 80, Symbian OS). Emulátory svých telefonů nabízejí i další společnosti, jako například Siemens či Sony Ericsson. K dispozici bývají zdarma na jejich stránkách ve vývojářské sekci. Jelikož používám emulátor telefonů Nokia, neobejdu se ještě bez jednoho nástroje, jmenuje se Nokia Connectivity Framework a slouží k simulaci reálného provozu telefonu. Umožňuje zasílat zprávy, používat Bluetooth přenosy, http připojení, atd. Nokia ho nabízí zdarma ke stažení na svých stránkách v sekci pro vývojáře, konkrétně http://forum.nokia.com pod odkazem „Tools & SDKs“. Ještě nutno podotknout, že i sebelepší emulátor úplně nezastoupí reálné zařízení a vždy je nakonec nutné testovat aplikaci na konkrétním telefonu. Často jsem se setkal se situací, kdy aplikace na emulátoru fungovala bezchybně, zatímco na telefonu se chovala trochu jinak nebo dokonce vůbec nefungovala.
6.3 Vývoj aplikace Po splnění kroků uvedených výše již nic nebrání tomu pustit se do vývoje samotných aplikací. Následujících několik odstavců uvádí postup, jak naprogramovat jednoduchý midlet za pomoci aplikace Wireless Toolkit a libovolného textového editoru. Jinou možností je použít vývojové prostředí NetBeans s nadstavbou Mobility Pack. Výhodou tohoto způsobu je, že v jednom okně editujete zdrojový kód, pro jeho přeložení stačí stisknout tlačítko na horní
11
liště a projekt je možné hned spustit v emulátoru. Velmi užitečná je také kontrola syntaxe, kterou u obyčejných textových editorů samozřejmě nemůžete čekat. Jelikož jsem ale aplikaci vyvíjel v programu Wireless Toolkit, budu dále popisovat pouze tuto možnost.
6.3.1 Vytvoření projektu Nejprve musíme, stejně jako u J2SE, vytvořit nový projekt. Spustíme tedy Sun Wireless Toolkit (KToolbar) a zvolíme „Create new project“, budeme vyzváni k zadání názvu nového projektu a jména hlavního midletu. Po vyplnění a uložení těchto údajů vytvoří aplikace Wireless Toolkit ve zvoleném umístění patřičnou adresářovou strukturu. Nyní přijde na řadu vytvoření souboru se zdrojovým kódem aplikace (libovolným textovým editorem), který musíme nahrát do vytvořeného projektu. To provedeme tak, že v daném projektu najdeme adresář „src“ a do něj nahrajeme editovaný soubor s příponou .java . Jeho název se musí shodovat s názvem midletu, který je uveden v nastavení projektu. Obrázek 7 ukazuje vzhled hlavního okna aplikace Wireless Toolkit (KToolbar). Horní lišta obsahuje tlačítka nejdůležitějších akcí (Build, Run, Open Project, atd.), pod ní je výběr emulátoru a textová oblast, kam se vypisují hlášky nejen z překladu vyvíjené J2ME aplikace.
Obrázek 7: Aplikace Wireless Toolkit
6.3.2 Překlad projektu Jestliže máme v adresáři src požadovaný soubor se zdrojovým kódem midletu, můžeme se pokusit projekt přeložit. Ve Wireless Toolkit stiskneme tlačítko „Build“, přičemž se do konzole začnou vypisovat informace o průběhu překladu. Pokud vše proběhlo v pořádku, měl by být zápis z překladu ukončen hláškou „Build Completed“, pokud se při překladu objevila nějaká chyba, skončí překlad chybovým hlášením a je uvedeno na jakém řádku a o jaký error se jedná. Můžeme se tedy tuto chybu pokusit odstranit a přeložit aplikaci znovu. Tlačítkem „Run“ v horní liště Wireless Toolkit je možné aplikaci ihned spustit v emulátoru společnosti Sun. Je to nejrychlejší způsob, jak přijít na chyby, které se objeví až po překladu.
6.3.3 Vytvoření Midletu (Java archivu) Samotný přeložený projekt nám ale k ničemu nebude, my chceme midlet zkusit na reálném zařízení. K tomu budeme potřebovat soubory .jar a .jad, které slouží k nainstalování aplikace do mobilního zařízení. Tyto soubory vygenerujeme tak, že po úspěšné kompilaci ve Wireless Toolkit na horní liště vybereme v menu „Project“ akci „Generate Package Files“. V našem projektu pak v adresáři „bin“ nalezneme požadované soubory .jar a .jad, které budeme nahrávat do mobilního zařízení.
12
6.3.4 Instalace a testování Vytvořenou aplikaci je možné do mobilního telefonu nainstalovat několika způsoby. Jestliže máme možnost propojit mobil s počítačem (pomocí datového kabelu, infraportu nebo Bluetooth), stačí do telefonu odeslat soubor .jar (stejně jako například obrázky či vyzváněcí melodie). U některých typů mobilních telefonů je nutné instalaci Java aplikací provádět pomocí speciálního software od výrobce (např. Nokia PC Suite), samotné zkopírování .jar souboru aplikaci nenainstaluje. Pokud nemáme možnost propojit telefon s počítačem, budeme muset aplikace instalovat trochu složitějším způsobem a bude to bohužel stát peníze. Nejprve umístíme oba soubory (.jar i .jad) někam na web (např. free web hostingový prostor). Poté v mobilním telefonu spustíme prohlížeč Internetu (WAPu) a jako stránku, kterou chceme zobrazit, zadáme adresu, kam jsme umístili soubor .jad (včetně jeho názvu i s příponou samozřejmě). Následně by si měl telefon aplikaci sám stáhnout a nainstalovat. Pokud z nějakého důvodu nechceme nebo nemáme možnost aplikaci vyzkoušet na reálném zařízení, může nám jej zastoupit tzv. emulátor. V instalaci Wireless Toolkit je obsažen emulátor od společnosti Sun, který pro jednodušší midlety postačí, pokud ale chceme vytvářet aplikace pro konkrétní zařízení, je vždy lepší sehnat si emulátor k danému typu. V okně Wireless Toolkit je tlačítko „Run“, které spustí projekt ve zvoleném emulátoru (combobox s popiskem „Device“). Můžeme si vybrat některý ze Sun emulátorů (liší se pouze vzhledem a uspořádáním tlačítek) nebo, pokud jsme korektně nainstalovali jiný emulátor, můžeme si zvolit tento emulátor.
6.4 Programování aplikací pracujících s Bluetooth Programování aplikací používajících Bluetooth je již poněkud složitější než tvorba jednoduchých midletů. Nicméně existuje dostatek literatury, takže není problém se to naučit. Z tištěných materiálů můžu z vlastní zkušenosti doporučit knihu [2], která je ale určena již pokročilejším programátorům. Nebo neméně obsáhlou knihu [3]. V elektronické podobě je možné najít mnoho užitečných článků týkajících se problematiky Bluetooth a J2ME, ovšem výhradně v anglickém jazyce. Stejně tak jako mezi knihami, i zde neexistuje mnoho materiálů česky. Za slušný zdroj určitě považuji stránky pro vývojáře na webu společnosti Sun [6], kde je možné najít mnoho tutoriálů a článků zabývajících se problematikou JABWT. Portál Benhui [13] se věnuje pouze této tematice a obsahuje i hojně navštěvovanou diskuzi. Opět je mnoho informací ve vývojářských sekcích webových stránek výrobců mobilních telefonů, např Nokia [14].
7 Návrh aplikace BT Messenger Pro demonstraci možností Bluetooth ve spojení s J2ME jsem se rozhodl navrhnout a v Javě naprogramovat aplikaci využívající tuto bezdrátovou technologii. Aplikaci jsem pojmenoval BT Messenger. BT je neoficiální zkratka pro Bluetooth, slovo Messenger poukazuje na druh programu, tedy že se bude jednat o chatovací aplikaci.
7.1 Návrh funkčnosti Aplikace BT Messenger je komunikační program, určený pro přenosná zařízení, zejména mobilní telefony. Dva uživatelé spolu mohou pomocí tohoto programu komunikovat, a to zasíláním textových zpráv, obdobně jako při chatování. Mohou se od sebe vzdálit až na zhruba deset metrů. Celá komunikace probíhá bez účasti mobilního operátora, tudíž je bezplatná.
13
Bude se jednat o aplikaci učenou pro dva uživatele, z nichž každý bude muset vlastnit mobilní zařízení s podporou JSR-82. Bude použita architektura klient-server, tedy jeden účastník bude vystupovat jako server a druhý jako klient. Aby bylo možné zasílat jedním kanálem více druhů zpráv, byla navržena XML struktura těchto zpráv. Ta umožní odlišit od sebe více druhů zpráv a hlavně udělat aplikaci kompatibilní s její případnou vyšší verzí. Bude tedy možné komunikovat mezi dvěma různými verzemi programu.
7.1.1 Případ použití Obrázek 8 znázorňuje jednoduchý use case diagram aplikace BT Messenger. Vyskytují se v něm dva uživatelé, kteří spolu komunikují. Uživatelé jsou na stejné úrovni (mají stejná práva), komunikace se jeví jako „peer to peer“. Před samotnou komunikací je nutné provést propojení obou účastnických zařízení. BT Messenger
Komunikace <
> Uživatel 1
Navázání spojení
Uživatel 2
Obrázek 8: Use case diagram aplikace BT Messenger
7.1.2 Využití aplikace Aplikace BT Messenger je určena pro textovou komunikaci na krátké vzdálenosti. Je vhodná zejména v případech, kdy se účastníci nacházejí blízko sebe, ale nemohou spolu přímo mluvit. V úvahu přichází například situace, kdy je potřeba konzultovat nějaký problém, ale není možné rušit okolí rozhovorem (přednáška, školní vyučování, porada, atd.). Zajímavá je také zcela jistě problematika komunikace lidí v různých místnostech (ve vedlejších kancelářích v práci, pokojích na koleji, atd. ), zde je ale největším zádrhelem malý dosah technologie Bluetooth v mobilních telefonech. Využít aplikaci BT Messenger by mohli dokonce i sluchově postižení lidé. Těm by mohla sloužit místo tužky a papíru, při komunikaci s osobou neovládající znakovou řeč. Při hlubším zamyšlení je možné přijít na mnoho dalších možných způsoby využití této aplikace.
14
7.1.3 Životní cyklus aplikace Start aplikace
Vytvoření spojení
Výměna přezdívek
Zasílání zpráv
Ukončení aplikace Obrázek 9: Životní cyklus aplikace BT Messenger
Průběh aplikace (viz Obrázek 9) lze zjednodušeně popsat těmito body: 1. Vytvoření spojení mezi dvěma účastníky (navázání komunikace, spojení jejich účastnických zařízení) 2. Odeslání přezdívek pro chatování (tzv. handshake, výměna přezdívek, aby uživatel věděl, s kým komunikuje) 3. Zasílání zpráv: Status Typing Delivery report (ACK) Vlastní textová zpráva Oznámení o ukončení chatování 4. Ukončení aplikace (uzavření spojení a ukončení aplikace)
7.2 Struktura zpráv Abychom mohli posílat všechny typy zpráv v jednotné datové struktuře, použijeme jazyk XML. Po přijetí zprávy provede parser její analýzu a zavolá příslušnou metodu na další zpracování zprávy. Vzor jednotlivých zpráv v XML formátu: TYP_ZPRAVY TEXT_ZPRAVY xxx
Tabulka 3 zobrazuje jednotlivé elementy zasílaných zpráv a jejich možný obsah. Zpráva typu Status zasílá druhé straně informaci o přítomnosti nebo nepřítomnosti účastníka v chatu. Zpráva typu Typing upozorňuje na fakt, že účastník zrovna píše text. Ten je po stisknutí patřičného tlačítka odeslán zprávou typu Message. Potvrzení o přijetí zprávy je zasíláno zprávou typu Ack, jež obsahuje číslo zprávy, která je potvrzována.
15
TYP_ZPRAVY TEXT_ZPRAVY Status Online Away Can’t talk Offline Typing Typing Message Libovolný text Ack ID zprávy Další typy Další atributy Tabulka 3: Přípustný obsah jednotlivých elementů zasílané zprávy
7.3 Life cycle (životní cyklus) aplikace Obrázek 10 zobrazuje životní cyklus aplikace BT Messenger. Po spuštění programu dochází k vyhledání zařízení s běžícím BT Messenger serverem. Pokud je vyhledávání úspěšné, můžeme se ihned k serveru připojit, pokud ne, musíme server na našem zařízení spustit a čekat, až se k nám připojí nějaký účastník. Jakmile je vyřešeno navázání spojení mezi zařízeními, může začít jejich vzájemná komunikace. Pokud se nějaký z účastníků rozhodne chatování ukončit, je o tom jeho kolega informován. Poté může být aplikace řádně ukončena.
16
Start
Hledání serveru
Server nenalezen
Vytvoření serverové části aplikace
Server nalezen Připojení se k serverové části aplikace
Vyčkání na připojení účastníka
Vyměňování si zpráv
Ukončení aplikace
Ukončení aplikace
Obrázek 10: Life cycle aplikace Bluetooth Messenger
7.4 Komunikační protokoly V tomto odstavci bude podrobněji rozebrán způsob komunikace mezi dvěma zařízeními propojenými aplikací BT Messenger. Komunikace se dělí na dvě části, nejprve musí dojít k navázání spojení mezi klientem a serverem a poté může probíhat samotná textová komunikace.
7.4.1 Sestavení spojení Před samotným chatováním je nutné navázat mezi zúčastněnými zařízeními spojení. Zde musela být použita architektura typu klient-server. Tudíž se na jednom zařízení spustí BT Messenger server, který otevře spojení s konkrétními parametry a čeká na připojení klienta. Klient nejprve vyhledá všechna zařízení v dosahu a pak se u nich snaží vyhledat požadovanou službu (BT Messenger server). Pokud se mu podaří nalézt zařízení s běžícím serverem, pokusí se od něj získat jeho URL adresu, na kterou se vzápětí připojí a tím dojde k sestavení spojení se serverem. Schématicky viz Obrázek 11.
17
Klient
Server
Vyhledání zařízení Čekání na připojení účastníka
Vyhledání služeb Vyslání požadavku na URL serveru Odeslání URL
Čekání na URL
Odeslání URL Vytvoření spojení
Vytvoření spojení Výměna přezdívek
Obrázek 11: Schéma sestavení spojení
7.4.2 Chatování Chatování probíhá o poznání jednodušeji. Účastník 1 odešle zprávu, která přijde Účastníkovi 2. Ten zpět zašle potvrzení o přijetí zprávy (ACK). Úplně stejně probíhá odeslání a přijetí zprávy směrem od Účastníka 2 k Účastníkovi 1. Situaci v prvním případě znázorňuje Obrázek 12. Účastník 2
Účastník 1
Psaní zprávy Odeslání zprávy Čekání na doručenku (ACK)
Odeslání doručenky (ACK)
Odeslání doručenky (ACK)
Obrázek 12: Schéma popisující chatování
7.5 Návrh interface aplikace Uživatelské prostředí bylo voleno tak, aby byla aplikace kompatibilní s co největším počtem zařízení. Budou tedy použity pouze standardní prvky J2ME, které dokáží být zobrazena na většině zařízeních. Aplikace tedy bude prostá jakýchkoliv grafických prvků, bude strohá, jednoduchá, intuitivní a funkční. Obrázek 13 zobrazuje ukázku grafického rozhraní aplikace při sestavování spojení. Jednotlivé snímky znázorňují obrazovky (displeje) zařízení a skládají se z obsahu obrazovky a popisků kontextových tlačítek. Šipky znázorňují možné přechody mezi obrazovkami. Každou akci (hledání serveru, vytvoření serveru) je možné stornovat příslušným tlačítkem. Jakmile si účastník zvolí přezdívku, dochází k hledání serveru. Pokud není nalezen, může ho účastník vytvořit. Po úspěšném spojení dvou účastníků je přepnut displej na obrazovku chatu (viz níže). 18
BT Messenger
BT Messenger
BT Messenger
Hledám server pro připojení…
Zvolte si přezdívku:
SERVER NENALEZEN!!!
Uživatel OK
Smazat
Stop
Vytvořit
Znovu hledat
Vytvořit
BT Messenger
BT Messenger
Server vytvořen, čekám na připojení účastníka…
Sestaveno spojení s Uživatel2 Spouštím chat…
Konec
Stop
Obrázek 13: Grafické rozhraní aplikace - navázání spojení
Obrázek 14 naopak znázorňuje jednotlivé displeje při chatování. Ten hlavní zobrazuje okno s chatovými zprávami a pole pro zadávání textu. Pod jedním z kontextových tlačítek se skrývá menu obsahující několik položek (odeslání zprávy, změnu statusu, ukončení aplikace, smazání obrazovky). Po stisknutí tlačítka pro změnu statusu se otevře obrazovka umožňující nastavení statusu účastníka (jeho aktuální dispozice v chatování). Chat s user2 (online) Ahoj Jak se vede? Dobře, jak tobě Taky dobře
Odeslat Smazat obrazovku Změnit status
A co jinak?
Konec
Menu
Smazat
Menu
Váš status: online
BT Messenger
Změnit na: online away can‘t talk offline
Opravdu přejít do offline a ukončit aplikaci? Ne
Změnit
Ano
Obrázek 14: Grafické rozhraní aplikace - chat
19
8 Vývoj aplikace Bluetooth Messenger Podle návrhu uvedeného výše jsem se pustil do programování aplikace BT Messenger. Jak jsem ve své práci postupoval dál a dál, vyvstaly napovrch problémy, se kterými jsem nepočítal a které moji práci trochu znesnadňovaly. Z toho důvodu jsem musel některé části aplikace lehce pozměnit, nebo úplně vypustit. Nakonec se mi podařilo vytvořit funkční aplikaci využívající Bluetooth přenosy pro textovou komunikaci dvou zařízení, která se v některých detailech liší od aplikace navrhované. Funkčnost je ale stejná, nebyly implementovány pouze „nadstandardní“ vlastnosti typu status účastníka, zpráva „Typing“, atd.
8.1 Změny oproti návrhu 8.1.1 Struktura zpráv Z důvodu nedostatku času nebyla v aplikaci implementována XML struktura zasílaných zpráv. Bylo by totiž nutné přidat parser obsahu zpráv a část aplikace zabývající se odesíláním a příjmem zpráv by se stala daleko složitější. Ve finální verzi existuje tedy jeden typ zprávy – chatovací zpráva s textovým obsahem (typ Message), která se po přijetí ihned zobrazuje na displeji zařízení. Ostatní typy zpráv nebyly implementovány. Z důvodu absence XML struktury zpráv nemohli do aplikace tedy být zahrnuty funkce jako status účastníka, informace o tom, zda zrovna nepíše zprávu (Typing), či doručenky (ACK). Na funkčnosti aplikace tato skutečnost mnoho neubírá, avšak tyto funkce jsou docela užitečné a ve všech lepších komunikačních programech (např. ICQ) jsou implementovány.
8.1.2 Life cycle aplikace Životní cyklus finální aplikace se také liší od původního návrhu. Nepodařilo se mi úplně ideálně vyřešit problém s navazováním spojení, resp. v určení, kdo bude server a kdo klient. Pokud by se toto řešilo programově, mohlo by docházet k uváznutí, neboť by nejprve žádná z aplikací nenašla server a tudíž by ho obě vytvořili a čekali na připojení klienta, který by se ale nikdy nepřipojil. Nakonec byl zvolen způsob manuální volby. Tedy že po startu aplikace musí jeden z účastníků zvolit, že chce založit server, a druhý se k němu připojí poté, co spustí klientskou část aplikace (viz screenshoty z aplikace níže). S tím souvisí problém, jak se mezi sebou účastníci domluví, kdo bude server a kdo klient. Pokud mají možnost domluvit se na tom před samotnou komunikací, je vše v pořádku. V opačném případě mohou zkusit metodu „Pokus, omyl“, tedy že vyzkouší spustit aplikaci oběma způsoby a buď se to povede nebo ne. Další možností je domluvit si mezi sebou nějaký druh znakové řeči, který bude signalizovat, kdo spustí BT Messenger jako server a kdo jako klient.
8.1.3 Komunikační protokoly (komunikace) Komunikace mezi zařízeními se odehrává víceméně stejně, jak tomu je na obrázcích v návrhu komunikačních protokolů. Pouze v případě chatování nedochází k zasílání doručenek (ACK).
8.1.4 Grafické rozhraní Struktura grafického rozhraní byla pozměněna v závislosti na úpravě aplikace (vypuštění některých vlastností, změna způsobu navázání spojení, atd.). Neexistuje tedy obrazovka pro změnu statusu účastníka a před ukončením aplikace není zobrazena konfirmační obrazovka. Rozdílným způsobem bylo také řešeno vstupní pole pro text zprávy. Z důvodu nedostatku 20
místa na chatovacím displeji byla vytvořena další obrazovka, která slouží pouze pro vkládání textu. Ta je pro tyto účely přizpůsobena, tudíž lze využívat slovníky pro rychlé psaní (T9, iTap) a má i charakteristický vzhled. Screenshoty zobrazující grafické uživatelské rozhraní aplikace BT Messenger jsou uvedeny v kapitole Popis ovládání aplikace.
8.2 Popis ovládání aplikace 8.2.1 Navázání spojení Průběh navázání spojení mezi dvěma účastníky zobrazuje Obrázek 15. Na něm jsou screenshoty displejů v pořadí, jak po sobě následují. Po spuštění aplikace BT Messenger se objeví obrazovka, kde si uživatel zvolí, zda aplikaci spustí jako server nebo jako klient (viz Obrázek 15, obrazovka úplně vlevo). Poté dochází buď k vyhledávání serveru nebo k jeho vytvoření a čekání na připojení klienta. Na úvodní obrazovce si ještě může účastník změnit svoji přezdívku (implicitně má přidělenou přezdívku podle Bluetooth jména jeho zařízení) a to tak, že vybere z nabídky položku nastavení. Na obrazovce „Nastavení“ upraví kolonku s jeho přezdívkou a vybere z nabídky položku „Uložit“. Pokud se podaří navázat spojení, zobrazí se chatovací displej a může začít komunikace. V opačném případě se zobrazí varovná hláška, že nebyl nalezen server (pokud byla spuštěna klientská část aplikace, pokud byl spuštěn server, žádná hláška zobrazena nebude, pouze se bude stále čekat na klienta). Během vyhledávání serveru jsou na displeji zobrazována zařízení v dosahu s aktivovanými Bluetooth přenosy. Poté je u každého nalezeného zařízení vyhledávána služba představující BT Messenger server. Jakmile je vyhledávání služeb ukončeno, zobrazí se obrazovka s nabídkou nalezených BT Messenger serverů (toto Obrázek 15 nezobrazuje) a uživatel si vybere, ke kterému serveru se chce připojit.
21
Obrázek 15: Souslednost displejů při sestavování spojení
8.2.2 Zasílání zpráv Jakmile je korektně navázáno spojení, je již možné zasílat zprávy uživateli na druhé straně. Je aktivní tzv. chatovací obrazovka, kde se zobrazují přijaté a odeslané zprávy a pod jedním z kontextových tlačítek je volba „Menu“ případně rovnou „Psát zprávu“ (záleží na zařízení). Po jejím stisknutí se uživatel dostane na obrazovku pro zadávání textu zprávy (viz Obrázek 16, obrazovka vpravo). Stisknutím tlačítka „Odeslat“ se text vložený do vstupního pole odešle a pro úplnost zobrazí na displeji. Textu jednotlivých zpráv předchází přezdívka odesílatele (zobrazena tučně), aby bylo rozlišitelné, zda jde o zprávu přijatou nebo odeslanou. Chatovací displej je možné celý smazat (tlačítkem „Smazat“), stejně jako všechen vkládaný text v případě odesílání zprávy. Chatovací obrazovka má ve svém titulku zobrazenu přezdívku účastníka na druhé straně. Zprávy se na ní řadí nad sebe, tedy nejnovější je nejvýše. Toto řešení jsem zvolil jednak z důvodu přehlednosti a také abych se vyhnul problému s rolováním obrazovky při jejím zaplnění (obrazovka totiž sama neroluje a bylo by nutné toto nějak zajistit programově).
22
Obrázek 16: Grafické rozhraní - chatování
8.2.3 Ukončení aplikace Aplikaci je možné kdykoliv ukončit stisknutím tlačítka „Konec“. V tu chvíli dojde k ukončení spojení (v případě pokud probíhá chat) a uživatel na druhé straně je o tom informován systémovou hláškou.
8.3 Podrobnější pohled na řešení Nejprve jsem aplikaci vytvářel jako jednu třídu v jednom souboru, ale později se ukázalo, že to není možné. Tudíž nakonec zdrojový kód aplikace tvoří tři třídy, každá ve svém souboru (viz Obrázek 17). Class BTMMIDlet extends MIDlet implements CommandListener (BTMMIDlet.java) Class BTMessengerServer
Class BTMessengerClient
implements Runnable (BTMessengerServer.java)
implements Runnable, DiscoveryListener (BTMessengerClient.java)
Obrázek 17: Hierarchie a vlastnosti tříd
23
8.3.1 Třída BTMMIDlet Hlavní třída (BTMMIDlet) dědí vlastnosti třídy MIDlet a implementuje CommandListener. Interface CommandListener je nutný pro reagování na události vyvolané uživatelem (stisk tlačítka, pohyb joysticku). Třídu MIDlet musí dědit každá midlet aplikace, s čímž souvisí nutnost přepsání tří metod (startApp(), pauseApp() a destroyApp()). Tyto metody jsou vykonány, pokud je aplikace spuštěna, minimalizována, resp. ukončena. Třída BTMMIDlet vůbec nepracuje s Bluetooth přenosy. Pouze se stará o grafický výstup, uživatelský vstup a ovládání aplikace. Po spuštění a zkontrolování funkčnosti Bluetooth (prostým načtením jména, pod kterým je zařízení v Bluetooth reprezentováno) je zobrazena obrazovka typu „Form“. Ta obsahuje nabídku „ChoiceGroup“ umožňující zvolit jednu z možností (server, klient). A pro informaci je také zobrazena přezdívka uživatele, kterou může změnit na obrazovce settingsForm. Jakmile stiskne uživatel tlačítko „Spustit“, je identifikováno, zda má být spuštěna serverovská či klientská část aplikace, a podle toho je vytvořena instance třídy BTMessengerServer resp. BTMessengerClient. Pokud není při spuštění aplikace správně inicializováno Bluetooth, je o tom zobrazena varovná hláška a není možné v aplikaci pokračovat dál. Metoda „commandAction“ je vyžadována interfacem CommandListener a definuje, jak bude aplikace reagovat na stisk různých tlačítek v různých situacích. V mém případě slouží zejména pro přechod mezi jednotlivými obrazovkami a ovládání akcí svázaných s kontextovými klávesami. Dále třída BTMMIDlet obsahuje metody pro zobrazování informací na displeji a přepínání displejů (clearFormAppend(), chatFormAppend(), switchScreen(), showWarning()), což využívají ostatní dvě třídy (BTMessengerServer a BTMessengerClient).
8.3.2 Třída BTMessengerServer Třída BTMessengerServer na rozdíl od BTMMidletu nepotřebuje nic dědit od třídy Midlet, pouze implementuje rozhraní Runnable. A to z toho důvodu, že je napsána jako vlákno, které bude uspáváno a probouzeno. Obsahuje tedy metodu „run()“, která je zavolána při vytvoření instance objektu BTMessengerServer. Jakmile skončí tato metoda, je také ukončen život tohoto vlákna. Metoda „run()“ začíná vygenerováním URL adresy, na kterou se bude klient připojovat. Ta začíná prefixem „btspp“, což znamená že půjde o RFCOMM spojení (emulace sériového portu), a pokračuje Bluetooth adresou zařízení. Adresa localhost znamená, že na tomto zařízení poběží server. Následuje unikátní číslo UUID, volby a název spojení. Celá adresa vypadá takto: connectionURL = "btspp://localhost:fab1a4ee7cd111d89527000bdb544cb1;" + "authenticate=false;encrypt=false;name=BTM Server";
Takto vytvořená URL může být použita jako parametr metody Connector.open(), která otevírá spojení a vrací StreamConnectionNotifier. Na tomto notifieru vzápětí zavoláme metodu acceptAndOpen(), která zablokuje aktuální vlákno a čeká na připojení účastníka. Tato metoda vrací identifikátor spojení, který dále použijeme pro otevření čtecích a zapisovacích streamů (metodou openDataInputStream() resp. openDataOutputStream()). Handshake (tedy výměnu přezdívek pro chatování) provedeme zapsáním stringu nickName do streamu (metoda stream.writeUTF()) a odesláním jeho obsahu (stream.flush()). A přezdívku uživatele na druhé straně získáme čtením streamu stream.readUTF(). Jakmile proběhne handshake je zavolána metoda stayOnline(), o které se zmíním dále. Třída BTMessengerServer obsahuje ještě metodu destroy(), která je volána při ukončení aplikace, a metodu sendMessage(), která odesílá zprávy.
24
8.3.3 Třída BTMessengerClient Stejně jako serverovská třída, i BTMessengerClient implementuje rozhraní Runnable a je tedy napsána jako vlákno. Život threadu začíná vytvořením instance DiscoveryAgent, který slouží k vyhledávání Bluetooth zařízení a služeb. K tomuto účely musely být přepsány abstraktní metody deviceDiscovered(), servicesDiscovered(), inquiryCompleted(), atd. Poté co je iniciováno hledání zařízení (discoveryAgent.startInquiry()), musí být hlavní vlákno uspáno. Jakmile je hledání ukončeno, dojde k probuzení vlákna a pokračuje se ve vyhledávání služeb na nalezených zařízeních. Opět musí být hlavní vlákno uspáno na dobu, dokud není dokončeno hledání služeb. Pro všechna nalezená zařízení s běžícím BTMessenger serverem je dále zjišťováno jejich jméno, resp. přezdívka pro chat. A je vytvořen seznam obsahující všechny tyto servery, který je vzápětí zobrazen. Jakmile uživatel vybere jeden server ze seznamu, dochází ke zjištění URL adresy tohoto serveru, připojení se k němu a výměně přezdívek účastníků chatu (obstarává metoda clientConnect()). Po připojení je spuštěna metoda stayOnline() stejná jako v případě serveru, která bude stejně jako sendMessage() zmíněna dále.
8.3.4 Metoda stayOnline() Tato metoda obsahuje stále se opakující cyklus, uvnitř kterého je kontrolováno, jestli nepřišla nová zpráva. Podmínku tohoto cyklu tvoří logická proměnná isClosed, kterou nastavíme na „true“, pokud chceme vlákno ukončit. Uvnitř cyklu je další podmínka (zda je stream k dispozici), která, pokud je splněna, zkusí ze streamu pomocí metody readUTF() přečíst text zprávy a hned ho zobrazí na displeji. Následuje uspání vlákna na půl sekundy a opakování celého cyklu. Tady jsem si vědom jednoho nedostatku, a to když se jednomu z uživatelů podaří napsat více než jednu zprávu za půl sekundy (dle mého nemožné), zobrazí se tyto zprávy na druhé straně jako jedna jediná zpráva.
8.3.5 Metoda sendMessage() Po stisknutí tlačítka „Psát zprávu“ se zobrazí obrazovka, kam vepíšeme text naší zprávy. Zprávu odešleme tlačítkem „Odeslat“. A právě v tomto okamžiku je zavolána metoda sendMessage(), která se pokusí zapsat text do výstupního streamu (writeUTF()) a odeslat ho (flush()). Nakonec ještě vypíše odeslanou zprávu na displej zařízení odesílatele.
8.4 Problémy při tvorbě aplikace Při programování aplikace BT Messenger jsem se setkal s několika problémy, přičemž některé se mi podařilo odstranit, některé nikoliv. Některé z nich byly závažnější a hodně mě zdrželi při práci, některé byly méně závažného charakteru, tudíž jsem jim nevěnoval takovou pozornost a zabýval se jimi až později. Následující přehled uvádí některé problémy, se kterými jsem se setkal, a jejich případné řešení. Inicializace Bluetooth Již při první „Hello World“ aplikaci používající Bluetooth jsem se setkal s problémem, který mě zdržel při dalším programování. Zařízení totiž nedokáží sama inicializovat Bluetooth stack, když s ním chceme pracovat v aplikaci. Proto je nutné před samotným spuštěním aplikace zapnout v menu telefonu Bluetooth přenosy, jinak bude při běhu programu vyhozena výjimka nebo dokonce dojde k náhlému samovolnému ukončení aplikace. Stejný problém nastává, pokud chceme testovat aplikaci na emulátoru Nokia, aniž bychom předtím spustili program Nokia Connectivity Framework, emulující Bluetooth přenosy. Řešení: testovat v aplikaci, zda je Bluetooth zapnutý, a pokud ne, tak zobrazit varovnou hlášku, ať ho uživatel zapne.
25
Vyhledávání zařízení Pokud chceme v aplikaci pracovat s interfacem DiscoveryListener, je dobré vytvořit pro něj zvláštní třídu. Je nutné s ním totiž pracovat jako s vláknem a to je v hlavní třídě problematické. Při spuštění vyhledávání služeb či zařízení je nutné vlákno uspat a probudit, až když je hledání dokončeno. Řešení: vytvořit pro vyhledávání Bluetooth zařízení zvláštní třídu implementující interface Runnable. Zjišťování jména vzdáleného zařízení Když jsem aplikaci testoval na různých telefonech, setkal jsem se s problémem zobrazení jména vzdáleného zařízení pomocí funkce getFriedlyName(). U telefonů Nokia Series 60 (lépe vybavené modely většinou s operačním systémem Symbian) se jméno zobrazí správně, zatímco u telefonů Series 40 (méně vybavené, levnější přístroje) dojde k vyhození výjimky a jméno není zobrazeno. Tento problém se mi nepodařilo odstranit, tudíž v případě vyhození výjimky není vypsáno jméno vzdáleného zařízení, ale pouze informace, že bylo nalezeno Zařízení 1, 2, … Zobrazování zpráv na displeji Nejprve jsem měl v plánu zobrazovat zprávy pod sebe, jak to bývá u většiny chatů. Čelil jsem ale problému s rolováním obrazovky. Zprávy se totiž zobrazovaly pod sebe, ale displej neroloval, tudíž po chvíli nebyly nové zprávy vidět. Hledal jsem metodu umožňující posouvání displeje, ale bezvýsledně. Řešení: zobrazuji zprávy nad sebe, tudíž novější zpráva se zobrazí zcela nahoře a odsune starší zprávy níže. Odesílání zpráv streamem Docela dlouho mi trvalo, než jsem přišel na to, jak odeslat zprávu streamem tak, aby přišla ve stejné podobě na druhou stranu. Ačkoliv v emulátoru fungovala téměř každá metoda, kterou jsem použil, na reálném zařízení tomu bylo naopak. Metody write() a read() nefugovaly tak, jak bych potřeboval. Řešení: nakonec jsem použil metodu writeUTF(), sloužící pro odesílání řetězců textu a pro přijetí metodu readUTF(). Po zapsání do streamu se nesmí zapomenout na jeho „vypláchnutí“ pomocí metody flush(). Uložení přezdívky serveru do SDDB Aby bylo možné rozlišit od sebe jednotlivé BT Messenger servery, měl jsem v plánu registrovat u každého v SDDB (Service Discovery Database) jeho přezdívku. Klient by si pak při vyhledávání tuto přezdívku mohl přečíst a vybral by si, ke komu se připojí. Postupoval jsem podle příkladů na Internetu, ale z neznámého důvodu mi aplikace u klienta nikdy jméno nenačetla. Tento problém se mi nepodařilo vyřešit, a tak se místo jména serveru zobrazuje vždy Server 1, 2, … Uložení přezdívky pro další spuštění aplikace Uživatel si na první obrazovce aplikace může změnit svou přezdívku, pokud ji chce mít odlišnou od jména jeho zařízení v Bluetooth. Z důvodu nedostatku času jsem ale neimplementoval ukládání této přezdívky pro další spuštění aplikace. Tudíž je nutné po každém spuštění aplikace znovu přezdívku změnit. V J2ME je totiž práce s ukládáním dat poněkud složitější (pomocí RMS – Record Management Store). Mazání obrazovky Jedno z tlačítek na chatovací obrazovce smaže veškeré zprávy z obrazovky. Při implementaci této funkce jsem ale narazil na problém, že se obrazovka nemazala celá, ale pouze některé prvky. Používal jsem cyklus for, který postupně maže všechny položky na obrazovce. 26
Řešení: výměna cyklu for za cyklus while pomohla pouze na telefonech Nokia, stejný problém přetrvává na telefonech Sony Ericsson Kvalita emulátorů a přenositelnost aplikace Jedním z nejvíce problematických zádrhelů byla hodnověrnost emulátorů. Aplikace, která bez problémů fungovala na emulátoru, se na reálném zařízení chovala úplně jinak. A to i v případě emulátoru od Nokie, který by měl přesně napodobit konkrétní model telefonu. Přenositelnost aplikace je také jedním z atributů, které se u aplikace poměrně těžko zajišťují. Už při spuštění programu na dvou různých telefonech Nokia jsou patrné rozdíly. Někdy jde o kosmetické detaily, v některém případě ale aplikace na jiném telefonu třeba vůbec nefunguje. Proto je nutné, pokud aplikaci nevyvíjíme pouze pro jedno konkrétní zařízení, věnovat svou pozornost co nejvíce zajištění přenositelnosti aplikace. Řešení: vždy je nutné testovat aplikaci i zařízení, pro které ji vyvíjíme. Na emulátor se totiž nedá vždy spolehnout. Co se kompatibility aplikace týče, je dobré používat co nejuniverzálnější metody a objekty. No a samozřejmě testovat program na co nejvíce zařízeních.
9 Závěr Jako téma mé bakalářské práce jsem si zvolil oblast, která je mi blízká, a to mobilní technologie. Programování v J2ME pro mě bylo úplně novou oblastí, tudíž jsem se vše musel učit od začátku. Během práce jsem podrobně seznámil s technologií J2ME a Bluetooth a jejich vzájemným propojením. Než jsem vytvořil první verzi aplikace, musel jsem překonat mnoho implementačních problémů. Za pomoci literatury a Internetu se mi podařilo většinu z nich vyřešit. Jelikož jsem se vše učil od začátku, stala se součástí mé bakalářské práce příručka začínajícího J2ME programátora. Ta popisuje přípravu vývojového prostředí, způsob tvorby midletů a obsahuje odkazy na další materiály k samotné technologii J2ME, resp. Bluetooth. V příručce lze také najít seznam problémů a případných řešení, se kterými jsem se při programování setkal. Aplikace BT Messenger, kterou jsem v rámci bakalářské práce vytvořil, je plně funkční a demonstruje Bluetooth přenosy na mobilních zařízeních. Aplikace je dobře využitelná pro další vývoj. Návrh aplikace je komplexnější a v rámci implementace jsem si vybral jen ty nejdůležitější funkce pro otestování Bluetooth komunikace. Rozšíření aplikace na základě již provedeného návrhu se jeví jako jedna z alternativ zadání diplomové práce. Největším problémem, který mě brzdil při vývoji aplikace BT Messenger, byl nedostatek zařízení s podporou JSR-82, na kterých bych mohl aplikaci testovat a ladit. Přístup k takovýmto zařízením jsem měl pouze po omezený čas, tudíž jsem musel používat emulátory, které ale reálné zařízení nedokáží plně zastoupit. K testování byly potřeba dva, nebo lépe ještě víc telefonů. Budoucí využití aplikace BT Messenger a její případný rozvoj se může ubírat následujícími směry. Zaprvé vytvořit podstatně komplexnější chatovací systém obsahující místnosti, skupiny uživatel, zasílání multimediálních dat, šifrování zpráv, atd. Dalším směrem může být navigování slepých občanů v budovách. Ti by na mobilním telefonu měli nainstalován program, který by hledal zařízení v dosahu a po jejich nalezení by je požádal o identifikaci. Poté by majiteli hlasově reprodukoval, kde se právě nachází. Některý z těchto možných směrů bych se mohl pokusit realizovat v rámci mé diplomové práce. Bluetooth je totiž velmi perspektivní a zajímavá technologie, která nachází a bude nacházet uplatnění v mnoha odvětvích elektroniky.
27
10 Seznam literatury [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
Robert Morrow. Bluetooth operation and use. McGraw-Hill, New York, 2002 C. B. Kumar, P. J. Kline, T. J. Thompson. Bluetooth application Programming with the Java APIs. Elsevier Inc., USA, 2004 C.S.R. Prabhu, Prathap A. Reddi. Bluetooth Technology and Its Applications with JAVA and J2ME. Prentice Hall of India, 2006 Qusay H. Mahmoud. Naučte se Java 2 Micro Edition. GRADA Publishing, Praha, 2002 PDF dokument Developing Applications with the Java APIs for Bluetooth™ (JSR-82), Sony Ericsson, 2004 Vývojářská sekce webových stránek společnosti SUN Microsystems: http://developers.sun.com/ Dokumentace J2ME: http://java.sun.com/javame/reference/docs/index.html Seriál o programování v J2ME na serveru Interval.cz (česky): http://interval.cz/vyvojaplikaci/j2me/ Seriál o programování v J2ME na serveru pcsvet.cz (česky): http://www.pcsvet.cz/java/ Oficiální stránky technologie Bluetooth: http://www.bluetooth.com Specifikace technologie Bluetooth: http://www.bluetooth.org/spec/ Dokumentace Java aplikačního rozhraní JSR-82: http://jcp.org/en/jsr/detail?id=82 Webový portál věnující se programování J2ME aplikací využívajících Bluetooth: http://www.benhui.com Vývojářská sekce webových stránek společnosti Nokia: http://forum.nokia.com Vývojářská sekce webových stránek společnosti Sony Ericsson: http://developer.sonyericsson.com/ Java Community Process: http://www.jcp.org Seznam zařízení podporujících JSR-82: http://www.j2mepolish.org/devices/devices-btapi.html Jiný seznam zařízení podporujících JSR-82: http://www.javabluetooth.com/jsr82devices.html
28
11 Obsah přiloženého CD index.html
výchozí stránka projektu
readme.txt
popis obsahu CD a další informace
install.txt
pokyny k instalaci aplikace BT Messenger
text
adresář obsahující text bakalářské práce BP.pdf
bakalářská práce v pdf dokumentu
BTMessenger bin
adresář projektu BT Messenger přeložená aplikace (java archivy pro její instalaci)
classes lib res src
zdrojové kódy bakalářské práce
tmpclasses tmplib html
soubory stránek projektu
abstrakt index.html
abstrakt
29