Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Bakal´ aˇ rsk´ a pr´ ace GPS framework na platformˇ e Android
Plzeˇ n 2014
Viktor Vaˇsina
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem bakal´aˇrskou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 7. kvˇetna 2014 Viktor Vaˇsina
Abstract GPS framework on Android platform. This work analyzes possibility of determining location of mobile devices, especially for the Android platform. The work describes the locational methods and compares them. Further attention is paid to implementation of these methods on the Android platform. The final part summarizes procedures frequently used during implementation of applications using the position determining. Framework based on mentioned summary seeks to cover the frequently used actions to simplify the implementation of such applications. To better understand and verify functionality this part is finished by proposal and implementation of a sample application using the created framework.
Abstrakt Tato pr´ace je anal´ yzou moˇznost´ı urˇcov´an´ı polohy mobiln´ıch zaˇr´ızen´ı, zejm´ena pro platformu Android. Pr´ace postupnˇe popisuje jednotliv´e lokaˇcn´ı metody a srovn´av´a je. D´ale se zamˇeˇruje na realizaci tˇechto metod na platformˇe Android. V dalˇs´ı ˇc´asti se jsou shrnuty postupy ˇcasto pouˇz´ıvan´e pˇri implementaci aplikac´ı vyuˇz´ıvaj´ıc´ıch urˇcov´an´ı polohy. Na z´akladˇe zm´ınˇen´eho souhrnu je z´aroveˇ n pops´an framework, kter´ y se snaˇz´ı ˇcast´e u ´kony v sobˇe obs´ahnout pro zjednoduˇsen´ı implementace podobn´ ych aplikac´ı. Pro lepˇs´ı pochopen´ı a ovˇeˇren´ı funkˇcnosti je tato ˇca´st zakonˇcena n´avrhem a implementac´ı uk´azkov´e aplikace s vyuˇzit´ım vytvoˇren´eho frameworku.
2
Obsah ´ 1 Uvod
1
2 Reprezentace zpageemˇ episn´ e polohy 2.1 Zemˇepisn´a poloha . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Kartografick´a projekce . . . . . . . . . . . . . . . . . . . . . . 2.2.1 UTM projekce . . . . . . . . . . . . . . . . . . . . . . .
2 2 3 3
3 Metody urˇ cov´ an´ı zemˇ episn´ e polohy 3.1 Triangulace . . . . . . . . . . . . . . . 3.1.1 Triangulace mobiln´ıho zaˇr´ızen´ı . 3.2 GPS . . . . . . . . . . . . . . . . . . . 3.2.1 A-GPS . . . . . . . . . . . . . . 3.2.2 Dalˇs´ı satelitn´ı syst´emy . . . . . 3.3 Dalˇs´ı moˇznosti urˇcov´an´ı polohy . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
4 Vyuˇ zit´ı lokalizace mobiln´ıch zaˇ r´ızen´ı 5 V´ yvoj pro platformu Android 5.1 Lokalizace zaˇr´ızen´ı s OS Android 5.1.1 Google Play Services . . . 5.1.2 Krit´eria . . . . . . . . . . 5.1.3 Tˇr´ıda LocationListener . .
5 5 5 13 14 14 14 16
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
17 17 18 18 19
6 Location Framework 6.1 Modely . . . . . . . . . . . . . . . . . . . . . 6.2 Vizualizace na mapˇe . . . . . . . . . . . . . 6.2.1 Integrace Google Maps Android API 6.2.2 Rozˇsiˇruj´ıc´ı API frameworku . . . . . 6.3 Knihovny . . . . . . . . . . . . . . . . . . . 6.4 Komunikace . . . . . . . . . . . . . . . . . . 6.4.1 Spojen´ı s aplikac´ı . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
23 23 24 25 26 27 28 28
. . . .
. . . .
. . . .
. . . .
. . . .
OBSAH
6.5
OBSAH 6.4.2 Zp˚ usob pˇrenosu . . . . . . . . . . . . . . . . . . . . . . 29 6.4.3 Form´at pˇren´aˇsen´ ych dat . . . . . . . . . . . . . . . . . 31 Integrace frameworku . . . . . . . . . . . . . . . . . . . . . . . 36
7 Aplikace 7.1 Datov´ y model . . . . . . . . 7.2 Pouˇzit´ı frameworku . . . . . 7.3 Komunikace s frameworkem 7.4 Uˇzivatelsk´a dokumentace . . 7.5 Instalace aplikace . . . . . . 7.6 Testov´an´ı . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
38 38 38 40 40 41 41
8 Server 8.1 Struktura serveru . . . . . . 8.1.1 Datab´aze . . . . . . 8.1.2 Instalace datab´aze . 8.1.3 J´adro serveru . . . . 8.1.4 Instalace a spuˇstˇen´ı .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
44 44 45 45 45 46
9 Z´ avˇ er
47
Seznam pouˇ zit´ ych zkratek
48
Zdroje
48
A Adres´ aˇ rov´ a struktura pr´ ace
52
4
´ 1 Uvod C´ılem t´eto pr´ace je sezn´amit ˇcten´aˇre s moˇznostmi lokace mobiln´ıch zaˇr´ızen´ı a vyuˇzit´ım tˇechto technologi´ı v mobiln´ıch aplikac´ıch. V prvn´ı ˇca´sti pr´ace popisuje, co je zemˇepisn´a poloha a jak je reprezentov´ana v pˇr´ıstroj´ıch. N´aslednˇe jsou tyto lokalizaˇcn´ı metody pops´any a porovn´any. D´ıky nabyt´ ym znalostem z prvn´ı ˇca´sti je snazˇs´ı pochopit, jak jsou implementov´any tyto technologie na platformˇe Android. Jelikoˇz v pr˚ ubˇehu pr´ace byly nˇekter´e tyto technologie, resp. jejich implementace, zmˇenˇeny, vˇenuje se pr´ace okrajovˇe i v´ yvoji lokalizace pˇr´ıstroje pod touto platformou. Z´aroveˇ n pr´ace postupnˇe proch´az´ı frameworkem a umoˇzn ˇuje sn´aze pochopit, kter´e funkcionality se v aplikac´ıch ˇcasto pouˇz´ıvaj´ı ˇci jak je lze ˇreˇsit. Pr´ace uvaˇzuje i potˇrebu sd´ılen´ı polohy a jin´ ych informac´ı skrze internetovou s´ıt’. Dalˇs´ı ˇca´st´ı je uk´azkov´a aplikace zaloˇzen´a na frameworku, kter´a bude vyuˇz´ıvat moˇznosti urˇcov´an´ı polohy mobiln´ıch zaˇr´ızen´ı a sd´ılen´ı polohy pˇres webov´ y server. Po pˇreˇcten´ı pr´ace ˇcten´aˇr z´ısk´a pˇredstavu o principech urˇcov´an´ı polohy mobiln´ıch pˇr´ıstroj˚ u a vyuˇzit´ı tˇechto informac´ı. Pr´ace popisuje, jak tato data sd´ılet s dalˇs´ımi mobiln´ımi zaˇr´ızen´ımi ˇci servery a jak jsou vˇsechny tyto funkce zastˇreˇseny operaˇcn´ım syst´emem Android.
1
2 Reprezentace zpageemˇepisn´e polohy Pro urˇcov´an´ı zemˇepisn´e polohy je nutn´e definovat podobu souˇradnic jednoznaˇcnˇe urˇcuj´ıc´ıch polohu bodu na planetˇe.
2.1
Zemˇ episn´ a poloha
Bˇeˇznˇe pouˇz´ıvan´ ym zp˚ usobem pro urˇcen´ı polohy na povrchu planety je vyuˇzit´ı zemˇepisn´e d´elky a ˇs´ıˇrky. Zemˇ episn´ a d´ elka je u ´hel, kter´ y sv´ır´a rovina nult´eho poledn´ıku a poledn´ıku, kter´ y prot´ın´a urˇcovan´ y bod. M˚ uˇze nab´ yvat hodnot od 0◦ do 180◦ . Smˇerem k v´ ychodu od nult´eho poledn´ıku se pouˇz´ıv´a v´ yraz v´ ychodn´ı d´elka, smˇerem na z´apad od nult´eho poledn´ıku naopak z´apadn´ı d´elka. Zemˇ episn´ aˇ s´ıˇ rka je u ´hel, kter´ y sv´ır´a rovina rovn´ıku a pˇr´ımka proch´azej´ıc´ı urˇcovan´ ym bodem a stˇredem planety. Nab´ yv´a hodnot od 0◦ do 90◦ . Od rovn´ıku smˇerem na sever se pouˇz´ıv´a v´ yraz severn´ı ˇs´ıˇrka, smˇerem na jih jiˇzn´ı ˇs´ıˇrka. Tyto dva u ´daje urˇcuj´ı jednoznaˇcnou polohu na povrchu planety. Pro elektronickou reprezentaci jsou ovˇsem nepohodln´e kv˚ uli atribut˚ um svˇetov´ ych stran. Proto se pro elektronickou reprezentaci liˇs´ı. Zemˇepisn´a d´elka nab´ yv´a hodnot od −180◦ (z´apadn´ı polokoule) do 180◦ (v´ ychodn´ı polokoule) a obdobnˇe zemˇepisn´a ˇs´ıˇrka nab´ yv´a hodnot od −90◦ (jiˇzn´ı polokoule) do 90◦ (severn´ı polokoule). D´ıky tomu lze reprezentovat polohu jen pomoc´ı dvou hodnot. Tyto hodnoty ovˇsem mohou m´ıt v´ıce form´at˚ u, pˇriˇcemˇz nejbˇeˇznˇejˇs´ı z nich jsou pops´any v tabulce 2.1. Je jistˇe patrn´e, ˇze pro reprezentaci ve v´ ypoˇcetn´ıch technologi´ıch je nejvhodnˇejˇs´ı form´at DDD a nad´ale bude vyuˇz´ıv´an pr´avˇe tento. Protoˇze se pohybujeme v trojrozmˇern´em (d´ale jen 3D) prostoru, chyb´ı jeˇstˇe jedna souˇradnice. Chybˇej´ıc´ı souˇradnic´ı je nadmoˇrsk´a v´ yˇska, kter´a je reprezentov´ana kladnou hodnotou nad povrchem Zemˇe, resp. hladinou oce´anu, a z´apornˇe pod hladinou. 2
Reprezentace zpageemˇepisn´e polohy
Kartografick´a projekce
Tabulka 2.1: Nejzn´amˇejˇs´ı zp˚ usoby z´apisu zemˇepisn´ ych souˇradnic. Zkratka Z´apis Popis DMS 49◦ 300 3000 z´apis stupˇ n˚ u, minut a sekund tak, jak jsme zvykl´ı DMM 49 30.5 minuty zaps´any dekadicky DDD 49.508333 stupnˇe zaps´any dekadicky Zkratky jsou odvozen´e z anglick´ ych slov pro stupnˇe (Degrees), minuty (Minutes) a sekundy (Seconds). [5]
2.2
Kartografick´ a projekce
Pokud zn´ame polohu bodu, je ˇcasto vhodn´e ji uˇzivateli nˇejak zn´azornit. Pap´ırov´e mapy i obrazovky zaˇr´ızen´ı jsou ale ploch´e. Zde nastupuje nutnost projekce, tedy proces zobrazen´ı povrchu 3D tˇelesa na 2D plochu. Stejnˇe jako tenisov´ y m´ıˇcek nelze rozvinout do roviny bez deformac´ı, nelze takto rozvinout ani povrch geoidu (matematicky popsan´e tˇeleso, kter´e nejv´ıce odpov´ıd´a re´aln´emu tvaru naˇs´ı planety) ˇci jin´eho zjednoduˇsen´eho referenˇcn´ıho tˇelesa, jako je elipsoid nebo koule. Proto se postupem ˇcasu vyvinuly projekce, kter´e pˇrev´ad´ı povrch takov´ ych referenˇcn´ıch tˇeles na povrchy tˇeles, kter´e jiˇz jsou rozvinuteln´e do roviny, jako je napˇr. v´alec. Vˇzdy doch´az´ı k deformac´ım a ztr´atˇe pˇresnosti, ale v z´avislosti na zvolen´em zobrazen´ı se deformuj´ı v´ıce vzd´alenosti nebo u ´hly v r˚ uzn´ ych ˇca´stech planety. Anal´ yza kartografick´ ych zobrazen´ı vˇsak nen´ı pˇredmˇetem t´eto pr´ace. Z tohoto d˚ uvodu bude nast´ınˇena pouze UTM projekce.
2.2.1
UTM projekce
Zkratka UTM vznikla z ang. Universal Transverse Mercator projection[4]. Mercatorova projekce patˇr´ı mezi v´alcov´a zobrazen´ı. Jej´ım z´akladem je zobrazen´ı povrchu Zemˇe na v´alec, kter´ y je elipsoidu teˇcn´ y v m´ıstˇe rovn´ıku, a jeho osa je totoˇzn´a s osou planety. Z tohoto postupu vypl´ yv´a, ˇze zobrazen´ı je nevhodn´e pro zobrazen´ı pol´arn´ıch oblast´ı. Pˇr´ıvlastek transverz´aln´ı znamen´a, ˇze v´alec nen´ı teˇcn´ y v m´ıstˇe rovn´ıku, ale v m´ıstˇe zvolen´eho poledn´ıku. Gaussovo zobrazen´ı (Mercatorovo transverz´aln´ı) se od UTM liˇs´ı jiˇz jen nˇekolika konstantami a typem referenˇcn´ıho elipsoidu UTM nen´ı pouze zobrazen´ı elipsoidu na v´alec. Je to s´ıt’ vznikl´a zobrazen´ım ˇsedes´ati z´on po 6◦ zobrazen´ ych pomoc´ı transverz´aln´ıho Mercatorova 3
Reprezentace zpageemˇepisn´e polohy
Kartografick´a projekce
zobrazen´ı. Takto byl syst´em vyvinut v roce 1947 arm´adou Spojen´ ych st´at˚ u americk´ ych pro tvorbu vojensk´ ych map. Dnes UTM vyuˇz´ıv´a mj. i spoleˇcnost Google pro tvorbu sv´ ych map. T´ım se toto zobrazen´ı t´ yk´a i t´eto pr´ace, protoˇze j´ım je dan´e omezen´ı souˇradnic. Podklady Google Map jsou d´ıky UTM omezeny, co se t´ yˇce zemˇepisn´e ˇs´ıˇrky, pˇribliˇznˇe od −85◦ do 85◦ [6]. Pouˇzit´ı UTM tak´e osvˇetluje moˇzn´e odchylky v souˇradnic´ıch z´ıskan´ ych za pomoci jin´eho zobrazen´ı.
4
3 Metody urˇcov´an´ı zemˇepisn´e polohy Nyn´ı jiˇz m´ame moˇznost, jak popsat pozici na planetˇe, pokud zrovna drˇz´ıme v ruce mapu. Jak ale z´ıskat souˇradnice m´ısta, kde pr´avˇe stoj´ıme? Za t´ımto u ´ˇcelem se bˇehem let vyvinulo nˇekolik strategi´ı, od primitivn´ıch, jako je znalost noˇcn´ı oblohy a roˇcn´ıho obdob´ı, po dokonalejˇs´ı, kterou je napˇr´ıklad GPS. Jelikoˇz jsou primitivn´ı strategie pro naˇsi pr´aci nepouˇziteln´e, nebudeme se jimi v˚ ubec zab´ yvat. Pro urˇcov´an´ı polohy se dnes pouˇz´ıvaj´ı zejm´ena triangulace a satelitn´ı pozicov´an´ı a jejich dalˇs´ı deriv´aty.
3.1
Triangulace
Jak n´azev napov´ıd´a, metody zaloˇzen´e na triangulaci vyuˇz´ıvaj´ı matematick´ ych znalost´ı o troj´ uheln´ıc´ıch. Historicky se vyvinuly pravdˇepodobnˇe z d˚ uvodu, ˇze se v ter´enu l´epe mˇeˇril u ´hel neˇz vzd´alenost. Napˇr´ıklad vzd´alenost c´ıle od hradeb ˇsla odvodit ze znalosti vzd´alenosti dvou hradn´ıch vˇeˇz´ı a u ´hlem mezi hradbou a c´ılem, jak je zn´azornˇeno na obr´azku 3.1. S takto zmˇeˇren´ ymi u ´hly z obou vˇeˇz´ı lze skrze vˇetu o velikosti souˇctu vnitˇrn´ıch u ´hl˚ u odvodit posledn´ı u ´hel. Znalost vˇsech tˇr´ı u ´hl˚ u a d´elky jedn´e strany troj´ uheln´ıku je na v´ ypoˇcet ostatn´ıch stran, popˇr´ıpadˇe v´ yˇsek troj´ uheln´ıku postaˇcuj´ıc´ı. A vzd´alenost c´ıle od hradby je ve skuteˇcnosti jednou z v´ yˇsek troj´ uheln´ıku. Obdobn´e postupy lze aplikovat i dnes, pokud jsou zn´amy zemˇepisn´e souˇradnice referenˇcn´ıch bod˚ u. Ve v´ yˇse zm´ınˇen´em pˇr´ıkladu by tedy staˇcilo nav´ıc zn´at souˇradnice obou vˇeˇz´ı. Triangulace se proto pouˇz´ıv´a i dnes napˇr´ıklad pˇri vytv´aˇren´ı map, kdy se vyuˇz´ıvaj´ı pevnˇe stanoven´e geodetick´e body. Dalˇs´ım vyuˇzit´ım je lokalizace mobiln´ıch zaˇr´ızen´ı.
3.1.1
Triangulace mobiln´ıho zaˇ r´ızen´ı
Mobiln´ı s´ıtˇe jsou zaloˇzeny na s´ıti vys´ılaˇc˚ u. Tyto vys´ılaˇce jsou pevn´a stanoviˇstˇe a oper´atoˇri znaj´ı jejich polohu. Vˇsechny vys´ılaˇce maj´ı svou unik´atn´ı identifikaci (d´ale jen Cell ID) a tuto lze sp´arovat s polohou. Pokud je telefon v dosahu sign´alu, je pˇripojen na jeden z vys´ılaˇc˚ u, z kter´eho kromˇe dat z´ısk´av´a i Cell ID. Telefon jakoˇzto pˇrij´ımaˇc je schopn´ y poskytnout i u ´daj o s´ıle sign´alu. Vys´ılaˇc vys´ıl´a do vˇsech smˇer˚ u nebo sektorovˇe, takˇze je-li zanedb´ana 5
Metody urˇcov´an´ı zemˇepisn´e polohy
Triangulace
q
da · db
(3.1)
v = tan α · da
(3.2)
v=
Obr´azek 3.1: V´ ypoˇcet vzd´alenosti c´ıle od hradeb. Vzorec 3.1 demonstruje vyuˇzit´ı Eukleidovy vˇety, vzorec 3.2 vyuˇzit´ı funkce tangens pro pravo´ uhl´ y troj´ uheln´ık.
6
Metody urˇcov´an´ı zemˇepisn´e polohy
Triangulace
nadmoˇrsk´a v´ yˇska z´ısk´av´ame kruh, resp. kruhovou v´ yseˇc znaˇc´ıc´ı dosah sign´alu vys´ılaˇce.
3.1.1.a
GSM s´ıt’
GSM s´ıt’ (z fr. Global Sp´ecial Mobile) se stala z´akladn´ım kamenem v mobiln´ıch komunikac´ıch, d´ıky nˇemuˇz vznikly dneˇsn´ı modern´ı standardy. Je zaloˇzena na vys´ılaˇc´ıch (BTS) a mobiln´ıch telefonech (MT) jakoˇzto pˇrij´ımaˇc´ıch a dalˇs´ıch prvc´ıch. Pro naˇse u ´ˇcely je d˚ uleˇzit´e pr´avˇe komunikace mezi MT a BTS. BTS jsou osazeny vys´ılaˇci s v´ıce frekvencemi, nav´ıc jsou tyto vys´ılaˇce zpravidla smˇerov´e (obr. 3.2), vˇsesmˇerov´e vys´ılaˇce jiˇz nejsou tak bˇeˇzn´e. Komunikace funguje obdobnˇe jako u vys´ılaˇcek. Na jedn´e frekvenci tedy m˚ uˇze ve stejn´ y okamˇzik vys´ılat pouze jeden pˇr´ıstroj. Takto by mohl vys´ılaˇc obsluhovat velmi m´alo MT, protoˇze frekvence nelze navyˇsovat libovolnˇe. V pˇr´ıpadˇe, ˇze by dvˇe sousedn´ı BTS vyuˇz´ıvaly stejnou frekvenc,i doch´azelo by k interferenci. Proto je v GSM pouˇzit jeˇstˇe ˇcasov´ y multiplex. T´ım, ˇze vys´ılaˇc rozdˇel´ı pˇr´ıjem sign´alu na ˇcasov´a ok´enka, tzv. time sloty (TS), m˚ uˇze na jedn´e frekvenci obsluhovat v´ıce MT. MT nahr´av´a a n´aslednˇe komprimuje n´aˇs hlas po u ´sec´ıch a odes´ıl´a komprimovanˇe na BTS v pˇridˇelen´ ych TS. BTS naslouch´a v kaˇzd´em TS pr´avˇe jednomu MT a ostatn´ı ignoruje. Pˇri komunikace z BTS do MT je syst´em analogick´ y. Komunikace tedy nen´ı spojit´a, ale funguje na principu ”kaˇzd´ y chvilku tah´a pilku”. Protoˇze jsou TS tak kr´atk´e, hraje v pˇrenosu roli uˇz i vzd´alenost mezi BTS a MT. MT tak mus´ı pˇri vˇetˇs´ı vzd´alenosti vys´ılat data v pˇredstihu. Kv˚ uli tomu mus´ı BT a MT zn´at vzd´alenost mezi sebou. Vzd´alenost se v GSM urˇcuje pomoc´ı timing advance (TA). Tento parametr nab´ yv´a hodnot od 0 aˇz do 63 a rozdˇeluje dosah vys´ılaˇce na p´asma po 550 metrech. Vyn´asoben´ım zjist´ıme, ˇze v GSM se uvaˇzuje maxim´aln´ı vzd´alenost od vys´ılaˇce 35 km kv˚ uli rostouc´ı odchylce TA.
3.1.1.b
Urˇ cen´ı polohy jedn´ım vys´ılaˇ cem
Pokud zn´ame Cell ID vys´ılaˇce, lze zjistit i jeho polohu a dosah. T´ım jiˇz z´ısk´ame pojem o poloze s pˇresnost´ı nˇekolika kilometr˚ u. Pokud bychom znali i v´ ykon BTS, m˚ uˇzeme uv´aˇzit i fakt, ˇze s´ıla sign´alu spolu se vzd´alenost´ı kles´a. 7
Metody urˇcov´an´ı zemˇepisn´e polohy
Triangulace
To pˇrin´aˇs´ı dalˇs´ı zpˇresnˇen´ı v podobˇe zjiˇstˇen´ı mezikruˇz´ı, ve kter´em se pˇr´ıstroj nach´az´ı. Dalˇs´ı a pouˇz´ıvanˇejˇs´ı moˇznost´ı zpˇresnˇen´ı je vyuˇzit´ı TA parametru. Telefon poskytuje softwarov´e vrstvˇe jak TA, tak Cell ID. Se znalost´ı pozice BTS a vzd´alenosti od n´ı urˇc´ıme jiˇz mezikruˇz´ı, ve kter´em se MT pohybuje. V pˇr´ıpadˇe, ˇze je vys´ıl´an´ı BTS rozdˇeleno na v´ıce sektor˚ u, lze pr˚ unikem kruhov´e v´ yseˇce a mezikruˇz´ı polohu jeˇstˇe zpˇresnit. Z popisu metody je patrn´e, ˇze se o triangulaci jako takovou nejedn´a.
3.1.1.c
Urˇ cen´ı polohy dvˇ ema vys´ılaˇ ci
Tato metoda vych´az´ı z pˇredchoz´ı. Data o BTS nav´ıc umoˇzn ˇuj´ı zpˇresnˇen´ı, protoˇze dvˇe z´ony se nˇekde protnou. V ide´aln´ım pˇr´ıpadˇe vznikne pr˚ unikem jedin´a relativnˇe mal´a oblast a v oblastech vˇetˇs´ıch mˇest jiˇz m˚ uˇzeme z´ıskat pˇresnost v ˇra´dech stovek metr˚ u. V horˇs´ım pˇr´ıpadˇe se mezikruˇz´ı protnou a vzniknou dvˇe oddˇelen´e oblasti. V takov´em pˇr´ıpadˇe je nutn´e z´ıskat nˇejak´ y pomocn´ y bod, aby bylo moˇzn´e urˇcit, kter´a oblast je n´ami hledan´a. Dalˇs´ı moˇznost´ı je upustit od mezikruˇz´ı a jako v´ yslednou oblast ch´apat pr˚ unik kruh˚ u dosahu sign´al˚ u (viz obr. 3.3). Jako v´ ysledn´a pozice se vol´ı geometrick´ y stˇred oblasti.
3.1.1.d
Urˇ cen´ı polohy v´ıce vys´ılaˇ ci
ˇ ım v´ıce vys´ılaˇc˚ C´ u je k dispozici, t´ım menˇs´ı je oblast vznikl´a pr˚ unikem sign´al˚ u (viz obr. 3.4).
3.1.1.e
Wi-Fi m´ısto mobiln´ı s´ıtˇ e
V´ yˇse zm´ınˇen´e postupy jsou pouˇziteln´e pouze pro MT. Zaˇr´ızen´ı bez moˇznosti pˇr´ıjmu s´ıt’ov´eho sign´alu mohou vyuˇz´ıvat Wi-Fi, kter´a m´a podobn´e vlastnosti. Nav´ıc dosah sign´alu je menˇs´ı a tedy je pˇresnˇejˇs´ı. Proto lze k lokalizaci vyuˇz´ıvat obdobnˇe i Wi-Fi sign´al. Wi-Fi je standard lok´aln´ıch bezdr´atov´ ych s´ıt´ı dle specifikace IEEE 802.11. Vys´ılaˇc pˇripojen´ y k internetu zprostˇredkov´av´a zaˇr´ızen´ım v bl´ızk´em okol´ı bezdr´atov´ y pˇr´ıstup k s´ıti. Bˇeˇznˇe jsou vyuˇz´ıv´ana p´asma 2,4 a 5 GHz. Vys´ılaˇc je sd´ılen´ y pro pˇripojen´a zaˇr´ızen´ı a proto pouˇz´ıv´a protokol CSMA/CA. Pˇr´ıstupov´ y bod Wi-Fi je v jist´em smyslu podobn´ y BTS. Lze jej identifikovat dle jeho MAC adresy a d´ıky tomu lze vytv´aˇret datab´aze pozic pˇr´ıstupov´ ych bod˚ u. 8
Metody urˇcov´an´ı zemˇepisn´e polohy
Triangulace
Obr´azek 3.2: Typy vys´ılaˇc˚ u.
Obr´azek 3.3: Pr˚ uniky dosah˚ u vys´ılaˇc˚ u.
9
Metody urˇcov´an´ı zemˇepisn´e polohy
Triangulace
Obr´azek 3.4: Oblast pr˚ uniku sign´al˚ u zpˇresnˇen´a TA a u ´hlem.
Bod C pˇredstavuje BTS a u ´hel F 0 CF pˇredstavuje sign´al jednoho smˇerov´eho vys´ılaˇce. Bod F je ve vzd´alenosti maxim´aln´ıho dosahu BTS C. Oblouk KCK 0 tvoˇr´ı vnitˇrn´ı hranici TA, oblouk LCL0 hranici vnˇejˇs´ı. Obdobnˇe je to pro BTS A a B. V ˇcerven´e oblasti se nech´az´ı MT.
10
Metody urˇcov´an´ı zemˇepisn´e polohy
3.1.1.f
Triangulace
Shrnut´ı
Metoda je nen´aroˇcn´a na zdroje zejm´ena z pohledu baterie. Pro rychl´e zjiˇstˇen´ı polohy s vˇetˇs´ı pˇr´ıpustnou odchylkou je velmi vhodn´a. V porovn´an´ı s GPS kr´atce po zapnut´ı GPS na pˇr´ıstroji ˇci v oblastech s velk´ ym poˇctem vysok´ ych budov je dokonce pˇresnˇejˇs´ı a rychlejˇs´ı neˇz GPS, zejm´ena vyuˇz´ıv´a-li ke zjiˇstˇen´ı polohy Wi-Fi. Nev´ yhodou je velk´a nepˇresnost v oblastech s menˇs´ım poˇctem vys´ılaˇc˚ u. Jen m´alo zaˇr´ızen´ı zpˇr´ıstupˇ nuje seznam BTS v dosahu i softwarov´e vrstvˇe. V drtiv´e vˇetˇsinˇe pˇr´ıpad˚ u jsou softwaru zpˇr´ıstupnˇeny pouze u ´daje o aktu´alnˇe pˇripojen´e BTS a t´ım lze vyuˇz´ıt pouze prvn´ı metodu. Zemˇepisn´e souˇradnice BTS a jejich v´ ykon oper´atoˇri neposkytuj´ı. Je tedy nutn´a jin´a datab´aze, bud’ intern´ı v pˇr´ıstroji nebo pˇr´ıstupn´a skrz internet. Pˇr´ıklady takov´ ych datab´az´ı resp. sluˇzeb jsou zaneseny v tabulce 3.1.
11
Metody urˇcov´an´ı zemˇepisn´e polohy
Triangulace
Tabulka 3.1: Poskytovatel´e souˇradnic vys´ılaˇc˚ u. N´azev Dostupnost Pozn´amky Geolocation API Placen´e (ceny aˇz Poskytuje souˇradnice na z´a(Google) po kontaktu s pro- kladˇe JSON dotazu na webodejcem) vou sluˇzbu. Operuje s Cell ID i Wi-Fi MAC adresou. Dalˇs´ı parametry jsou nepovinn´e a slouˇz´ı ke zpˇresnˇen´ı polohy. Aktu´aln´ı poˇcet z´aznam˚ u v datab´azi nen´ı zn´am. [11] Navizon Placen´e (ceny aˇz Nab´ız´ı nejen urˇcov´an´ı polohy po kontaktu s pro- pˇres Wi-Fi a mobiln´ı s´ıtˇe dejcem) mimo budovy, ale tak´e tzv. Indoor ˇreˇsen´ı pro urˇcen´ı polohy uvnitˇr budov na z´akladˇe WiFi sign´alu. Sluˇzba funguje obdobnˇe jako v´ yˇse zm´ınˇen´a pˇres HTTP protokol. Aktu´aln´ı poˇcet z´aznam˚ u v datab´azi nen´ı zn´am.[12] Location Api Placen´e (cena od Sluˇzba opˇet funguje na b´azi (Unwired Labs) 145$/mˇes´ıc) JSON dotaz˚ u na servery. Zamˇeˇruje se pouze na mobiln´ı Cell ID. Datab´aze ˇc´ıt´a 43.7 mil. z´aznam˚ u a st´ale roste.[13] OpenCellID Bezplatn´e Sluˇzba se zamˇeˇruje pouze na mobiln´ı Cell ID. Data jsou volnˇe dostupn´a ve formˇe aktualizovan´ ych csv soubor˚ u inkrement´alnˇe, tj. neni nutn´e pokaˇzd´e stahovat celou datab´azi. Pokud se tedy importuje datab´aze pˇr´ımo do pˇr´ıstroje, lze tato data vyuˇz´ıvat kompletnˇe bez vyuˇzit´ı internetu, coˇz je proti pˇredeˇsl´ ym v´ yhoda. Navzdory faktu, ˇze se jedn´a o datab´azi rozˇsiˇrovanou dobrovoln´ıky, pˇres´ahl poˇcet z´aznam˚ u jiˇz 4 mil.[22] 12
Metody urˇcov´an´ı zemˇepisn´e polohy
3.2
GPS
GPS
Global Positioning System [9] spravovan´ y Spojen´ ymi st´aty americk´ ymi vyuˇz´ıv´a jako j´adro 24 satelit˚ u krouˇz´ıc´ıch kolem Zemˇe po r˚ uzn´ ych orbit´ach ve v´ yˇsce pˇribliˇznˇe 20 000 km. Dnes krouˇz´ı kolem Zemˇe v´ıce tˇechto satelit˚ u jak kv˚ uli zlepˇsen´ı pˇr´ıstupnosti, tak kv˚ uli obmˇenˇe satelit˚ u. Satelity mj. obsahuj´ı velmi pˇresn´e atomov´e hodiny. Satelity vys´ılaj´ı, data z nichˇz je ˇc´ast ˇsifrovan´a. Veˇrejn´a ˇca´st je pro civiln´ı u ´ˇcely, ˇsifrovan´a je pro vojensk´e. D´ıky tomu si Spojen´e st´aty ponechaly moˇznost napˇr. doˇcasnˇe sn´ıˇzit pˇresnost civiln´ı navigace v pˇr´ıpadˇe konfliktu. Z´akladn´ı sloˇzkou vys´ılan´eho sign´alu je ˇcasov´a znaˇcka poch´azej´ıc´ı z hodin. Protoˇze se satelity pohybuj´ı po deterministick´ ych orbit´ach, je moˇzn´e dle ˇcasov´e znaˇcky a podpisu satelitu urˇcit, odkud sign´al pˇriˇsel. D´ıky vzd´alenosti doch´az´ı ke zpoˇzdˇen´ı sign´alu. Pˇrij´ımaˇc GPS pˇrijme ˇcasovou znaˇcku a porovn´a ji se sv´ ym vnitˇrn´ım ˇcasem. Z rozd´ılu je schopen spoˇc´ıtat vzd´alenost. Pokud tedy pˇrij´ımaˇc zachyt´ı sign´al od 3 nebo v´ıce satelit˚ u, je schopen urˇcit svou polohu obdobnˇe jako u triangulace BTS sign´alu. Ve skuteˇcnosti zn´ame body ˇ ım v´ıce sign´al˚ a vzd´alenosti od nich, ˇc´ımˇz z´ısk´av´ame pr˚ unik 3 ˇci v´ıce koul´ı. C´ u, t´ım bude poloha pˇresnˇejˇs´ı. Je patrn´e, ˇze tato metoda m´a sv´e nedostatky. Jedn´ım z nich je fakt, ˇze pˇri pˇrenosu sign´alu m˚ uˇze doj´ıt ke zpoˇzdˇen´ı kv˚ uli odrazu o pˇrek´aˇzku, jak se tomu dˇeje hlavnˇe v zastavˇen´ ych oblastech. Na v´ ypoˇcet m´a vliv tak´e to, je-li pˇrij´ımaˇc v pohybu. V neposledn´ı ˇradˇe je problematick´ y i fakt, ˇze hodiny pˇrij´ımaˇce nejsou tak pˇresn´e jako atomov´e hodiny druˇzice. Syst´em tedy nejl´epe funguje v m´ıstech s dobr´ ym v´ yhledem na oblohu. Z toho vypl´ yv´a, ˇze pˇri pouˇzit´ı v budov´ach chyba nar˚ ust´a nebo se dokonce nepovede spojit s dostateˇcn´ ym poˇctem satelit˚ u. Dalˇs´ım probl´emem je skuteˇcnost, ˇze po zapnut´ı GPS MT netuˇs´ı o pozic´ıch satelit˚ u nic. Ze zachycen´ ych sign´al˚ u mus´ı zjistit, o jak´ y satelit se jedn´a a odkud vys´ıl´a. Tyto v´ ypoˇcty slouˇz´ı k urˇcen´ı, kter´e satelity mohou b´ yt vyuˇzity ke stanoven´ı polohy. V´ ypoˇcty trvaj´ı dlouho, takˇze GPS pˇrij´ımaˇc je nˇejakou dobu po zapnut´ı neschopn´ y urˇcit polohu. Sloˇzit´e v´ ypoˇcty nav´ıc spotˇrebov´avaj´ı cennou energii z baterie.
13
Metody urˇcov´an´ı zemˇepisn´e polohy
3.2.1
Dalˇs´ı moˇznosti urˇcov´an´ı polohy
A-GPS
ˇ sen´ı je tzv. asistovan´a GPS. Zaˇr´ızen´ı vybaven´a touto technologi´ı vyuˇz´ıvaj´ı Reˇ internet k tomu, aby odeslala zachycen´e sign´aly a pˇribliˇznou polohu dle BTS na stroj s daleko vˇetˇs´ım v´ ykonem. Ten jiˇz vrac´ı informace o poloh´ach satelit˚ u a jejich vhodnosti k urˇcen´ı polohy. T´ımto krokem se uˇsetˇr´ı energie a zkr´at´ı ˇcas nutn´ y k nastartov´an´ı GPS pˇrij´ımaˇce.
3.2.2
Dalˇ s´ı satelitn´ı syst´ emy
GPS nen´ı jedin´ y syst´em sv´eho druhu. V Rusku vznikl GLONASS [10] sest´avaj´ıc´ı z 24 satelit˚ u, kter´e se pohybuj´ı ve v´ yˇsce 19 000 km. Syst´em byl p˚ uvodnˇe vyvinut tak´e jako vojensk´ y. Dalˇs´ım krokem tedy bylo nasazen´ı pˇrij´ımaˇc˚ u, kter´e jsou schopn´e vyuˇz´ıvat k urˇcen´ı polohy jak satelity GLONASS, tak satelity GPS. V´ıce satelit˚ u znamen´a v´ıce sign´al˚ u a tedy vˇetˇs´ı pravdˇepodobnost, ˇze zkouman´ y sign´al bude vhodn´ y k urˇcen´ı polohy a MT se na nˇej m˚ uˇze zamknout a to pˇrin´aˇs´ı rychlejˇs´ı start lokalizace. Dalˇs´ı v´ yhodou je zpˇresnˇen´ı urˇcen´ı polohy. Dalˇs´ım takov´ ym syst´emem je Galileo [8]. Jedn´a se o evropsk´ y ekvivalent GPS a GLONASS, kter´ y nen´ı vojensk´ y a spravuje jej v´ıce evropsk´ ych st´at˚ u. Syst´em je pl´anov´an pro 30 satelit˚ u, ale v aktivn´ım provozu jsou zat´ım 4.
3.3
Dalˇ s´ı moˇ znosti urˇ cov´ an´ı polohy
MT v dneˇsn´ı dobˇe obsahuj´ı mimo jin´e i r˚ uzn´e senzory. Polohov´ e urˇcuj´ıc´ı aktu´aln´ı polohu, resp. n´aklon zaˇr´ızen´ı. Pohybov´ e urˇcuj´ıc´ı vektor zrychlen´ı zaˇr´ızen´ı pˇri pohybu. Magnetometrick´ e supluj´ıc´ı kompas. Jin´ e mˇeˇr´ıc´ı napˇr. teplotu, u ´roveˇ n svˇetla ˇci vlhkost. Vyuˇzit´ı kompasu jako takov´eho asi nen´ı nutn´e popisovat. Zaj´ımavˇejˇs´ı je ovˇsem senzor detekuj´ıc´ı vektor zrychlen´ı. Tento zp˚ usob vyuˇz´ıvaj´ı napˇr´ıklad 14
Metody urˇcov´an´ı zemˇepisn´e polohy
Dalˇs´ı moˇznosti urˇcov´an´ı polohy
nˇekter´e navigace v pˇr´ıpadˇe, ˇze vypadne sign´al GPS. Posledn´ı zn´amou pozici a rychlost uvaˇzuj´ı jako v´ ychoz´ı bod. Dalˇs´ı pohyb je vypoˇc´ıt´av´an pomoc´ı vektoru zrychlen´ı pˇr´ıstroje. Jedn´a se pouze o v´ ypoˇcet pˇribliˇzn´eho pohybu, protoˇze senzory v MT jsou pro tuto metodu dosti nepˇresn´e. S´am jsem provedl pokus a mˇeˇril hodnoty vektoru zrychlen´ı u MT leˇz´ıc´ıch nehybnˇe na podloˇzce. Vˇsechny smˇerov´e sloˇzky vektoru kmitaly a neustalovaly se. Tato metoda nav´ıc nepoˇc´ıt´a s jevy, jako je setrvaˇcnost pohybu, takˇze pˇri prudˇs´ım brzdˇen´ı vznik´a dalˇs´ı nepˇresnost pokud nen´ı telefon pevnˇe spojen s automobilem. Pro pouˇzit´ı v pˇeˇs´ı navigaci by musela b´ yt aplikace pˇrizp˚ usobena konkr´etn´ımu uˇzivateli, aby byla schopna rozpoznat napˇr. ch˚ uzi do schod˚ u, bˇeh apod. Toho by bylo moˇzn´e doc´ılit uˇcen´ım aplikace v ter´enu. Nicm´enˇe i v tomto pˇr´ıpadˇe by se projevily nepˇresnosti senzoru. Tento typ urˇcov´an´ı polohy by mohl poslouˇzit jako z´aklad dalˇs´ı pr´ace a nebude zde jiˇz d´ale rozeb´ır´an. Popsan´e metody jsou ˇcasto zahrnut´e v API syst´em˚ u zaˇr´ızen´ı, takˇze v´ yvoj´aˇr pouze mus´ı zv´aˇzit, kterou z metod pouˇz´ıt a API n´aslednˇe vr´at´ı zemˇepisnou polohu.
15
4 Vyuˇzit´ı lokalizace mobiln´ıch zaˇ r´ızen´ı Moˇznost´ı vyuˇzit´ı lokalizace MT je mnoho a urˇcitˇe nedok´aˇzu postihnout vˇsechny. Pokus´ım se tedy pˇribl´ıˇzit ty, kter´e povaˇzuji za nejv´ yznamnˇejˇs´ı. Navigace uˇzivatele mezi stanoven´ ymi body at’ pˇri j´ızdˇe autem, na kole nebo pˇri ch˚ uzi. MT dnes dok´aˇz´ı nahradit navigaˇcn´ı pˇr´ıstroje. Toto vyuˇzit´ı je limitov´ano bateri´ı (zejm´ena v pˇr´ıpadˇe vyuˇzit´ı pro cyklistiku a pˇeˇs´ı ch˚ uzi) a objemem stahovan´ ych dat. Navigace pro telefony jsou totiˇz v z´akladˇe dvoj´ıho typu: • Online vyuˇz´ıvaj´ıc´ı sluˇzby na internetu jako zdroj grafiky i pro v´ ypoˇcty. • Offline prov´adˇej´ıc´ı v´ ypoˇcty na pˇr´ıstroji a vyuˇz´ıvaj´ıc´ı mapov´e podklady uloˇzen´e na pˇr´ıstroji. Geocoding je proces, pˇri kter´em jsou adresy, n´azvy podnik˚ u nebo firem ˇci jin´a kl´ıˇcov´a slova pˇrev´adˇena na zemˇepisn´e souˇradnice. Stejnˇe jako u navigace mohou b´ yt zdroje online i offline. Reverzn´ı geocoding je opak pˇredchoz´ıho procesu. K zadan´ ym zemˇepisn´ ym souˇradnic´ım jsou vyhled´av´any ulice anebo tzv. POI (points of interest) body, coˇz jsou firmy, kav´arny, muzea atd. C´ılen´ a reklama, kdy je na reklamn´ı plochy uvnitˇr aplikac´ı umist’ov´an reklamn´ı obsah firem z bl´ızk´eho okol´ı. Sd´ılen´ı polohy s jin´ ymi uˇzivateli stejn´e aplikace. Tento princip nach´az´ı vyuˇzit´ı napˇr. v seznamk´ach, hl´ıd´an´ı dˇet´ı rodiˇci nebo hl´ıd´an´ı zamˇestnanc˚ u atp.
16
5 V´yvoj pro platformu Android Protoˇze OS Android vyvinula a vyv´ıj´ı spoleˇcnost Google, ta sam´a spoleˇcnost d´av´a k dispozici i v´ yvojov´e n´astroje. Dlouhou dobu byly tyto n´astroje zˇrejmˇe jedinou pouˇzitelnou variantou. Tato situace se ale zmˇenila. Objevuj´ı se dalˇs´ı moˇznosti, jak vyv´ıjet pro tuto platformu. Android SDK nejrozˇs´ıˇrenˇejˇs´ı a nejzn´amˇejˇs´ı zp˚ usob, jak vyv´ıjet aplikace pro Android. Jako jazyk se vyuˇz´ıv´a Java. Spolu s dalˇs´ımi bal´ıˇcky (napˇr. emul´atory, lad´ıc´ı n´astroje) tvoˇr´ı plugin pro v´ yvojov´e prostˇred´ı Eclipse. Dalˇs´ı moˇznost´ı je st´ahnout si rovnou upravenou verzi Eclipse, tzv. ADT Bundle nebo alternativu Android Studio, coˇz je upraven´a verze IntelliJ IDEA. Android NDK umoˇzn ˇuj´ıc´ı implementaci nativn´ıho k´odu v C nebo C++. Tyto n´astroje Google doporuˇcuje pouˇz´ıvat s rozmyslem, protoˇze zejm´ena spr´ava pamˇeti nen´ı na OS Android jednoduch´a. Vhodn´e vyuˇzit´ı nach´az´ı pro n´aroˇcn´e u ´koly pro procesor s minimem alokovan´e pamˇeti. Xamarin umoˇzn ˇuj´ıc´ı v´ yvoj aplikac´ı v jazyce C# a s prostˇredky .NET. Jako v´ yvojov´e prostˇred´ı lze vyuˇz´ıt Visual Studio. Nav´ıc umoˇzn ˇuje i pˇrenositelnost aplikac´ı mezi OS Android, iOS a Windows. Qt velmi popul´arn´ı framework pro implementaci uˇzivatelsky pˇr´ıjemn´ ych aplikac´ı v C++. Nyn´ı lze tuto technologii vyuˇz´ıt i pro implementaci aplikac´ı pro Android. I zde je moˇzn´a pˇrenositelnost. PhoneGap je framework umoˇzn ˇuj´ıc´ı skrze zn´am´e technologie CSS, HTML a Javascript pˇristupovat k API r˚ uzn´ ych syst´em˚ u, jako je Android, iOS, Symbian a dalˇs´ı. Android SDK je nejrozˇs´ıˇrenˇejˇs´ım n´astrojem a je tedy i nejl´epe dokumentov´an ([1], [2]), proto bude ve zb´ yvaj´ıc´ı ˇca´sti pr´ace pouˇz´ıv´ana pr´ave tato technologie.
5.1
Lokalizace zaˇ r´ızen´ı s OS Android
Moˇznosti jsou z´avisl´e od hardwaru MT, ale operaˇcn´ı syst´em (OS) Android umoˇzn ˇuje v´ yvoj´aˇri vysoko´ urovˇ nov´ y pˇr´ıstup k informac´ım z GPS, resp. GLO17
V´yvoj pro platformu Android
Lokalizace zaˇr´ızen´ı s OS Android
NASS, vys´ılaˇc˚ u mobiln´ı s´ıtˇe, Wi-Fi s´ıt´ı i pohybov´ ych senzor˚ u. N´ızko´ urovˇ nov´e informace sice zpˇr´ıstupˇ nuje tak´e, ale ne vˇsechny. Napˇr. n´am poskytne Cell ID, ale zemˇepisn´e souˇradnice jiˇz ne. V takov´em pˇr´ıpadˇe m´ame moˇznost dot´azat se jedn´e ze sluˇzeb z tabulky 3.1.
5.1.1
Google Play Services
Neˇz se zaˇcneme vˇenovat dalˇs´ı problematice, je nutn´e rozebrat tuto knihovnu [14]. Nebyla tu po celou dobu existence OS Android, pˇriˇsla pozdˇeji a jej´ım hlavn´ım u ´kolem je ulehˇcen´ı pr´ace v´ yvoj´aˇr˚ um. Nab´ız´ı mj. • jednoduˇsˇs´ı pˇr´ıstup ke sluˇzb´am Googlu, jako Mapy, Google+ aj. • updaty aplikac´ı • implementaci ˇcasto ˇreˇsen´ ych probl´em˚ u, jako black box (z´ısk´an´ı polohy od nejlepˇs´ıho poskytovatele) Pˇri pouˇz´ıv´an´ı t´eto knihovny je vˇsak nutn´e uvˇedomit si, ˇze nˇekter´e custom ROM1 nejsou schopn´e ji nainstalovat a t´ım nemohou vaˇsi aplikaci vyuˇz´ıvat. O tomto probl´emu jsem se s´am pˇresvˇedˇcil na Samsung Galaxy Y s upravenou ROM Titanium2. Knihovna byla uvedena aˇz v pr˚ ubˇehu v´ yvoje aplikace, coˇz mˇelo za n´asledek zmˇenu nˇekter´ ych konstrukc´ı. Kv˚ uli tomu a v´ yˇse zm´ınˇen´emu probl´emu bude v pr´aci obˇcas uvedena i alternativa bez pouˇzit´ı t´eto knihovny.
5.1.2
Krit´ eria
MT nab´ızej´ı v´ıce zdroj˚ u, jak z´ıskat polohu. Aplikace se tedy mus´ı nˇejak dozvˇedˇet, z kter´eho zdroje z´ısk´avat informace. To lze vynutit pˇr´ımo specifikac´ı konkr´etn´ıho zdroje nebo pouˇzit´ım objektu Criteria. Ten v sobˇe v´ yvoj´aˇrem udrˇzuje nastaven´e preference na spotˇrebu energie, pˇresnost, rychlost z´ısk´an´ı polohy atp. Objekt LocationManager je pak na z´akladˇe preferenc´ı schopn´ y vybrat nejlepˇs´ıho providera (viz listing 5.2). Android aktu´alnˇe vyuˇz´ıv´a 3 providery polohy (viz tabulka 5.1). 1
Upraven´ a verze OS Android zpravidla vyvinut´a nadˇsenci s c´ılem vylepˇsit funkce OS nebo dostat na star´ a zaˇr´ızen´ı vyˇsˇs´ı verze OS Android.
18
V´yvoj pro platformu Android
Lokalizace zaˇr´ızen´ı s OS Android
Tabulka 5.1: Provideˇri zemˇepisn´e polohy OS Android [16]. Zdroj polohy Popis GPS PROVIDER zastˇreˇsuje zdroje polohy z GPS a GLONASS NETWORK PROVIDER umoˇzn ˇuje pˇr´ıstup k souˇradnic´ım z´ıskan´ ym d´ıky mobiln´ı s´ıti a Wi-Fi s´ıt´ım PASSIVE PROVIDER vyuˇz´ıv´a jako zdroje polohy jin´e aplikace, tj. s´am neumoˇzn ˇuje z´ısk´an´ı souˇradnic ze s´ıtˇe nebo GPS
5.1.3
Tˇ r´ıda LocationListener
Vysoko´ urovˇ nov´ y pˇr´ıstup k z´ısk´av´an´ı polohy, jak n´azev rozhran´ı napov´ıd´a, funguje na principu posluchaˇce, kter´ y se zaregistruje spolu se sv´ ym nastaven´ım v syst´emu. Tento posluchaˇc je nad´ale notifikov´an o zmˇen´ach polohy a reaguje na nˇe. Tuto tˇr´ıdu vyuˇz´ıv´a jak ˇreˇsen´ı bez vyuˇzit´ı Google Play Services, tak i s vyuˇzit´ım t´eto knihovny. Pro pouˇzit´ı je nutn´e bud’ implementovat rozhran´ı jinou tˇr´ıdou nebo v m´ıstˇe pouˇzit´ı vytvoˇrit anonymn´ı tˇr´ıdu (viz listing 5.1). Implementovan´eho posluchaˇce staˇc´ı jiˇz jen pˇrihl´asit pro odbˇer zmˇen zemˇepisn´e polohy. Pro tyto u ´ˇcely slouˇz´ı pˇret´ıˇzen´a metoda requestLocationUpdates() (viz listing 5.3 a 5.4). Metoda nab´ız´ı i dalˇs´ı varianty, napˇr. s vyuˇzit´ım objektu PendingIntent, kter´ y umoˇzn ˇuje vykonat jin´e aplikaci kus k´odu s pr´avy aktu´aln´ı aplikace. Knihovna Google Play Services umoˇzn ˇuje zjednoduˇsen´ı, kter´e bude pops´ano v anal´ yze frameworku.
19
V´yvoj pro platformu Android
Lokalizace zaˇr´ızen´ı s OS Android
Listing 5.1: Jednor´azov´e z´ısk´an´ı polohy s vyuˇzit´ım krit´eri´ı. //ziskani LocationManagera jakozto sluzby systemu LocationManager mgr = (LocationManager) getSystemService(LOCATION_SERVICE); //nastaveni preferenci pro ziskavani polohy Criteria kriteria = new Criteria(); //vyzadani nejen lokace ale i smeru kompasu kriteria.setBearingRequired(true); kriteria.setBearingAccuracy(Criteria.ACCURACY_LOW); //pouze bezplatne sluzby a vysoka presnost kriteria.isCostAllowed(false); kriteria.setAccuracy(Criteria.ACCURACY_FINE); //vysledny identifikator ma podobu retezce String nejlepsi = mgr.getBestProvider(criteria, true); //ziskani posledni zname polohy ze zdroje urceneho na zaklade preferenci Location location = mgr.getLastKnownLocation(best);
20
V´yvoj pro platformu Android
Lokalizace zaˇr´ızen´ı s OS Android
Listing 5.2: Implementace rozhran´ı LocationListener anonymn´ı tˇr´ıdou. LocationListener ll = new LocationListener() { public void onLocationChanged(Location location){ //rekace na novou polohu napr. posunuti mapy } public void onProviderEnabled(String provider){ //reakce na zapnuti providera polohy //nutne pro implementaci rozhrani, metoda muze byt prazdna } public void onProviderDisabled(String provider){ //reakce na vypnuti providera polohy //nutne pro implementaci rozhrani, metoda muze byt prazdna } public void onStatusChanged(String provider, int status, Bundle extras){ //reakce na zmenu stavu providera //napr. pokud provider najednou neni schopny delsi dobu ziskat polohu //jako v pripade GPS uvnitr budovy //nutne pro implementaci rozhrani, metoda muze byt prazdna } }
21
V´yvoj pro platformu Android
Lokalizace zaˇr´ızen´ı s OS Android
Listing 5.3: Odbˇer zmˇen lokace s vyˇza´dan´ ym providerem. LocationManager mgr = (LocationManager)getSystemService(LOCATION_SERVICE) //implementace neni dulezita LocationListener ll = new LocationListener(){...} //minimalni cas pro obdrzeni nove lokace //0 znamena, ze bude obdrzena kazda zmena int minCas = 0; //minimalni zmena vzdalenosti pro obdrzeni nove lokace float minVzdalenost = 0; //prihlaseni ll pro odber zmen lokace mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, minCas, minVzdalenost, ll); ... //zruseni odberu zmen lokace mgr.removeUpdates(ll);
Listing 5.4: Odbˇer zmˇen lokace s providerem volen´ ym syst´emem. LocationManager mgr = (LocationManager)getSystemService(LOCATION_SERVICE) //implementace neni dulezita LocationListener ll = new LocationListener(){...} //minimalni cas pro obdrzeni nove lokace //0 znamena, ze bude obdrzena kazda zmena int minCas = 0; //minimalni zmena vzdalenosti pro obdrzeni nove lokace float minVzdalenost = 0; //vytvoreni defaultnich preferenci Criteria kriteria = new Criteria(); //prihlaseni ll pro odber zmen lokace, provider bude zvolen systemem dle preferenci //posledni parametr null nahrazuje objekt Looper //proto bude notifikovano pouze volajici vlakno mgr.requestLocationUpdates(minCas, minVzdalenost, kriteria, ll, null); ... //zruseni odberu zmen lokace mgr.removeUpdates(ll);
22
6 Location Framework Pˇredmˇetem t´eto pr´ace je framework pro zjednoduˇsen´ı implementace aplikac´ı vyuˇz´ıvaj´ıc´ıch zemˇepisnou polohu (location-based aplikac´ıch, d´ale jen LB). Mˇel by tedy zahrnovat funkcionality, kter´e se ˇcasto vyskytuj´ı v tˇechto aplikac´ıch. D´ale by mˇel splˇ novat poˇzadavek jednoduch´e modifikace nebo rozˇs´ıˇren´ı. LB aplikace kromˇe zjiˇstˇen´ı polohy potˇrebuj´ı tuto polohu tak´e vizualizovat nebo sd´ılet. Pro vizualici je vhodn´a mapa a pro sd´ılen´ı internet. Proto framework obsahuje bal´ıˇcky pro pr´aci se s´ıt´ı, s mapov´ ymi podklady i s daty uˇzivatel˚ u.
6.1
Modely
V lokalizaˇcn´ıch aplikac´ıch je vhodn´e udrˇzovat polohu objektu (i v pˇr´ıpadˇe pouze vaˇs´ı polohy) spolu s dalˇs´ımi informacemi. Protoˇze je Java objektovˇe orientovan´ y (d´ale OO) jazyk, nab´ız´ı se varianta pouˇzit´ı modelov´ ych tˇr´ıd. Tyto tˇr´ıdy maj´ı bezparametrick´ y kontruktor, gettery a settery pro sv´e atributy (zpravidla primtivn´ı datov´e typy). Toto ˇreˇsen´ı m´a hned nˇekolik d˚ uvod˚ u: • pˇrehlednost n´avrhu • snadn´e rozˇs´ıˇren´ı tˇr´ıd o dalˇs´ı atributy • moˇznost pouˇzit´ı knihoven tˇret´ıch stran pro serializaci a deserializaci dat Tyto tˇr´ıdy jsou obsaˇzeny v bal´ıˇcku Objects. Bal´ıˇcek obsahuje tˇr´ıdy, kter´e se snaˇz´ı postihnout z´akladn´ı potˇreby pro LB aplikace. Point obsahuje atributy pro popis, identifikaci bodu na mapˇe. Player je potomkem tˇr´ıdy Point a obsahuje nav´ıc atributy pro popis stavu a jm´ena. Group umoˇzn ˇuje shluknout instance Point ˇci jej´ı potomky do slovn´ıku, pˇriˇcemˇz jako kl´ıˇc slouˇz´ı jejich id. Protoˇze je kl´ıˇc datov´ y typ integer, je zde m´ısto HashMapy vyuˇzito tˇr´ıdy SparseArray, kter´a umoˇzn ˇuje jako kl´ıˇc slovn´ıku vyuˇz´ıt pr´avˇe primitivn´ı datov´ y typ integer. 23
Location Framework
Vizualizace na mapˇe
Game shlukuje instance tˇr´ıdy Group opˇet pomoc´ı SparseArray. Umoˇzn ˇuje tak´e uloˇzen´ı krit´eri´ı hry, jako napˇr. prostor vymezen´ y souˇradnicemi. JSONPuzzle je spoleˇcn´ y pˇredek pro vˇsechny pˇredch´azej´ıc´ı tˇr´ıdy. Obsahuje pouze dvˇe metody pro serializaci a deserializaci objekt˚ u do, resp. z, form´atu JSON, ˇcehoˇz se vyuˇz´ıv´a pˇri pˇrenosu dat.
6.2
Vizualizace na mapˇ e
V okamˇziku, kdy jsou k dispozici modely a jejich zemˇepisn´e souˇradnice, je v ˇradˇe aplikac´ı vhodn´e je vizualizovat na mapˇe. Mapa v tomto pˇr´ıpadˇe neznamen´a pouze obr´azek m´ısta na Zemi. Jedn´a se o komplexn´ı ˇreˇsen´ı zahrnuj´ıc´ı: • um´ıstˇen´ı ukazatele na mapu dle souˇradnic • zjiˇstˇen´ı zemˇepisn´ ych souˇradnic konkr´etn´ıho pixelu na obrazovce • pohyb a zoom mapy • kreslen´ı lomen´e ˇca´ry (tzv. polyline) na mapy dle zadan´ ych zemˇepisn´ ych souˇradnic Vˇsechny tyto funkce pracuj´ı nad mapou jako takovou. Ovˇsem proˇc s sebou nosit cel´ y atlas, pokud n´am staˇc´ı mapa mˇesta? Ve skuteˇcnosti je mapa, kterou v´ıd´ame na obrazovk´ach zaˇr´ızen´ı, sloˇzena z obr´azk˚ u, tzv. dlaˇzdic. Dlaˇzdice lze jednoznaˇcnˇe identifikovat na z´akladˇe zoomu, zemˇepisn´ ych souˇradnic a typu zobrazen´ı (3D, satelitn´ı, turistick´e atd.). Implementac´ı existuje mnoho, lze je vˇsak rozdˇelit zhruba do nˇekolika skupin. XHTML ˇreˇsen´ı vyuˇz´ıvaj´ıc´ı k zobrazen´ı a pr´aci s mapou vestavˇen´ y prohl´ıˇzeˇc s j´adrem WebKit1 . Mezi takov´a ˇreˇsen´ı patˇr´ı napˇr´ıklad Google Maps V3 ˇci Leaflet [20], kter´a stoj´ı na Javascriptu, CSS3 a HTML. Tato ˇreˇsen´ı jsou t´ım p´adem pouˇziteln´a i pro desktopov´e aplikace. Vhodnˇejˇs´ı je dle m´eho n´azoru sp´ıˇse Leaflet, protoˇze jiˇz pˇri n´avrhu bylo poˇc´ıt´ano s t´ım, ˇze technologie bude urˇcen´a i pro telefony a tablety. Nev´ yhodou tohoto n´avrhu je n´ar˚ ust objemu dat staˇzen´ ych i odeslan´ ych prostˇrednictv´ım 1
Renderovac´ı j´ adro pro prohl´ıˇzeˇce vyuˇz´ıvaj´ıc´ı prohl´ıˇzeˇce jako Google Chrome, Safari nebo Opera
24
Location Framework
Vizualizace na mapˇe
internetu. Kladem je fakt, ˇze pokud bude cel´a aplikace implementov´ana ve vestavˇen´em prohl´ıˇzeˇci, je snadno pˇrenositeln´a na jin´e platformy. Kompletnˇ e offline ˇreˇsen´ı, kter´a se nespol´ehaj´ı na ˇza´dn´e dalˇs´ı sluˇzby ani v ot´azce v´ ypoˇct˚ u ani v ot´azce mapov´ ych podklad˚ u. Tato ˇreˇsen´ı jsou vhodn´a pro navigace, protoˇze vyˇzaduj´ı pouze prvotn´ı pˇripojen´ı k internetu pro instalaci a staˇzen´ı mapov´ ych podklad˚ u. Z toho vypl´ yv´a, ˇze aplikace vˇcetnˇe podklad˚ u m˚ uˇze zabrat stovky MB na u ´loˇziˇsti. Hybridn´ı model vyuˇz´ıvaj´ıc´ı v´ yhody obou pˇredchoz´ıch metod.
6.2.1
Integrace Google Maps Android API
Ve frameworku je vyuˇzito veˇrejn´eho API od Googlu pro zjednoduˇsen´ı pr´ace s mapami. Patˇr´ı mezi hybridn´ı varianty a je v aktu´aln´ı verzi 2 (V2). Verze 1 (V1) jiˇz nen´ı podporov´ana, v dobˇe zapoˇcet´ı pr´ace vˇsak byla aktu´aln´ı. V1 byla m´enˇe pˇr´ıvˇetiv´a, jelikoˇz funkce i mapov´e podklady byly pevnˇe sv´az´any. Pro zobrazen´ı mapy se vyuˇz´ıval widget2 MapView. To nutilo v´ yvoj´aˇre pˇrijmout politiku Googlu ohlednˇe vyuˇzit´ı map, coˇz mj. znamenalo z´akaz ukl´ad´an´ı nebo modifikace dlaˇzdic a omezen´ y poˇcet bezplatn´ ych staˇzen´ı dlaˇzdic. Pokud v´ yvoj´aˇr˚ um z nˇejak´eho d˚ uvodu tato pravidla nevyhovovala, museli hledat alternativy nebo pˇrij´ıt s vlastn´ı implementac´ı. Jednou z alternativ byl OSMDroid, coˇz byla alternativn´ı implementace MapView vyuˇz´ıvaj´ıc´ı jako zdroj dlaˇzdic projekt OpenStreetMap (d´ale OSM) [21]. OSM je projekt nab´ızej´ıc´ı dlaˇzdice mapy svˇeta pod otevˇrenou licenc´ı. Dlaˇzdice jsou tvoˇreny dobrovoln´ıky a tvoˇr´ı tak alternativu k podklad˚ um od Googlu, protoˇze je lze modifikovat ˇci ukl´adat. Mapy V2 jiˇz obsahuj´ı lepˇs´ı ˇreˇsen´ı. Mapa se zobrazuje do widgetu Fragment a zdroj dlaˇzdic lze specifikovat pˇred´an´ım instance rozhran´ı TileProvider. Ta mus´ı implementovat jedinou metodu getTile(int x, int y, int zoom), kter´a vrac´ı dlaˇzdici pro zadan´e parametry. Co bude zdrojem dlaˇzdic, je jiˇz na v´ yvoj´aˇri. Pro OSM je to URL serveru, kter´ y vrac´ı dlaˇzdice. Dalˇs´ı moˇznost´ı je ˇcerpat dlaˇzdice pˇr´ımo z u ´loˇziˇstˇe, coˇz pˇrin´aˇs´ı rychlejˇs´ı zobrazen´ı dlaˇzdice a moˇznost vyuˇzit´ı i mimo dosah mobiln´ı s´ıtˇe. 2
Prvek uˇzivatelsk´eho rozhran´ı jako napˇr. tlaˇc´ıtko nebo editaˇcn´ı pole.
25
Location Framework
6.2.2
Vizualizace na mapˇe
Rozˇ siˇ ruj´ıc´ı API frameworku
Tˇr´ıdy zjednoduˇsuj´ıc´ı vizualizace jsou obsaˇzeny v bal´ıˇcku Maps. SimpleUrlTileProvider je implementace abstraktn´ı tˇr´ıdy UrlTileProvider. Vyˇzaduje pouze URL adresu serveru, kter´ y poskytuje dlaˇzdice. Servery zpravidla funguj´ı tak, ˇze je vol´ana URL ve form´atu http://server.com/z/x/y.png a server vrac´ı jako odpovˇed’ dlaˇzdici. Proto instance vyˇzaduje URL serveru, ve kter´e jsou za promˇenn´e x, y a z uveden´e placeholdery3 , za kter´e jsou pak konkr´etn´ı promˇenn´e dosazovan´e pˇri dotazu na server. Dalˇs´ımi parametry jsou pˇredpokl´adan´e rozmˇery dlaˇzdic. MixedTileProvider umoˇzn ˇuje oproti pˇredchoz´ı tˇr´ıdˇe jednu z´asadn´ı vˇec: ukl´adat dlaˇzdice do u ´loˇziˇstˇe. Funguje tak, ˇze jako parametr vyˇzaduje instanci UrlTileProvideru. V okamˇziku, kdy je vyˇzadov´ana dlaˇzdice, je nejdˇr´ıve prozkoum´ano u ´loˇziˇstˇe. Pokud dlaˇzdice v u ´loˇziˇsti nen´ı, je staˇzena prostˇrednictv´ım UrlTileProvideru, zobrazena a uloˇzena v u ´loˇziˇsti pod sv´ ymi souˇradnicemi. Dalˇs´ım parametrem je ˇcasov´ yu ´daj, kter´ y ˇr´ık´a, po jakou dobu jsou dlaˇzdice ch´ap´any jako aktu´aln´ı. Neaktu´aln´ı dlaˇzdice bude v pˇr´ıpadˇe poˇzadavku pˇreps´ana novˇe staˇzenou verz´ı. MapObjectsManager zjednoduˇsuje spr´avu objekt˚ u na mapˇe. Objekt mapy um´ı zobrazovat markery a kreslit na mapu, bohuˇzel tyto objekty nejsou bez uchov´an´ı reference d´ale pˇr´ıstupn´e. Manager obsahuje seznamy, v kter´ ych tyto objekty uchov´av´a a lze pˇres nˇe i iterovat. Do list˚ u lze vkl´adat a odeb´ırat a gettery vrac´ı seznamy pouze v readonly podobˇe. RectangleBoundsMarkerDragListener implementuje rozhran´ı OnMarkerDragListener, kter´e umoˇzn ˇuje reagovat na ud´alosti pˇri drag & drop pohybu s markerem po mapˇe. Tato tˇr´ıda poskytuje dva markery, d´ıky kter´ ym je na mapˇe vykreslen obd´eln´ık. Pohybem s markery se mˇen´ı tvar obd´eln´ıku. Toto je uˇziteˇcn´e pro vymezov´an´ı hranic napˇr. pro hru nebo pro pˇri hl´ıd´an´ı dˇet´ı. CircleBoundsMarkerDragListener je obdobou pˇredchoz´ı tˇr´ıdy. Liˇs´ı se pouze t´ım, ˇze dva markery urˇcuj´ı stˇred a polomˇer kruhu. BoundedOnCameraChangeListener je implementace rozhran´ı OnCameraChangeListener, kter´e umoˇzn ˇuje reagovat na ud´alost pˇresunu po mapˇe 3
Charakteristick´e textov´e sekvence, ktel´e lze snadno naj´ıt a n´aslednˇe nahradit jin´ ym textem.
26
Location Framework
Knihovny
skrze metodu onCameraChangeListener(CameraPosition position). Jak n´azev napov´ıd´a, umoˇzn ˇuje tˇr´ıda vymezit zemˇepisn´ y prostor, ve kter´em se m˚ uˇze uˇzivatel pohybovat. Tato skuteˇcnost pom´ah´a sn´ıˇzit objem staˇzen´ ych dat, protoˇze pokud pohled mapy nevystoup´ı z omezen´eho prostoru, nebudou se stahovat ani dlaˇzdice mimo tento prostor. Probl´emem pˇri implementaci se uk´azal b´ yt efekt plynul´eho zpomalen´ı pouˇz´ıvan´ y pˇri scrollov´an´ı v syst´emu Android. Spoˇc´ıv´a v tom, ˇze pokud uˇzivatel na dotykov´e obrazovce pohne rychle prstem, je mapa pˇresunuta stejn´ ym smˇerem a odpov´ıdaj´ıc´ı intenzitou. D´ıky tomu se mi nedaˇrilo doc´ılit toho, aby byla mapa limitov´ana striktnˇe na vymezen´ y prostor, protoˇze odstranˇen´ı efektu mˇelo za n´asledek nepohodln´e zach´azen´ı s mapou pro uˇzivatele. Zvolil jsem tedy strategii, kter´a tento efekt ponech´av´a. Rozhran´ı posluchaˇce je implementov´ano tak, ˇze pˇri ukonˇcen´ı pohybu mapy kontroluje pozici stˇredu zobrazen´ı. Pokud je tento bod mimo vymezen´e hranice, je mapa vycentrov´ana na pˇredem stanoven´e souˇradnice. Grafika tak z˚ ustala plynul´a a ovl´ad´an´ı uˇzivatelsky pˇr´ıjemn´e.
6.3
Knihovny
Ve frameworku samozˇrejmˇe nesmˇej´ı chybˇet ani konstanty nebo knihovn´ı funkce. Ty jsou obsaˇzen´e v bal´ıˇcku Libs. Pˇri rozˇsiˇrov´an´ı frameworku nebo jeho vyuˇzit´ı jsem poˇc´ıtal s t´ım, ˇze budou tˇr´ıdy z bal´ıˇcku editov´any popˇr. dalˇs´ı knihovn´ı tˇr´ıdy budou um´ıstˇeny pro pˇrehlednost pr´avˇe sem. GameStates je tˇr´ıda slouˇz´ıc´ı k um´ıstˇen´ı konstant t´ ykaj´ıc´ıch se hry. Ve frameworku obsahuje jen konstantu pro nespecifikovan´e ID hry. PlayerStates je obdoba pˇredchoz´ı tˇr´ıdy, ale je urˇcena pro konstanty t´ ykaj´ıc´ı se hr´aˇc˚ u, tj. instanc´ı tˇr´ıdy Player. Ve frameworku obsahuje pouze konstantu pro nespecifikovan´e ID hr´aˇce. SimpleStringAESCrypto je knihovn´ı tˇr´ıda obsahuj´ıc´ı metody pro symetrick´e ˇsifrov´an´ı ˇretˇezc˚ u algoritmem AES na z´akladˇe poskytnut´eho ˇretˇezce - kl´ıˇce. Z kl´ıˇce je vygenerov´an pomoc´ı SHA256 hash, kter´ y je n´aslednˇe vyuˇzit pro ˇsifrov´an´ı, resp. deˇsifrov´an´ı. Hlavn´ım d˚ uvodem pro vznik t´eto knihovny byla moˇznost poskytnout v´ yvoj´aˇr˚ um zabezpeˇcit s´ıt’ovou komunikaci bez vyuˇzit´ı protokolu HTTPS. EasyMap je knihovn´ı tˇr´ıda obsahuj´ıc´ı metody pro 27
Location Framework
Komunikace
• v´ ypoˇcet re´aln´e vzd´alenosti dvojice zemˇepisn´ ych souˇradnic • konverzi zemˇepisn´ ych souˇradnic reprezentovan´ ych starˇs´ı tˇr´ıdou Location na novˇejˇs´ı reprezentaci LatLng • v´ ypoˇcet koordin´at˚ u dlaˇzdice ze zemˇepisn´ ych souˇradnic a zoomu, coˇz lze vyuˇz´ıt pro staˇzen´ı dlaˇzdic pˇredem bez nutnosti vyuˇzit´ı widgetu mapy • z´ısk´an´ı parametr˚ u pro vytvoˇren´ı instance LatLngBounds 4 z dvojice zemˇepisn´ ych souˇradnic nez´avisle na vz´ajemn´e poloze • vytv´aˇren´ı kopi´ı instanc´ı PolygonOptions a CircleOptions, kter´e se vyuˇz´ıvaj´ı pro drag & drop vymezov´an´ı hranic, ovˇsem bez zkop´ırov´an´ı konkr´etn´ıch zemˇepisn´ ych bod˚ u GlobalVars je tˇr´ıda vyuˇz´ıvaj´ıc´ı n´avrhov´ y vzor jedin´aˇcek, kter´a umoˇzn ˇuje ukl´ad´an´ı glob´aln´ıch objektov´ ych promˇenn´ ych. Tˇr´ıda ukl´ad´a pod Stringov´e kl´ıˇce libovoln´e instance objekt˚ u a umoˇzn ˇuje spr´avu t´eto kolekce po celou dobu bˇehu aplikace. Data vˇsak nejsou perzistentn´ı a doch´az´ı k jejich ztr´atˇe po vypnut´ı pˇr´ıstroje.
6.4
Komunikace
D˚ uleˇzitou a velmi promˇenlivou souˇca´st´ı LB aplikac´ı je sd´ılen´ı pozice a dalˇs´ıch dat. Pˇri n´avrhu frameworku bylo nutn´e zv´aˇzit nˇekolik hledisek.
6.4.1
Spojen´ı s aplikac´ı
Aplikace pro Android se mj. skl´adaj´ı z tzv. aktivit. Aktivita je v podstatˇe uˇzivatelsk´e rozhran´ı, na kter´e se d´ıv´ame. Jakmile je na telefonu nˇeco zobrazeno souvis´ı to s aktivitou. Aktivita m´a sv´e vl´akno, kter´e je spjat´e s uˇzivatelsk´ ym rozhran´ım. Pokud se rozhodneme v tomto vl´aknˇe spustit dlouh´ y v´ ypoˇcet nebo napˇr. stahov´an´ı dat, pˇrestane uˇzivatelsk´e rozhran´ı reagovat, protoˇze bude vyt´ıˇzen´e pr´avˇe t´ımto v´ ypoˇctem. Pokud pˇrestane aktivita reagovat po nˇekolik sekund, je syst´emem n´asilnˇe ukonˇcena. Pro dlouhotrvaj´ıc´ı u ´kony na pozad´ı existuje nˇekolik moˇznost´ı jak je implementovat. 4
Obd´eln´ıkov´ y prostor nad n´ımˇz lze se lze dot´azat, zda dan´a zemˇepisn´a souˇradnice leˇz´ı uvnitˇr.
28
Location Framework
Komunikace
V LB aplikac´ıch komunikuj´ıc´ıch pˇres internet je potˇrebn´e, aby aplikace neust´ale z´ısk´avala informace od ostatn´ıch u ´ˇcastn´ık˚ u a z´aroveˇ n odes´ılala lok´aln´ı u ´daje. Pro tento u ´ˇcel by se hodilo samostatn´e vl´akno se smyˇckou, kter´a by tuto smyˇcku umoˇzn ˇovala nejl´epe i v okamˇziku, kdy je aplikace napˇr. minimalizov´ana. Pro takov´e u ´ˇcely existuje tˇr´ıda Service. Sluˇzba bˇeˇz´ı na pozad´ı aplikace nehledˇe na aktivity a je moˇzn´e ji nechat vykon´avat k´od, i kdyˇz je aplikace minimalizov´ana nebo se aktivita pˇrekresluje z d˚ uvodu otoˇcen´ı obrazovky. Takov´a sluˇzba je obsaˇzena v bal´ıˇcku Networking. Protoˇze vyuˇzit´ı frameworku mus´ı b´ yt dostateˇcnˇe flexibiln´ı, je tˇr´ıda abstraktn´ı. Tˇr´ıda v sobˇe zahrnuje kostru pro nˇekolik ˇcast´ ych u ´kon˚ u spojen´ ych s LB aplikacemi.
6.4.2
Zp˚ usob pˇ renosu
Pokud aplikace zahrnuje komunikaci s jin´ ymi zaˇr´ızen´ımi, je nutn´e zvolit zp˚ usob pˇrenosu dat. Pokud vynech´ame, pro tento pˇr´ıpad, ponˇekud exotick´e moˇznosti (ftp, e-mail atp.), tak z˚ ustane nˇekolik nejpouˇz´ıvanˇejˇs´ıch protokol˚ u. TCP a UDP Protokoly pro pˇr´ım´e vyuˇzit´ı pracnˇejˇs´ı. Sk´ ytaj´ı vˇsak moˇznost komunikovat i s zaˇr´ızen´ımi, kter´e neum´ı obsluhovat HTTP poˇzadavky. Toto ˇreˇsen´ı bylo p˚ uvodnˇe vybr´ano pro realizaci uzavˇren´eho bytov´eho protokolu z d˚ uvodu u ´spory pˇren´aˇsen´ ych dat. Od Javy 1.4 je souˇc´ast´ı API bal´ıˇcek java.nio.channel, kter´ y obsahuje mj. tˇr´ıdu SocketChannel. D´ıky t´eto tˇr´ıdˇe ve spolupr´aci s tˇr´ıdou Selector lze se sockety pracovat obdobnˇe jako v jazyce C. Instance SocketChannel se otevˇrou a pˇripoj´ı na adresu a port. a zaregistruj´ı u Selectoru. Selector n´aslednˇe hl´ıd´a a pˇr´ıpadnˇe poskytuje instance SocketChannel pro ˇcten´ı nebo z´apis. T´ım lze se sockety pracovat jako s bytovˇe orientovan´ ymi streamy. Nev´ yhodou tohoto pˇr´ıstupu je komplikovanost a pˇri snaze zmenˇsit objem dat se st´av´a tˇeˇzce rozˇsiˇriteln´ ym napˇr. v pˇr´ıpadˇe pˇrid´av´an´ı atribut˚ u k jedn´e z modelov´ ych tˇr´ıd. Google Cloud Messaging (GCM) Sluˇzba poskytovan´a Googlem, jeˇz moˇzn ˇuje odes´ılat data z aplikaˇcn´ıho serveru na zaˇr´ızen´ı Android bez pˇredchoz´ıho vyˇz´ad´an´ı. To je v´ yhoda oproti HTTP protokolu, kde je tato funkˇcnost zastoupena pravideln´ ymi dotazy na server. 29
Location Framework
Komunikace
GCM je zdarma a samozˇrejmˇe poskytuje v´ıce funkc´ı jako napˇr. odesl´an´ı jedn´e zpr´avy na v´ıce zaˇr´ızen´ı nebo zpˇetnou komunikaci ze zaˇr´ızen´ı na server. Aplikaˇcn´ı server mus´ı implementovat GCM Server a aplikace zase GCM Client. Mezi nimi stoj´ı GCM Connection Servery, kter´e pˇred´avaj´ı zpr´avy (viz obr´azek 6.1). GCM rozezn´av´a zaˇr´ızen´ı, resp. uˇzivatele d´ıky jejich Google u ´ˇct˚ um, kter´e jsou nutn´e pro moˇznost napˇr. stahov´an´ı aplikac´ı z Google Play Store5 . GCM nebyla vybr´ana, protoˇze pokud by se nˇejak´a aplikace mˇela rozˇsiˇrovat i na jin´e OS pro mobiln´ı zaˇr´ızen´ı, musel by aplikaˇcn´ı server rozezn´avat z jak´e platformy poˇzadavek pˇriˇsel a napˇr. v pˇr´ıpadˇe Window 8 by musel vyuˇz´ıvat sluˇzby Azure6 . Pˇri testovac´ı implementaci aplikaˇcn´ıho serveru v jazyce Python nav´ıc doˇslo k pot´ıˇz´ım, kdy data ze serveru odeˇsla bez ohl´aˇsen´ı chyby, ale na zaˇr´ızen´ı nedorazila a na Google Developers Console7 nebyla ˇza´dn´a data zapoˇc´ıt´ana. HTTP Velmi rozˇs´ıˇren´ y internetov´ y protokol pro pˇrenos dokument˚ u HTML i dalˇs´ıch soubor˚ u. Funguje syst´emem dotaz-odpovˇed’. Uˇzivatel vznese textov´ y poˇzadavek na konkr´etn´ı URL, pˇriˇcemˇz souˇca´st´ı poˇzadavku m˚ uˇzou b´ yt dalˇs´ı parametry. Server odpov´ıd´a textovou hlaviˇckou obsahuj´ıc´ı informace o k´odov´an´ı textu, verzi HTTP protokolu, typu vracen´eho obsahu atp. N´asleduje pr´azdn´ y ˇra´dek a samotn´ y obsah, napˇr. webov´a str´anka (viz listing 6.2). Typ obsahu, tzv. MIME Type urˇcuje, zda jde o HTML str´anku, pdf soubor nebo hudebn´ı z´aznam mp3. Lze tedy pˇren´aˇset i textov´a data, kter´a poskytuj´ı dostateˇcnou flexibilitu pro framework. HTTP protokol nav´ıc funguje nad TCP, takˇze nen´ı nutn´e ˇreˇsit poˇrad´ı, popˇr. v´ ypadek datov´ ych packet˚ u. HTTP protokol je nav´ıc zn´am´ y a implementace serveru spoˇc´ıv´a v implementaci webov´eho serveru. K tomu dnes jiˇz slouˇz´ı mnoho framework˚ u (Django, .NET MVC, Zend), kter´e pr´aci znaˇcnˇe urychl´ı. Dalˇs´ı v´ yhodou je fakt, ˇze jeden server dok´aˇze obslouˇzit jak´ekoliv zaˇr´ızen´ı, kter´e dok´aˇze zas´ılat HTTP poˇzadavky nehledˇe na platformu. M˚ uˇze tedy obsluhovat jak mobiln´ı zaˇr´ızen´ı, tak bˇeˇzn´ y poˇc´ıtaˇc, aniˇz by se musela implementace nˇejak liˇsit. Nev´ yhodou je, ˇze server nem˚ uˇze s´am bez vyzv´an´ı zaslat data 5
Online obchod s aplikacemi pro OS Android. Cloudov´ a platforma spoleˇcnosti Microsoft vyuˇz´ıvan´a k hostov´an´ı a ˇsk´alov´an´ı webov´ ych aplikac´ı skrze datacentra Microsoftu. 7 Online centrum pro v´ yvoj´ aˇre, kde mohou spravovat Googlem poskytnut´e sluˇzby pro sv´e aplikace. 6
30
Location Framework
Komunikace
na klienta, takˇze klient se mus´ı pravidelnˇe dotazovat na nov´a data. Klientsk´a implementace obn´aˇs´ı vytvoˇren´ı dotazu, naplnˇen´ı parametry a odesl´an´ı na poˇzadovanou URL. Jedna z moˇznost´ı implementace je ke shl´ednut´ı v listingu 6.1. Tato moˇznost komunikace byla nakonec vybr´ana pro framework i pˇres jej´ı nedostatek. Protoˇze zaˇr´ızen´ı by mˇelo pravidelnˇe zas´ılat na server dotaz se svou lokac´ı, m˚ uˇze jako odpovˇed’ mj. dostat i zpr´avu, zda jsou k dispozici nˇejak´a nov´a data odkud je st´ahnout.
Obr´azek 6.1: Sch´ema GCM komunikace. [15]
6.4.3
Form´ at pˇ ren´ aˇ sen´ ych dat
Pˇri pˇren´aˇsen´ı dat v textov´em form´atu je pro interpretaci dat mnoho moˇznost´ı. J´a jsem vybral JSON (z ang. JavaScript Object Notation). D˚ uvod˚ u bylo hned nˇekolik. • velmi rozˇs´ıˇren´ y form´at serializace dat • rozˇs´ıˇren´ı objekt˚ u o atributy nen´ı probl´em • vyuˇz´ıvan´ y i sluˇzbami tˇret´ıch stran jako napˇr. Google Geolocation API • d´ıky rozˇs´ıˇrenosti existuj´ı jiˇz hotov´a ˇreˇsen´ı pro serializaci a deserializaci objekt˚ u • oproti jin´ ym form´at˚ um jako napˇr. XML, je objemovˇe u ´sporn´ y 31
Location Framework
Komunikace
JSON dok´aˇze reprezentovat (viz listing 6.3): ˇ ezce 1. Retˇ ˇ ısla 2. C´ (a) Cel´a (b) S plovouc´ı desetinnou ˇc´arkou 3. Speci´aln´ı hodnoty (a) True nebo False (b) Null 4. Neindexovan´e pole hodnot 5. Objekty, resp. pole, indexovan´e ˇretˇezcov´ ymi kl´ıˇci Pravidla lze kombinovat, takˇze JSON um´ı pˇren´aˇset i pole objekt˚ u. Pˇri pr´aci s ˇretˇezci lze vyuˇz´ıt escapov´an´ı pro znaky jako konec ˇra´dku(\n), tabul´ator(\t) nebo znaky UTF-16 zapsan´e hexadecim´alnˇe (\uXXXX).
6.4.3.a
Reakce na zpr´ avy
Framework poˇc´ıt´a s dvˇema druhy zpr´av. Prvn´ı typ je vlastnˇe odpovˇed’ na HTTP poˇzadavek na server. Odpovˇed’ je zpracov´ana v abstraktn´ı metodˇe processResponse(HttpResponse response, String url), kter´a je vol´ana uvnitˇr metody sendDataToServer(String data, String serverUrl). Konkr´etn´ı implementace je tedy na program´atorovi. Parametr url je vhodn´e pouˇz´ıt k rozliˇsen´ı, jak m´a b´ yt s odpovˇed´ı naloˇzeno. T´ım se nab´ız´ı implementace v podobˇe stromu podm´ınek, kdy kl´ıˇcem bude pr´avˇe adresa, odkud odpovˇed’ pˇriˇsla. Druh´ y pˇr´ıpad je reakce na zpr´avy od aplikace. Ty mohou pˇrij´ıt od uˇzivatele skrze uˇzivatelsk´e rozhran´ı nebo od aplikace jako takov´e napˇr. od vl´akna, kter´e bude pravidelnˇe vykon´avat nˇejakou ˇcinnost. V t´eto f´azi bylo nutn´e zvolit vhodn´ y zp˚ usob doruˇcov´an´ı zpr´av do sluˇzby. Jedn´ım ze zp˚ usob˚ u je ponechat si referenci na sluˇzbu, d´ıky ˇcemuˇz k n´ı lze pˇristupovat pˇr´ımo. Tento zp˚ usob je ovˇsem nepohodln´ y pro aplikace, kde bude vyuˇzito mnoho aktivit. Mnou zvolen´ y zp˚ usob je robustnˇejˇs´ı. Zakl´ad´a se na zas´ıl´an´ı instanc´ı tˇr´ıdy Intent. Instance Itent v sobˇe obsahuje mj. 32
Location Framework
Komunikace
Listing 6.1: Implementace HTTP poˇzadavku pro OS Android. //nastaveni hlavicky pro odesilani metodou POST HttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("serverUrl"); List
params = new ArrayList(1); params.add(new BasicNameValuePair("data", data)); try { //pridani parametru do pozadavku httpPost.setEntity(new UrlEncodedFormEntity(params)); //zachyceni reakce na pozadavek HttpResponse httpResponse = httpClient.execute(httpPost); //zpracovani odpovedi processResponse(httpResponse); } catch (Exception e) { osetreni vyjimky handleError(e); }
Listing 6.2: Pˇr´ıklad HTTP komunikace skrze telnet. telnet w3c.org 80 -4 Trying 128.30.52.45... Connected to w3c.org. Escape character is ’^]’. GET / HTTP/1.1 HTTP/1.0 403 Forbidden Cache-Control: no-cache Connection: close Content-Type: text/html 403 Forbidden
Request forbidden by administrative rules.
33
Location Framework
Komunikace
Listing 6.3: Uk´azka dat ve form´atu JSON. # neindexovane pole [1, 2.5, true, "text"] # indexovane pole resp. instance objektu { "var1":1, "var2":2.5, "var3":true, "var4":"text" } # neindexovane pole objektu [ { "var1":1, "var2":2.5, "var3":true, "var4":"text" }, { "var1":1, "var2":2.5, "var3":true, "var4":"text" } ]
34
Location Framework
Komunikace
• typ akce reprezentovan´ y ˇretˇezcem • slovn´ık promˇenn´ ych s ˇretˇezcov´ ymi kl´ıˇci Tyto instance lze pak skrze syst´em zas´ılat broadcastem8 . Sluˇzba nebo aktivita, kter´a implementuje instanci BroadcastReceiver, tj. jeho metody onReceive(Context context, Intent intent), m˚ uˇze na zaslan´e instance Intent reagovat nebo je nechat b´ yt. Instanci tˇr´ıdy BroadcastReceiver je nutn´e jeˇstˇe registrovat u instance LocalBroadcastManager spolu s instanc´ı IntentFilter, kter´a obsahuje seznam akc´ı pro odeb´ır´an´ı
6.4.3.b
Odes´ıl´ an´ı zpr´ av
Zpr´avy mohou b´ yt na server odes´ıl´any skrze HTTP poˇzadavek nebo skrze Intent do jin´e aktivity, resp. sluˇzby. OS Android vyuˇz´ıv´a Intenty i pro spouˇstˇen´ı aplikac´ı nebo napˇr. otev´ır´an´ı internetov´ ych str´anek. D´ıky komunikaci pˇres Intenty m˚ uˇze b´ yt framework souˇca´st´ı tohoto toku informac´ı syst´emem a reagovat napˇr. i na n´ızk´ y stav baterie apod.
6.4.3.c
Aktualizace lokace pˇ r´ıstroje
Souˇca´st´ı sluˇzby na pozad´ı je i pravideln´e z´ısk´av´an´ı nov´e lokace pˇr´ıstroje. Pro tento pˇr´ıpad byla zvolena jin´a varianta neˇz v listingu 5.3, resp. 5.4. Knihovna Google Play Services nab´ız´ı zjednoduˇsen´ı pro odbˇer aktu´aln´ı polohy i nastaven´ı zp˚ usobu odbˇeru. Proces je jednoduch´ y, ale na slovn´ı popis zdlouhav´ y, proto je n´azornˇejˇs´ı uk´azka v listingu 6.4. Zjednoduˇsen´e nastaven´ı spoˇc´ıv´a ve volbˇe druhu odbˇeru lokace metodou setPriority(int type) prostˇrednictv´ım konstant z tˇr´ıdy LocationRequest [17] (viz tabulka 6.1). K tomu je tˇreba nastavit jeˇstˇe intervaly pravideln´eho aktivn´ıho odbˇeru metodou setInterval(int interval) a pasivn´ıho odbˇeru setFastestInterval(int interval). Aktivn´ı odbˇer znamen´a, ˇze je lokace vyˇz´ad´ana. Pasivn´ı funguje tak, ˇze lokace jsou obdrˇzeny od jin´ ych bˇeˇz´ıc´ıch aplikac´ı, kter´e si aktivnˇe polohu vyˇz´adaly. Protoˇze sluˇzba sama implementuje rozhran´ı LocationListener, m˚ uˇze na zmˇenu polohy ihned reagovat sama nebo zasl´an´ım zpr´avy nˇekter´e z aktivit. 8
Hromadn´ a zpr´ ava pro vˇsechny.
35
Location Framework
Integrace frameworku
Pro pouˇzit´ı ve sluˇzbˇe staˇc´ı implementovat abstraktn´ı metodu setupPropertiesOfLocationRequest() a v n´ı prov´est nastaven´ı instance LocationRequestu. Spojen´ı jiˇz sluˇzba obstar´a sama. Tabulka 6.1: Moˇznosti odbˇeru polohy LocationClientem. Konstanta Popis ˇ e PRIORITY BALANCED POWER ACCURACY Cast´ kompromisn´ı nastaven´ı. Dlouh´e intervaly aktivn´ıch poˇzadavk˚ u jsou prokl´ad´any pasivn´ım z´ısk´av´an´ım polohy. PRIORITY HIGH ACCURACY Poˇzadavek nejvyˇsˇs´ı moˇzn´e pˇresnosti a pravideln´eho odbˇeru. PRIORITY LOW POWER Staˇc´ı niˇzˇs´ı pˇresnost, coˇz ˇsetˇr´ı baterii. Napˇr. pokud je zapojen´a GPS, tak je vyuˇzita pouze s´ıt’ k urˇcen´ı polohy. PRIORITY NO POWER Slouˇz´ı k nastaven´ı pouze pasivn´ıho pˇr´ıjmu polohy.
6.5
Integrace frameworku
Cel´ y framework je zabalen´ y jako *.jar soubor a staˇc´ı jej k projektu pouze pˇripojit. V prostˇred´ı Eclipse je postup n´asleduj´ıc´ı: 1. vytvoˇrit v projektu adres´aˇr libs, pokud jiˇz neexistuje 2. nakop´ırovat do adres´aˇre knihovnu frameworku 3. pˇridat knihovnu do Build path projektu pˇres Project -> Properties -> Java Build Path -> Libraries -> Add JARs
36
Location Framework
Integrace frameworku
Listing 6.4: Pˇrihl´aˇsen´ı k odbˇeru polohy s vyuˇzit´ım Google Play Services [18]. public class MainActivity extends Activity implements ConnectionCallbacks,OnConnectionFailedListener,LocationListener { private LocationClient lc; private LocationRequest; // metoda zajistujici iniciaci aktivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // protoze trida implementuje rozhrani ConnectionCallbacks a // OnConnectionFailedListener lze vyuzit jako argumenty this lc = new LocationClient(this, this, this); // pripojeni clienta pro odber sluzby lc.connect(); // vytvoreni prazdneho pozadavku lr = LocationRequest.create(); // nastaveni zpusobu ziskavani lokace lr.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); // interval pro vyzadani lokace aktivne lr.setInterval(100000); // interval pro obdrzeni lokace od jinych aplikaci pasivne lr.setFastestInterval(10000); } // volana ve chvili, kdy je LocationClient pripojen // pozadavek je vhodne umistit zde, protoze metoda lc.connect() // je asynchronni @Override public void onConnected(Bundle dataBundle) { lc.requestLocationUpdates(lr, this); } // volana pri notifikaci o zmene polohy @Override public void onLocationChanged(Location location) {...} ...
37
7 Aplikace Pro ovˇeˇren´ı pouˇzitelnosti frameworku je vhodn´a implementace aplikace, kter´a jej vyuˇz´ıv´a. Zvolil jsem aplikaci pro sd´ılen´ı pozice a vizualizaci u ´ˇcastn´ık˚ u na mapˇe. Uˇzivatel m˚ uˇze vytvoˇrit skupinu a jej´ı ID a heslo pˇredat jin´ ym uˇzivatel˚ um, kteˇr´ı se mohou do skupiny pˇrihl´asit. Uˇzivatel´e v r´amci skupiny se vz´ajemnˇe vid´ı na mapˇe. Uˇzivatel m˚ uˇze b´ yt pˇrihl´aˇsen ve v´ıce map´ach a mezi skupinami m˚ uˇze vyb´ırat. Aplikace ovˇsem slouˇz´ı k ovˇeˇren´ı funkˇcnosti a nalezen´ı pˇr´ıpadn´ ych moˇznost´ı vylepˇsen´ı. K jej´ımu detailn´ımu pochopen´ı m˚ uˇze ˇcten´aˇr nahl´ednout do pˇriloˇzen´ ych zdrojov´ ych k´od˚ u.
7.1
Datov´ y model
Model (viz Obr´azek 7.3) sest´av´a ze tˇr´ı tabulek. Skuteˇcnost, ˇze uˇzivatel (User ) m˚ uˇze b´ yt pˇrihl´aˇsen ve v´ıce skupin´ach (Groups), vede na vazbu m:n, kter´a je rozloˇzena v tabulce GroupUser. Na zaˇr´ızen´ı vˇsak datab´azi vyuˇz´ıvat nebudeme, aby bylo moˇzn´e uk´azat moˇznosti frameworku. Proto jsou v aplikaˇcn´ı ˇc´asti data reprezentov´ana za pomoci modelov´ ych tˇr´ıd (viz Obr´azek 7.4).
7.2
Pouˇ zit´ı frameworku
Aplikace vyuˇz´ıv´a kromˇe modelov´ ych tˇr´ıd i implementaci abstraktn´ı tˇr´ıdy NetworkService - BaseService. Implementac´ı dev´ıti abstraktn´ıch metod se z t´eto sluˇzby st´av´a komunikaˇcn´ı centrum aplikace. getBinder vrac´ı objekt IBinder. Ten je vr´acen pˇri spuˇstˇen´ı sluˇzby z aktivity jako v´azan´e. IBinder pak zpˇr´ıstupˇ nuje veˇrejn´e metody a promˇenn´e. buildTrayNotification je obalovac´ı metodou volanou jiˇz pˇri vytv´aˇren´ı sluˇzby. Jej´ım u ´ˇcelem je zajistit, aby sluˇzba mˇela neust´al´ y z´aznam panelu 38
Aplikace
Pouˇzit´ı frameworku
notifikac´ı a t´ım bylo zˇrejm´e, ˇze aplikace bˇeˇz´ı. setupPropertiesOfLocationRequest je tak´e obalovac´ı metodou vyb´ızej´ıc´ı k inicializaci a nastaven´ı instanc´ı LocationClient a LocationRequest pro pravideln´e z´ısk´av´an´ı zmˇen polohy. processResponse je metoda volan´a pro zpracov´an´ı odpovˇedi na HTTP poˇzadavek. Uvnitˇr metody je vhodn´e rozliˇsit zpracov´an´ı odpovˇedi na z´akladˇe URL nebo akce, ze kter´e odpovˇed’ pˇriˇsla. handleSendDataError je vyuˇzita v pˇr´ıpadˇe, ˇze dojde k vyvol´an´ı v´ yjimky pˇri odes´ıl´an´ı HTTP poˇzadavku. V pˇr´ıpadˇe BaseService doch´az´ı k odesl´an´ı broadcastov´e zpr´avy o chybˇe pˇri odes´ıl´an´ı a reakce je ponech´ana na odbˇeratel´ıch. handleSendWorkerThreadError zajiˇst’uje reakci na chybu ve vl´aknˇe, kter´e obstar´av´a spooling intent˚ u odes´ılan´ ych na server. BaseService tuto ud´alost implementuje opˇetovn´ ym spuˇstˇen´ım vl´akna. setupRepeater je obalovac´ı metoda k inicializaci a nastaven´ı TimerTask a Timer. To lze vyuˇz´ıt pro pravideln´e u ´kony jako v pˇr´ıpadˇe BaseService, kde je odes´ıl´ana vlastn´ı pozice na server. Spustit ˇci zastavit tyto opakovan´e akce lze zasl´an´ım broadcastov´e zpr´avy s pˇr´ısluˇsn´ ym identifik´atorem. customActions je d˚ uleˇzitou metodou. Parametrem je zpr´ava zaslan´a broadcastem a t´ım lze uvnitˇr metody vytvoˇrit rozhodovac´ı strom na z´akladˇe typu akce ve zpr´avˇe. Potomky NetworkService lze jako jin´e sluˇzby spouˇstˇet z aktivity metodou startService(Intent i), kde je nutn´e vloˇzit jako data seznam ˇretˇezcov´ ych identifik´ator˚ u pod kl´ıˇcem NSI REGISTER ACTIONS, na kter´e bude sluˇzba reagovat. Pokud nebude identifik´ator v seznamu, budou takto oznaˇcen´e broadcastov´e zpr´avy sluˇzbou ignorov´any. Pˇri vlastn´ı implementaci tˇr´ıdy NetworkService je vhodn´e si nejdˇr´ıve prohl´ednout tuto abstraktn´ı tˇr´ıdu, protoˇze jiˇz obsahuje nˇekolik konstant a promˇenn´ ych, resp. atribut˚ u, kter´e staˇc´ı inicializovat jako v pˇr´ıpadˇe TimerTask, Timer, LocationClient atp. Pro zobrazov´an´ı mapy je vyuˇzit MixedTileProvider, kter´ y umoˇzn ˇuje ukl´ad´an´ı mapov´ ych dlaˇzdic do u ´loˇziˇstˇe.
39
Aplikace
Komunikace s frameworkem
Aplikace slouˇz´ı k demonstraci funkˇcnosti frameworku, proto bylo vynech´ano ˇsifrov´an´ı dat. Pˇri re´aln´em nasazen´ı by bylo vhodn´e zabezpeˇcit pˇren´aˇsen´a data skrze spojen´ı https nebo ˇsifrov´an´ım JSON dat za pomoci AES knihovny obsaˇzen´e ve frameworku.
7.3
Komunikace s frameworkem
Kaˇzd´a aktivita nebo sluˇzba, kter´a chce s frameworkem, resp. se sluˇzbou BaseService, komunikovat, mus´ı implementovat vlastn´ı BroadcastReceiver, ve kter´em bude reagovat na pˇr´ıchoz´ı zpr´avy. Tento pak mus´ı zaregistrovat pomoc´ı LocalBroadcastManageru, pomoc´ı kter´eho mus´ı i zas´ılat broadcastov´e zpr´avy sluˇzbˇe. Je patrn´e, ˇze v aplikaci se vyskytuje mnoho ˇretˇezcov´ ych konstant jak pro n´azvy akc´ı Intent˚ u, tak pro kl´ıˇce k promˇenn´ ym obsaˇzen´ ym uvnitˇr Intent˚ u. Vˇsechny tyto konstanty jsou um´ıstˇen´e ve tˇr´ıdˇe ConnConsts.
7.4
Uˇ zivatelsk´ a dokumentace
Pˇri prvn´ım spuˇstˇen´ı uˇzivatel v sekci Settings vypln´ı URL serveru a pˇripoj´ı se (viz obr. 7.2). T´ım se verifikuje, zda je server k dispozici. Pokud ano, uloˇz´ı se adresa k dalˇs´ımu vyuˇz´ıv´an´ı a uloˇzena jiˇz z˚ ustane perzistentnˇe. V sekci Manage User m˚ uˇze uˇzivatel vytvoˇrit nov´eho uˇzivatele ˇci zmˇenit sv˚ uj st´avaj´ıc´ı koment´aˇr. Ovˇsem je nutn´e pˇri kaˇzd´em spuˇstˇen´ı aplikace, aby se uˇzivatel pˇrihl´asil. T´ım se nejen ovˇeˇr´ı jeho u ´daje, ale tak´e st´ahnou skupiny, do kter´ ych je pˇrihl´aˇsen. V z´aloˇzce Groups m˚ uˇze spravovat skupiny, v nichˇz je pˇrihl´aˇsen, nebo vytvoˇrit novou. V seznamu skupin m˚ uˇze volit a t´ım filtrovat uˇzivatele zobrazen´e na mapˇe v z´aloˇzce Map (viz obr. 7.1).
40
Aplikace
7.5
Instalace aplikace
Instalace aplikace
V nastaven´ı zaˇr´ızen´ı s OS Android je nutn´e povolit instalaci z nezn´am´ ych zdroj˚ u. Pak lze aplikaci instalovat kliknut´ım na odkaz s *.apk souborem. Dalˇs´ı variantou vyuˇz´ıvanou i pˇri testov´an´ı je pˇripojen´ı telefonu k PC a n´asledn´e spuˇstˇen´ı projektu v prostˇred´ı Eclipse nebo Android Studiu. V tomto pˇr´ıpadˇe je ovˇsem nutn´e m´ıt nainstalovan´ y potˇrebn´ y USB driver, aby PC bylo schopn´e zaˇr´ızen´ı detekovat a komunikovat s n´ım.
7.6
Testov´ an´ı
Testov´an´ı aplikace prob´ıhalo na dom´ac´ı Wi-Fi s´ıti. Jako server slouˇzilo PC s OS GNU/Linux (Elementary OS Luna), jako klientsk´a zaˇr´ızen´ı tablet Ainol Novo Flame (Android ICS) a Samsung Galaxy Y (Android Custom ROM odpov´ıdaj´ıc´ı verzi 4.4). Server byl nejdˇr´ıve testov´an zas´ıl´an´ım ruˇcnˇe vytvoˇren´ ych POST request˚ u, teprve n´aslednˇe byl testov´an s fyzick´ ymi zaˇr´ızen´ımi. Kontrola spoˇc´ıvala ve vyhodnocen´ı JSON odpovˇed´ı a z´aroveˇ n kontrole tabulek v datab´azi pomoc´ı pˇr´ıkaz˚ u select. Aby bylo moˇzn´e pˇr´ıstroje pohodlnˇe testovat, byla zvolena varianta podvrˇzen´ ych pozic. Telefon˚ um byly nastaveny faleˇsn´e pozice a bylo ovˇeˇreno, ˇze se hr´aˇci na mapˇe uvid´ı. Dalˇs´ı f´az´ı testov´an´ı byl pohyb zaˇr´ızen´ı kolem domu na stejn´em serveru a Wi-Fi. Jako zdroj pozic bylo vyuˇzito GPS. Posledn´ı f´az´ı bylo testov´an´ı reakc´ı na z´amˇernˇe vytvoˇren´e chybov´e situace jako je vypadnut´ı serveru ˇci ruˇcn´ı smaz´an´ı uloˇzen´ ych mapov´ ych podklad˚ u.
41
Aplikace
Testov´an´ı
Obr´azek 7.1: Uk´azka vizualizace mapy s podklady OpenStreetMaps.
Obr´azek 7.2: Aktivita pro ovˇeˇren´ı spojen´ı se serverem a pˇrihl´aˇsen´ı.
42
Aplikace
Testov´an´ı
Obr´azek 7.3: Diagram vyuˇz´ıvan´ ych entit.
Obr´azek 7.4: Diagram entit v mobiln´ı aplikaci.
43
8 Server Druh´a ˇc´ast aplikace je serverov´a ˇc´ast. Pro uk´azkovou aplikaci bylo nˇekolik poˇzadavk˚ u na server: • zn´am´ y programovac´ı jazyk • jednoduch´a implementace • pˇrenositelnost • jednoduch´a instalace Tyto poˇzadavky splˇ nuje framework web.py [24]. Jak koncovka napov´ıd´a, jedn´a se o jazyk Python [3]. Cel´ y server byl implementov´an a testov´an na operaˇcn´ım syst´emu GNU/Linux, konkr´etnˇe Elementary OS verze Luna. Proto je i veˇsker´a instalace pops´ana pro tento OS.
8.1
Struktura serveru
Veˇsker´e soubory jsou obsaˇzeny v adres´aˇri src/WebServer (viz pˇr´ıloha A). • create.sql - skript pro vytvoˇren´ı tabulek • server.py - samotn´e j´adro serveru • userLib.py - knihovna pro spr´avu uˇzivatel˚ u • groupLib.py - knihovna pro spr´avu skupin • groupUserLib.py - knihovna pro pˇrihl´aˇsen´ı a odhl´aˇsen´ı ze skupiny • aesCrypto.py - knihovna pro ˇsifrov´an´ı a deˇsifrov´an´ı textu metodou AES
44
Server
8.1.1
Struktura serveru
Datab´ aze
Jako datab´aze byla z n´asleduj´ıc´ıch d˚ uvod˚ u zvolena Sqlite3. • je obsaˇzena v ˇradˇe distribuc´ı GNU/Linux jiˇz v z´akladu • nen´ı tˇreba ˇreˇsit pˇr´ıstupov´a pr´ava • veˇsker´a data v jedin´em pˇrenosn´em souboru Datab´aze odpov´ıd´a diagramu 7.3. Umoˇzn ˇuje tedy udrˇzovat uˇzivatele pˇrihl´aˇsen´e do v´ıce skupin. V datab´azi je nastaven´e kask´adov´e maz´an´ı, pokud je tedy smaz´ana skupina nebo uˇzivatel, jsou souvisej´ıc´ı z´aznamy odstranˇeny z rozkladov´e tabulky. ´ Uskal´ ım Sqlite3 je fakt, ˇze po spuˇstˇen´ı nepracuje s ciz´ımi kl´ıˇci. Toho lze doc´ılit pˇr´ıkazem PRAGMA foreign keys=ON;. Ovˇsem pokud je pˇr´ıkaz odes´ıl´an ze serveru, je odesl´an jako samostatn´ y poˇzadavek. Proto bylo nutn´e pˇr´ıstup pozmˇenit a dotazy na datab´azi prov´adˇet uvnitˇr transakce, kdyˇz je nejdˇr´ıve zasl´an tento pˇr´ıkaz a teprve n´aslednˇe samotn´ y dotaz.
8.1.2
Instalace datab´ aze
Pokud distribuce neobsahuje Sqlite3, lze ji nainstalovat pˇres manager, jako je Synaptic nebo napˇr´ıklad pˇr´ıkazem sudo apt-get install sqlite3. K vytvoˇren´ı tabulek v datab´azi slouˇz´ı skript create.sql ve sloˇzce src/WebServer. Pˇr´ıkazem sqlite3 gps.db < create.sql se v aktu´aln´ım adres´aˇri vytvoˇr´ı soubor gps.db, kter´ y bude obsahovat pr´azdnou datab´azi.
8.1.3
J´ adro serveru
J´adro je tvoˇreno souborem server.py. Vyuˇz´ıv´a framework web.py a pˇri pˇr´ıchoz´ım POST poˇzadavku pˇred´av´a JSON z poˇzadavku, ID uˇzivatele a kontext datab´aze pˇr´ısluˇsn´e metodˇe z pˇr´ıtomn´ ych knihoven. Ta vykon´a pr´aci nad datab´az´ı a vrac´ı JSON odpovˇed’, kter´a je odesl´ana jako odpovˇed’ na HTTP poˇzadavek.
45
Server
8.1.4
Struktura serveru
Instalace a spuˇ stˇ en´ı
Pro spuˇstˇen´ı serveru je nutn´a instalace frameworku web.py. To je dle m´eho n´azoru nejjednoduˇsˇs´ı skrze program easy install obsaˇzen´ y v bal´ıku pythonsetuptool. Nejdˇr´ıve je tedy nutn´e instalovat tento bal´ık pˇr´ıkazem sudo apt-get install python-setuptools a n´aslednˇe instalovat framework sudo easy install web.py. Server se spouˇst´ı pˇres pˇr´ıkazovou ˇra´dku python server.py 0.0.0.0:8080. IP adresa by mˇela b´ yt samozˇrejmˇe nahrazena veˇrejnou IP adresou stroje. Server pos´ıl´a na v´ ystup vyˇsker´e chybov´e zpr´avy, dotazy do datab´aze ˇci z´aznamy o pˇr´ıchoz´ıch HTTP dotazech a k´ody HTTP odchoz´ıch odpovˇed´ı.
46
9 Z´avˇer C´ılem pr´ace bylo vytvoˇren´ı knihovny zjednoduˇsuj´ıc´ı implementaci locationbased aplikac´ı pro platformu Android. K tomu bylo nezbytn´e analyzovat a porovnat moˇznosti lokalizace mobiln´ıch pˇr´ıstroj˚ u. Po prvotn´ı anal´ yze lokalizaˇcn´ıch metod bylo zjiˇstˇeno, jak´ ym zp˚ usobem jsou tyto metody zpˇr´ıstupnˇeny na platformˇe Android. Zde je nutn´e poznamenat, ˇze API Google Map se v pr˚ ubˇehu pr´ace zmˇenilo a bylo nutn´e anal´ yzu prov´est znovu. Na z´akladˇe znalost´ı z pˇredchoz´ıch ˇca´st´ı pr´ace bylo jeˇstˇe nutn´e nal´ezt spoleˇcn´ y pr˚ unik vlastnost´ı ˇcasto vyˇzadovan´ ych u location-based aplikac´ı. N´asledovala implementace samotn´eho frameworku, kdy bylo nezbytn´e vyˇreˇsit nˇekolik probl´em˚ u jako napˇr. dostateˇcnˇe komplexn´ı pˇred´av´an´ı zpr´av uvnitˇr aplikace. Tyto probl´emy se uk´azaly jako z´asadn´ı, protoˇze framework vyuˇz´ıv´a nˇekolik vl´aken, kter´a nemohou pˇr´ımo mˇenit uˇzivatelsk´e rozhran´ı. Naopak hlavn´ı vl´akno aplikace nem˚ uˇze v novˇejˇs´ıch verz´ıch Androidu napˇr. odes´ılat pˇr´ımo http poˇzadavek. Posledn´ı ˇca´st´ı byl n´avrh a implementace uk´azkov´e aplikace a potˇrebn´eho webov´eho serveru. Protoˇze se jedn´a o demonstraˇcn´ı aplikaci, je navrˇzena dosti genericky a pro dalˇs´ı vyuˇzit´ı by bylo vhodn´e ji jeˇstˇe modifikovat. Framework v´ yvoj´aˇri usnadˇ nuje ˇcast´e u ´kony, jako ukl´ad´an´ı mapov´ ych podklad˚ u, komunikace se serverem, ˇsifrov´an´ı dat, omezen´ı prostoru mapy ˇci asynchronn´ı zpracov´an´ı zpr´av. Skrze abstraktn´ı sluˇzbu v´ yvoj´aˇre vede v´ yvojem nov´e aplikace a pom´ah´a mu neztratit se v, dle mˇe dosti sloˇzit´em, syst´emu komunikace vl´aken. Dalˇs´ı moˇzn´e vylepˇsen´ı vid´ım v anal´ yze a pˇr´ıpadn´e implementaci urˇcov´an´ı polohy pouze na z´akladˇe dat z integrovan´eho akcelerometru.
47
Seznam pouˇ zit´ ych zkratek API apod. atd. atp. BTS CELL ID GCM GPS GSM JSON LB mj. MT napˇr. obr. OO OS OSM POI popˇr. TA tj. TS tzv. UTM V1 V2 2D 3D
Aplication Programming Interface a podobnˇe a tak d´ale a tak podobnˇe Base Transceiver Station vys´ılaˇc/pˇrij´ımaˇc unik´atn´ı identifik´ator BTS Google Cloud Messaging Global Positioning System Groupe Sp´ecial Mobile JavaScript Object Notation Location-based mimo jin´e mobiln´ı telefon napˇr´ıklad obr´azek objektovˇe orientovan´ y operaˇcn´ı syst´em OpenStreetMaps Point Of Interest popˇr´ıpadˇe Timing Advance to jest Time Slot takzvan´ y Universal Transverse Mercator Android Google Maps API verze 1 Android Google Maps API verze 2 dvourozmˇern´ y trojrozmˇern´ y
48
Zdroje [1] Mark L. Murphy: Android 2 Pr˚ uvodce programov´an´ım mobiln´ıch aplikac´ı Computer Press, a. s., 2011 ISBN 978-80-251-3194-7 [2] Grant Allen: Android 4 Pr˚ uvodce programov´an´ım mobiln´ıch aplikac´ı Computer Press, a. s., 2013 ISBN 978-80-251-3782-6 [3] Daryl Harms, Kenneth McDonald: Zaˇc´ın´ame programovat v jazyce Python Computer Press, a. s., 2008 ISBN 978-80-251-2161-0 [4] V´alcov´a zobrazen´ı jednoduch´a [on-line] [cit. 10. 2. 2014] http://gis.zcu.cz/studium/mk2/multimedialni_texty/ index_soubory/hlavni_soubory/jednoduch_soubory/valec.html [5] Using geographic coordinates [on-line] [cit. 11. 2. 2014] https://support.google.com/earth/answer/148106?hl=en [6] Stackoverflow - Maximum Lat and Long bounds for the world - Google Maps API LatLngBounds() [on-line] [cit. 11. 2. 2014] http://stackoverflow.com/questions/11849636/ maximum-lat-and-long-bounds-for-the-world-google-maps-apilatlngbounds/13824556#13824556 [7] Dr. Ondˇrej Franˇek: Lokalizace volaj´ıc´ıho pˇri t´ısˇ nov´em vol´an´ı z mobiln´ıho telefonu [on-line] [cit. 15. 2. 2014] http://www.zachrannasluzba.cz/odborna/0306_lokmt.htm, 2003 [8] Tom´aˇs Dosedˇel: Nen´ı jenom GPS: pˇrehled navigaˇcn´ıch syst´em˚ u [on-line] [cit. 22. 2. 2014] 49
ZDROJE
ZDROJE
http://www.mobinfo.cz/neni-jenom-gps-prehled-navigacnichsystemu/, 2012 [9] GPS - Space Segment [on-line] [cit. 1. 3. 2014] http://www.gps.gov/systems/gps/space/, 2014 [10] GLONASS - Guide [on-line] [cit. 1. 3. 2014] http://glonass-iac.ru/en/guide/navfaq.php [11] Google Geolocation API [on-line] [cit. 5. 3. 2014] https://developers.google.com/maps/documentation/ business/geolocation/ [12] Navizon - Wi-Fi and Cell-ID location [on-line] [cit. 5. 3. 2014] http://www.navizon.com/wifi-cell-tower-location-database [13] Unwired Labs - Location API [on-line] [cit. 5. 3. 2014] http://unwiredlabs.com/ [14] Google Play Services [on-line] [cit. 10. 3. 2014] http://developer.android.com/google/play-services/index.html [15] Google Cloud Messaging for Android [on-line] [cit. 12. 3. 2014] http://developer.android.com/google/gcm/gcm.html [16] Android Developer Reference - LocationManager [on-line] [cit. 14. 3. 2014] http://developer.android.com/reference/android/ location/LocationManager.html [17] Android Developer Reference - LocationRequest [on-line] [cit. 14. 3. 2014] http://developer.android.com/reference/com/google/ android/gms/location/LocationRequest.html [18] Android Developer Reference - Receive Location Updates [on-line] [cit. 14. 3. 2014] http://developer.android.com/training/location/receivelocation-updates.html [19] Android Developer Reference - TileOverlay [on-line] [cit. 14. 3. 2014] http://developer.android.com/reference/com/google/ android/gms/maps/model/TileOverlay.html
50
ZDROJE
ZDROJE
[20] An Open-Source JavaScript Library for Mobile-Friendly Interactive Maps [on-line] [cit. 5. 3. 2014] http://leafletjs.com/ [21] OpenStreetMap - About [on-line] [cit. 20. 3. 2014] http://www.openstreetmap.org/about [22] OpenCellId [on-line] [cit. 6. 3. 2014] http://opencellid.org/#&action=statistics.measurements &sortByRadio=2&dateFrom=&dateTo=&mcc=&mnc= [23] MapQuest - Open APIs [on-line] [cit. 2. 4. 2014] http://developer.mapquest.com/web/products/open [24] Web.py Framework - Tutorial [on-line] [cit. 10. 4. 2014] http://webpy.org/docs/0.3/tutorial
51
A Adres´aˇrov´a struktura pr´ace / bp.pdf latex ......................... zdroje pro generov´an´ı pr´ace v LATEX images ................................. obr´azky vyuˇzit´e v pr´aci source ........................... zdrojov´e k´ody vyuˇzit´e v pr´aci src Map................................cel´ y Eclipse projekt aplikace assets bin gen libs.............................knihovny vyuˇzit´e v aplikaci res src ............................... zdrojov´e soubory aplikace framework.jar AndroidManifest.xml WebServer ............................... zdrojov´e k´ody serveru aesCrypto.py create.sql....................script pro vytvoˇren´ı datab´aze groupLib.py groupUserLib.py userLib.py server.py ......................... script samotn´eho serveru
Adres´aˇrov´a struktura pˇriloˇzen´eho CD. M´enˇe v´ yznamn´e soubory, jako konfiguraˇcn´ı soubory Eclipse projektu nebo generovan´e soubory nutn´e pro spouˇstˇen´ı Android projektu na telefonu, jsou vynech´any.
52