Equa ion Chap e 1 Sec ion 1
T abajo Fin de G ado
G ado en Ingenie ía de las Tecnologías de
Telecomunicación
Implemen ación de una he amien a dis ibuida pa a
el seguimien o de una lo a de ehículos
Au o : Vicen e Jesús Mayo Gallego
Tu o : An onio José Es epa Alonso
Dep. de Ingenie ía Telemá ica
Escuela Técnica Supe io de Ingenie ía
Uni e sidad de Se illa
Se illa, 2015
ii
iii
T abajo Fin de G ado
G ado en Ingenie ía de las Tecnologías de Telecomunicación
Implemen ación de una he amien a dis ibuida
pa a el seguimien o de una lo a de ehículos
Au o :
Vicen e Jesús Mayo Gallego
Tu o :
An onio José Es epa Alonso
P o eso i ula
Dep. de Ingenie ía Telemá ica
Escuela Técnica Supe io de Ingenie ía
Uni e sidad de Se illa
Se illa, 2015
i
T abajo Fin de G ado: Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de
ehículos
Au o :
Vicen e Jesús Mayo Gallego
Tu o :
An onio José Es epa Alonso
El ibunal nomb ado pa a juzga el P oyec o a iba indicado, compues o po los siguien es miemb os:
P esiden e:
Vocales:
Sec e a io:
Acue dan o o ga le la cali icación de:
Se illa, 2015
El Sec e a io del T ibunal
i
ii
A mi amilia
A mis maes os
iii
ix
Ag adecimien os
En p ime luga , me gus a ía ag adece a mi u o , An onio, po habe me dado la opo unidad de abaja en
es e p oyec o, así como a odos los maes os y p o eso es que me han ido o mando desde que e a pequeño
has a hoy.
En segundo luga , ag adece a odos aquellos que me han ayudado en a eas de depu ación y p uebas de la
he amien a.
También quie o ag adece a mis pad es po apoya me en odo momen o, aconseja me lo mejo posible y
deposi a una eno me con ianza en mi, b indándome la opo unidad de es udia lo que me gus a.
Y po úl imo, a mi pa eja po su paciencia y ca iño, animándome y apoyándome cada ez que lo he
necesi ado.
Todos o máis pa e de es e abajo y sin oso os no hubie a sido posible, muchas g acias.
Vicen e Jesús Mayo Gallego
Se illa, 2015
x i
Figu a 6-8. Índice de la página web 59!
Figu a 6-9. Conduc o es en la página Web 59!
Figu a 6-10. Seleccionado de echa y ho a en la página web 60!
Figu a 6-11. Ac i ada la is a de allada en la página web 60!
Figu a 6-12. Ficha de allada de una sesión en la página web 61!
Figu a 6-13. Sección de adminis ación en la página web 62!
Figu a 7-1. Regis o de usua ios y ehículos 69!
Figu a 7-2. Ajus es en la aplicación mó il 70!
Figu a 7-3. En ada en lis a de sesiones. 70!
Figu a 7-4. Seguimien o en iempo eal en el clien e. 71!
Figu a 7-5. Seguimien o en iempo eal en el se ido . 71!
Figu a 7-6. Sesión comple a en el clien e 71!
Figu a 7-7. Sesión comple a en el se ido 71!
Figu a 7-8. De alles de una sesión 72!
Figu a 7-9. G á icas de una sesión 72!
Figu a 7-10. Ficha de allada de un conduc o 73!
Figu a 7-11. Visualización de odos los conduc o es en el mapa. 74!
Figu a 7-12. Vis a gene al de sesiones 74!
Figu a 7-13. Fil ado de sesiones po echas 75!
Figu a 7-14. Fil ado de allado de una sesión 75!
Figu a 7-15. In o me gene ado en hoja de cálculo 75!
Figu a 9-1. Diag ama de clases del clien e 86!
x ii
1
1 INTRODUCCIÓN
n la ac ualidad, exis en muchas emp esas que ponen al se icio de sus abajado es un conjun o de
ehículos pa a que puedan ealiza sus labo es p o esionales, como po ejemplo los negocios de
anspo e o aquellos que o ezcan cualquie ipo de se icio a domicilio.
Sin emba go, el endimien o ob enido de es a lo a de ehículos puede e se me mado si no seguimos algunas
p ác icas de ges ión o adminis ación.
Resul a complejo ges iona es os elemen os sin una co ec a moni o ización y es e con ol no es sencillo si no
u ilizamos he amien as au oma izadas. Po desg acia, en la mayo ía de los casos es as he amien as son de
ele ado cos e y además, equie en la comp a e ins alación de algún disposi i o de uso especí ico, es deci , un
localizado GPS.
La mayo ía de las pequeñas y medianas emp esas no disponen de ehículos ni ecu sos económicos su icien es
como pa a que la ins alación de es os disposi i os sea en able y, po an o, muchas deciden no u iliza
he amien as mode nas pa a la moni o ización de su lo a de ehículos.
La moni o ización emo a au oma izada de ehículos puede se muy ú il no sólo pa a la adminis ación de los
mismos, sino incluso pa a los p opios conduc o es den o de la emp esa; pongamos un ejemplo:
Supongamos que en una emp esa de elecomunicaciones se de ec a una a e ía en un pun o de la ed, si
conocemos la ubicación de odos los ehículos de la emp esa, se pod ía asigna la a ea de e isa esa a e ía al
écnico capaci ado más ce cano a ese pun o, aho ando iempo y combus ible y, en conclusión, o eciendo un
se icio más e icien e.
En e los obje i os de es e seguimien o no sólo se encuen a la ubicación en iempo eal, sino que además
ecolec a emos la siguien e in o mación: dis ancia y elocidad media de conduc o es y ehículos, ho as o ales
de ci culación, con abilidad de incidencias de los conduc o es, uso indebido de los ehículos, e c.
Una ez ecolec ada oda es a in o mación, se pod án u iliza como base en la aplicación de medidas
co ec i as con el obje i o de mejo a la e iciencia. Po ejemplo, en una emp esa de epa o a domicilio se
pod ía es udia la pun ualidad de las en egas pa a pode mejo a el se icio o dis ibui de mane a más
e icien e el pe sonal.
Como conclusión, median e una co ec a moni o ización pod íamos ob ene una se ie de en ajas:
• Aumen o de la p oduc i idad al pe mi i una mejo plani icación y asignación de los conduc o es a sus
ehículos, así como su moni o ización en iempo eal.
• Reducción de los cos es, ya que una mayo p oduc i idad y e iciencia de las sesiones de conducción
pe mi e que el combus ible consumido sea meno .
• Aumen o de la segu idad y calidad del se icio p es ado ya que se pod án ealiza es udios ace ca de la
pun ualidad de los conduc o es, así como de su es ilo de conducción.
Po odo lo expues o an e io men e, es e documen o a a á el diseño y desa ollo de una he amien a de
moni o ización de ehículos, con el obje i o de soluciona los p oblemas de cos e y lexibilidad que las
al e na i as ac uales p esen an.
E
3
2 MERCADO ACTUAL
n es de comenza a de ini nues a p opues a, es necesa io busca in o mación ace ca de las soluciones
que se o ecen de mane a come cial en el me cado ac ual. En es a sección nos cen a emos en algunos
de los se icios que se o ecen ac ualmen e pa a cub i es a necesidad [1].
2.1 Mo is a y TomTom
En p ime luga , es udiemos el se icio que o ece Mo is a jun o con TomTom [2].
Den o de es e se icio de nomb e Seguimien o GPS, encon amos es modalidades dis in as.
• En la p ime a de las soluciones, llamada Seguimien o Ca Click, el agen e es un localizado po pue o
OBD II sólo álido pa a u ismos y u gone as de menos de 3.500 kg. Posee un p ecio de al a de
95,59€1 y una cuo a mensual de 27,71€ po licencia, o eciendo descuen os po olumen de licencias.
• En la segunda solución, llamada Seguimien o Flo as, es necesa io ins ala un localizado emba cado
(Modelo MTX65) siendo su p ecio po unidad de 175,45€ y una cuo a mensual de 26,50€ po licencia
o eciendo ambién descuen os po olumen de licencias.
• Como solución más económica, aunque no iden i ique ehículos sino conduc o es, exis e una
al e na i a llamada Seguimien o Mó iles consis en e en la ins alación de una aplicación en un
e minal mó il pa a su seguimien o. Su cuo a mensual po licencia es de 20,45€2 y es combinable con
las o as dos soluciones pa a ob ene un seguimien o eal de ehículos y pe sonas.
En cuan o a las ope aciones de consul a de la in o mación ecolec ada que se pe mi en, des acamos las
siguien es.
• Localización de la lo a y isualización de ayec os.
• C eación de in o mes.
• Ges ión de zonas.
• Visualización de amos conducidos con exceso de elocidad espec o a la ía.
• C eación de ale as.
Tal y como se dice en la página web, es os se icios cub en las necesidades básicas de localización y ges ión
de una lo a, aunque sus es icciones pueden esul a una di icul ad pa a cie as emp esas.
• Es necesa io se clien e de Tele ónica.
• Las dos p ime as soluciones o ecen seguimien o de ehículos mien as que la e ce a o ece
seguimien o de usua ios, po lo an o, la única mane a pa a moni o iza ambos simul áneamen e es la
combinación de ambos se icios, siendo el cos e esul an e muy ele ado.
2.2 Ve izon
O a compañía econocida que o ece un se icio simila es Ve izon [3]. El se icio iene bajo el nomb e
Ne wo kFlee y se p opone como un sis ema de seguimien o de lo as asequible y sencillo de usa .
En cuan o a los p ecios no se encuen a demasiada in o mación en su página web. Únicamen e se menciona
que el p ecio base es 1$ po día y po ehículo. Respec o al disposi i o u ilizado como agen e, se u iliza un
localizado GPS conec ado po el pue o OBD-II.
1!IVA$incluido en los p ecios"
"
A
Me cado ac ual
4"
Las p incipales en ajas que se anuncian en su web son las siguien es:
• Robus ez del sis ema, es deci , se pueden consul a los da os en cualquie momen o.
• Independien e de so wa e, se accede á a a és de un na egado web.
• Un sis ema de o ganización y man enimien o po en e de la in o mación de los ehículos almacenados.
• Se pe mi e la con igu ación de ala mas.
• Asis encia en ca e e a sin cos e adicional.
Como incon enien e encon amos que a p io i no se iden i ica al conduc o en el seguimien o y al eque i un
disposi i o ísico pa a su uncionamien o, el p ecio puede esul a ele ado en algunos casos aunque la
asis encia en ca e e a p opo cionada pueda equilib a la balanza.
2.3 Flee is ics
Una solución mucho más comple a que las an e io es es el se icio o ecido po Flee is ics [4].
El obje i o de es e se icio, y así lo publici an en su web, es la mejo a del ROI de la emp esa consumido a y
pa a ello o ecen, en e o as, las siguien es en ajas:
• Sencillez de ins alación y sin cos e.
• Comple a moni o ización del ehículo, incluyendo el combus ible disponible y la salud del mo o y de
la ba e ía en e o os.
• Iden i icación del conduc o median e una e ique a NFC, impidiendo el a anque del ehículo sin es a
iden i icación p e ia.
• Compa ición de da os de localización.
• Visualización del seguimien o en iempo eal.
• Repo es de ac i idades y u as.
• Gene ación de excepciones o ala mas.
• A isos audi i os den o del ehículo.
• Po al web pa a la consul a de los da os.
Como podemos obse a , es un se icio muy comple o que ap o echa su mode no localizado GO7 po pue o
OBD pa a da in o mación de moni o ización muy comple a y además o ece iden i icación del conduc o
haciendo uso de la ecnología NFC. Sin emba go, no es posible consul a los p ecios sin pone nos en con ac o
ya que o ecen di e en es se icios, más o menos comple os, pa a adap a se a un ango mayo de público.
Como incon enien e sólo se pod ía des aca su disponibilidad geog á ica, ya que únicamen e da se icio a
Es ados Unidos y no conocemos el p ecio de es e se icio.
2.4 Conclusiones
Las soluciones analizadas p e iamen e pe mi en una moni o ización muy comple a de una lo a de ehículos
además de la adminis ación de la misma. Sin emba go, su complejidad desemboca en unos p ecios que un
amplio sec o emp esa ial no puede pe mi i se y p e e i ían enuncia a cie as uncionalidades a cambio de un
cos e meno .
Pa a inaliza , amos a sin e iza las soluciones expues as an e io men e en una abla compa a i a.
5
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
TABLA
COMPARATIVA
Cos e inicial po
ehículo
Cos e mensual po
ehículo
Disponibilidad en
España
Elemen os
iden i icados
Mo is a :
Seguimien o Ca Click
95,59€
27,71€
Sí
Vehículo
Mo is a :
Seguimien o lo as
175,45€
26,50€
Sí
Vehículo
Mo is a :
Seguimien o mó iles
0€
20,45€
Sí
Conduc o
Ve izon
Desconocido
30$
Desconocido
Vehículo
Flee is ics
Desconocido
Desconocido
No
Vehículo y
conduc o
7
3 OBJETIVOS
omo conclusión del análisis an e io , necesi amos una he amien a que cumpla dos condiciones: P ecio
asequible e iden i icación del ehículo y del conduc o de mane a conjun a en iempo eal.
Pa a ga an iza un p ecio educido, debemos e i a el uso de localizado es GPS ya que p esen an un
cos e ele ado an o de ins alación como de man enimien o en la mayo ía de los casos. Po an o,
ap o echa emos los e minales mó iles de nues os conduc o es como disposi i os agen es.
Los elé onos mó iles cada día poseen más po encia y g acias a la iangulación de an enas de ed y su módulo
GPS, o ecen una g an p ecisión y agilidad a la ho a de ealiza a eas de seguimien o. Además, su c ecimien o
en la sociedad hace que un al o po cen aje de la población de es e país posea un elé ono in eligen e con
po encia su icien e como pa a ealiza es e seguimien o po lo cual se pod ían u iliza pa a es e in.
Has a aquí, se pod ía iden i ica al conduc o y ealiza un seguimien o del pe sonal, sin emba go aún no
cumplimos nues a segunda condición, necesi amos iden i ica al ehículo. Pa a ello nues a solución es
ins ala o eu iliza algún ipo de disposi i o que se comunique con el e minal del usua io; los disposi i os de
manos lib es se con e i án en nues os iden i icado es del ehículo.
Es os disposi i os poseen una di ección ísica única que nos pe mi i án iden i ica un ehículo y, una ez
enlazado con el elé ono del conduc o , pod emos c ea una acción de dispa o del as eo cuando se p oduzca
la conexión en e la aplicación mó il y el disposi i o.
Du an e es e as eo, la aplicación mó il en ia á una se ie de da os a un se ido emo o que los ecopila á y
gene a á in o mación ú il pa a el adminis ado .
Una ez inalizada la conducción, el elé ono mó il se desconec a á del disposi i o Blue oo h y al p oduci se
es a acción, se da á in al seguimien o.
La in o mación gene ada se pod á consul a a a és de un na egado web dándose a conoce da os ele an es
que mejo a án la e iciencia y el ap o echamien o de es os ehículos. En e es a in o mación des acamos:
• Posición en iempo eal de ehículos y conduc o es o úl ima posición conocida en caso de que no
es én en seguimien o en ese ins an e.
• Du ación, dis ancia, elocidad y consumo medio de los iajes de un usua io o un ehículo.
• Visualización del eco ido de las dis in as sesiones de conducción egis adas en un mapa así como su
ma ca ho a ia de inicio y inal.
• Compa a i as g á icas en e un usua io, ehículo o u a en e al es o.
• Gene ación de in o mes en o ma o CSV, compa ible con las hojas de cálculo más u ilizadas.
• Adminis ación básica de conduc o es y ehículos, pe mi iéndose su egis o, habili ación o
deshabili ación.
En de ini i a, es posible lle a a cabo a eas de moni o ización de es e ipo sin in e i en nue os elemen os
ísicos al eu iliza disposi i os de manos lib es y elé onos mó iles in eligen es.
C
14
Reque imien os
La edacción de con enido HTML es muy sencilla y sólo es necesa io comp ende dos ipos de componen es
dis in os, los elemen os y los a ibu os.
4.4.1.1 Elemen os
Los elemen os son la es uc u a básica de HTML y poseen dos p opiedades; a ibu o y con enido.
Su sin axis es sencilla, ence ando el nomb e de elemen o y los a ibu os en e co che es angula es del
siguien e modo:
<nomb e_elemen o a ibu o=" alo "> CONTENIDO </nomb e_elemen o>
Es os elemen os se pueden inclui como con enido de o os elemen os y, de es e modo, podemos desc ibi un
documen o web.
<!DOCTYPE h ml>
<h ml>
<head>
< i le>Page Ti le</ i le>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a pa ag aph.</p>
</body>
</h ml>
El agmen o an e io es un ejemplo de documen o HTML. Como podemos no a , exis e una e ique a p incipal
(DOCTYPE) que indica el ipo de documen o y, a pa i de ahí, ami icamos elemen os pa a cons ui el
documen o.
Den o de la e ique a HTML se dis inguen siemp e una cabece a (head) y un cue po (body). En la cabece a se
añaden los me ada os de la página (el í ulo, po ejemplo), y en el cue po el con enido p opiamen e dicho del
documen o.
4.4.1.2 A ibu os
Den o de los elemen os podemos especi ica a ibu os, en la mayo ía de los casos se a a de pa es nomb e-
alo sepa ados median e la sin axis a ibu o=" alo ".
4.4.2 PHP
Ac ónimo ecu si o de PHP: Hype ex P ep ocesso [10], es un lenguaje de código abie o muy popula
o ien ado al desa ollo web y que puede se u ilizado conjun amen e con HTML.
Po o o lado, PHP es á cen ado en la p og amación de sc ip s (in e p e ado) en el lado del se ido . De es e
modo, en el se ido se p ocesa á un documen o PHP y gene a á con enido HTML pa a el clien e y, a di e encia
de Ja aSc ip , el clien e no pod á conoce el código que ha gene ado es e con enido es á ico.
El co azón de nues o se ido se basa á en PHP y ges iona á, en e o os, el acceso y edición a la base de
da os, sesiones de na egación y la gene ación de g an pa e del con enido dinámico.
Los agmen os esc i os en PHP se encie an en e e ique as <?php y ?> como podemos e en el siguien e
ejemplo:
<!DOCTYPE h ml>
15
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
<h ml>
<body>
<?php
echo "My i s PHP sc ip !";
?>
</body>
</h ml>
Las dis in as unciones PHP se pueden consul a en la documen ación de su página web.
4.4.3 Ja aSc ip
Ja aSc ip es un lenguaje de p og amación in e p e ado o ien ado a obje os p oceden e del es ánda
ECMASc ip .
La pa icula idad de es e lenguaje es que es ácilmen e empo a lo en con enido HTML pa a o ece
compo amien o dinámico en el lado del clien e, aunque hay a ian es que pe mi en su ejecución en el lado
se ido .
En nues a aplicación se u iliza á pa a alida o mula ios, usa la lib e ía jQue y y, po úl imo pe o no menos
impo an e, implemen a mapas usando la API de Google.
Los sc ip s de Ja aSc ip se encie an en e las e ique as <sc ip > y </sc ip > o bien se llaman
haciendo uso de los a ibu os de algunos elemen os, como podemos e en el siguien e ejemplo:
<!DOCTYPE h ml>
<h ml>
<body>
<h1>My Fi s Ja aSc ip </h1>
<bu on ype="bu on"
onclick="documen .ge Elemen ById('demo').inne HTML = Da e()">
Click me o display Da e and Time.</bu on>
<p id="demo"></p>
</body>
</h ml>
En es e ejemplo, al pulsa en el bo ón se modi ica el con enido (inne HTML) del pá a o de debajo a la ho a y
echa ac ual.
4.4.4 MySQL
MySQL [11] es un sis ema de ges ión de bases de da os elacional, mul ihilo y mul iusua io desa ollado como
so wa e lib e. Su po abilidad y su sencilla implemen ación en se icios web ha sido de e minan e pa a su uso
en nues a aplicación.
Es e ges o o ece in e aces de p og amación de aplicaciones que pe mi en a los dis in os lenguajes de
p og amación accede a las bases de da os MySQL. En nues o caso, los accesos se lle a án a cabo ía PHP.
4.5 Especi icación de equisi os del sis ema
En es e apa ado se edac a á la especi icación de equisi os pa a la que desa olla emos nues a he amien a,
16
Reque imien os
además, se han clasi icado y e ique ado pa a u u as e e encias [12].
4.5.1 Requisi os gene ales
RG001. La aplicación clien e debe á inicia el seguimien o al de ec a el inicio de una conexión Blue oo h.
RG002. La aplicación clien e debe á inaliza el seguimien o al de ec a el in de la conexión Blue oo h que la
inició.
RG003. Exis i á un po al web a a és del cual los usua ios pod án ealiza consul as sob e los da os
ecolec ados.
4.5.2 Requisi os uncionales
Los equisi os uncionales son aquellos que de inen una unción del so wa e a desa olla . A su ez, se han
clasi icado pa a pe mi i una mejo e e encia a ellos.
4.5.2.1 Casos de uso
CU001. El usua io pod á in oduci su usua io y con aseña en la aplicación clien e.
CU002. El usua io pod á in oduci la URL del se ido en la aplicación clien e.
CU003. El usua io pod á inicia un seguimien o manualmen e desde la aplicación clien e.
En es e seguimien o no se iden i ica á a ningún ehículo y se de ini á como un seguimien o manual.
CU004. El usua io pod á de ene un seguimien o manual desde la aplicación clien e.
CU005. El usua io pod á iden i ica se pa a accede a la página web.
CU006. El usua io pod á consul a in o mación ace ca de los conduc o es en la página web.
CU007. El usua io pod á consul a in o mación ace ca de los ehículos en la página web.
CU008. El usua io pod á consul a in o mación ace ca de las u as egis adas en la página web.
CU009. El usua io pod á da de baja an o a conduc o es como a ehículos en la página web.
CU010. El usua io pod á da de al a an o a conduc o es como a ehículos en la página web.
CU011. El usua io pod á gene a in o mes CSV de la in o mación que desee en la página web.
CU012. La aplicación clien e pod á negocia la inclusión de nue os da os a la base de da os del se ido .
4.5.2.2 Requisi os de in o mación
IN001. El mapa de la aplicación clien e mos a á la siguien e in o mación: un indicado de inicio de la u a, un
indicado del inal de la u a y la u a dibujada como una línea en e ambos pun os.
IN002. La aplicación clien e mos a á un mensaje en odo momen o in o mando de su es ado.
IN003. La aplicación clien e almacena á únicamen e la in o mación e e en e a las ubicaciones de la úl ima
u a o u a en cu so si la hubie a.
IN004. La aplicación clien e almacena á el usua io y la con aseña.
IN005. La in o mación almacenada en el se ido sob e los conduc o es se á: Usua io, con aseña, es ado
(habili ado o deshabili ado), nomb e y apellidos.
IN006. La in o mación almacenada en el se ido sob e los ehículos se á: Ma ícula, di ección ísica del
disposi i o Blue oo h asociado (MAC), modelo, es ado (habili ado o deshabili ado) y consumo medio cada 100
kilóme os.
IN007. La in o mación almacenada en el se ido sob e las sesiones se á: Iden i icado de sesión, ma ícula
del ehículo, usua io del conduc o y una lis a de ubicaciones po las que ha pasado.
17
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
IN008. La in o mación almacenada en el se ido sob e las di e en es ubicaciones de una sesión se á: o den de
llegada, la i ud, longi ud, ho a y echa del clien e, ho a y echa del se ido y posibles comen a ios.
IN009. A pa i de la in o mación almacenada en el se ido siguiendo los equisi os IN005, IN006, IN007 e
IN008; se pod á gene a más in o mación disponible pa a la consul a de los usua ios como po ejemplo la
elocidad.
4.5.2.3 Requisi os de conduc a
CO001. An es de cada seguimien o, la aplicación debe iden i ica al usua io y al ehículo a a és del se ido .
CO002. El seguimien o debe ealiza se en segundo plano.
CO003. En caso de cie e inespe ado de la aplicación, debe á es au a sus se icios con inuando con el
seguimien o.
CO004. La aplicación debe á impedi al usua io la de ención manual de un seguimien o iniciado
au omá icamen e.
CO005. Se p io iza á un seguimien o au omá ico en e a uno manual.
Es deci , si exis e un seguimien o manual en cu so y de ec amos un disposi i o Blue oo h que
pe enece a la lis a de los ehículos que debemos as ea , debemos inaliza el seguimien o manual e
inicia el seguimien o au omá ico.
CO006. Se impedi á el inicio manual si exis e un seguimien o au omá ico en cu so.
4.5.2.4 Requisi os de diseño
DI001. Se mos a á una in e az p incipal en el clien e en la que apa ece á el mapa, un ex o de es ado y un
bo ón de encendido y apagado.
DI002. Se mos a á una in e az secunda ia de ajus es en el clien e en la que se pod á con igu a los
pa áme os de la aplicación.
DI003. Se o ece á un po al de bien enida web en el que el usua io, además de pode iden i ica se pa a
accede al con enido, pod á e no icias.
DI004. En el con enido de la página web se dis ingui án las siguien es pa es: cabece a, menú, il o de
búsqueda, ba a de acción y abla de con enidos.
DI005. En el menú de la página web se dis ingui án los siguien es apa ados: conduc o es, ehículos, u as y
adminis a .
DI006. En el il o de búsqueda de la página web se pe mi i á decidi qué in o mación mos a en la abla de
con enidos.
DI007. En la abla de con enidos de la página web se mos a á in o mación básica sob e los elemen os y se
pe mi i á accede a una is a de allada de los mismos.
DI008. En la ba a de acción de la página web hab á bo ones pa a ealiza acciones globales como po ejemplo
gene a in o mes.
DI009. En la icha de allada de la página web se mos a á oda la in o mación del elemen o en cues ión
haciendo uso de mapas y g á icas.
DI010. En el apa ado adminis a de la página web se pe mi i á da de al a a nue os conduc o es y ehículos.
4.5.3 Requisi os no uncionales
Los equisi os no uncionales de inen la calidad de la he amien a a implemen a y especi ica los c i e ios que
pueden segui se pa a comp oba la alidez del sis ema sin e alua su compo amien o.
18
Reque imien os
4.5.3.1 Requisi os de iabilidad
FI001. La he amien a debe á impedi el seguimien o sin una ase de negociación sa is ac o ia.
FI002. La aplicación clien e debe á se pe sis en e en caso de cie e ab up o.
FI003. La aplicación clien e debe á conmu a de mane a anspa en e su uncionamien o en p ime y segundo
plano.
4.5.3.2 Requisi os de usabilidad
US001. La aplicación clien e mos a á la ubicación en iempo eal du an e cualquie seguimien o, manual o
au omá ico o la úl ima u a ealizada en caso con a io.
US002. Du an e un seguimien o, el usua io pod á e un mapa en el clien e.
US003. El usua io pod á decidi si mos a o no el mapa en la aplicación clien e.
US004. En odo momen o el usua io pod á e el es ado de la aplicación clien e en un ex o.
4.5.3.3 Requisi os de segu idad
SE001. Se necesi a á una cla e de la API de Google pa a el uso de los mapas de Google4.
SE001. El se ido debe á impedi que usua ios sin iden i ica accedan a la in o mación almacenada.
SE002. El se ido debe á impedi que se añadan da os a la base de da os sin una ase de negociación
sa is ac o ia.
4.5.4 Res icciones écnicas
RT001. La aplicación mó il se á desa ollada pa a e siones de And oid supe io a la API 15.
RT002. Se solici a á que la aplicación Se icios de Google se encuen e ins alada en el e minal mó il.
RT003. Se necesi a á pe miso a modi ica o elimina el con enido de la a je a SD del e minal mó il.
RT004. Se necesi a á pe miso a la lec u a de la ubicación GPS del e minal mó il.
RT005. Se necesi a á pe miso a la lec u a de una ubicación ap oximada po iangulación de edes del e minal
mó il.
RT006. Se necesi a á pe miso de acceso ín eg o a In e ne del e minal mó il.
RT007. Se necesi a á pe miso a isualiza el es ado de la ed del e minal mó il.
RT008. Se necesi a á pe miso a consul a conexiones de Blue oo h del e minal mó il.
RT009. Se necesi a á pe miso pa a lee la con igu ación de los pe misos de Google del e minal mó il.
4!Sólo%pa a%su%compilación"
19
5 DISEÑO
n es e capí ulo nos cen a emos en la e apa de diseño del so wa e a implemen a , pa a ello nos
apoya emos en el lenguaje de modelado uni icado (UML) [12] que nos apo a á la abs acción
necesa ia pa a lle a a cabo es a a ea.
Es e diseño lo di idi emos en secciones; pa i emos en p ime luga de una isión gene al; en segundo luga ,
diseña emos la comunicación en e la aplicación clien e y el se ido ; en e ce luga , se diseña á la aplicación
clien e; y, po úl imo, ha emos lo mismo con el se ido .
5.1 Visión gene al
Expliquemos el uncionamien o de la he amien a apoyándonos en un diag ama de ac i idad muy simpli icado
desde el pun o de is a del clien e:
Figu a 5-1. Compo amien o básico del clien e
Como podemos obse a , odo comienza con una señal en an e o e en o que nos in o ma de la conexión con
un disposi i o Blue oo h p e iamen e empa ejado.
A p io i, no podemos sabe si debemos as ea el disposi i o al que nos hemos conec ado y, po an o, el
clien e lle a á a cabo una negociación con el se ido pa a conoce si es e disposi i o es á ins alado en un
ehículo de la emp esa y si enemos pe miso pa a as ea lo.
Es a negociación inicial a a la iden i icación an o del clien e como del ehículo. El p o ocolo e in e cambio
de mensajes u ilizados se explica án con más de alle en una sección dedicada a ello más adelan e.
En caso ecibi una espues a nega i a, no debemos inicia el seguimien o; en cambio, si la espues a es
posi i a, se lle a a cabo el seguimien o has a que se eciba un e en o de desconexión del Blue oo h.
Además, inclui emos en la aplicación del clien e un modo de ac i ación manual pa a su uso en el caso de que
se necesi e seguimien o sin necesidad de ehículo o és e no disponga de un disposi i o Blue oo h asociado.
En cuan o al se ido , aloja emos en él una base de da os pa a lle a a cabo el almacenamien o de los da os
ecibidos, además de desplega una página web que nos o ezca in o mación gene ada a pa i de los da os
ecolec ados así como una página de adminis ación del pe sonal y la lo a de ehículos.
5.2 Diseño de la comunicación
En es a sección es udia emos la comunicación que exis e en e un clien e y el se ido y, pa a acili a su
comp ensión se adjun a a con inuación un diag ama de secuencia.
E
20
Diseño
Figu a 5-2. In e cambio de mensajes en e clien e y se ido
Pues o que en el diag ama de secuencia las acciones ienen nume adas, segui emos el mismo plan de
nume ación a la ho a de desc ibi cada uno de es os mensajes.
1. Se a a del mensaje inicial, la aplicación clien e en ia á el usua io y con aseña p e iamen e con igu ados
al se ido .
1.1. El se ido consul a es e pa de usua io y con aseña en la base de da os.
1.2. Se esponde indicando que no exis e en la base de da os esa combinación y inaliza la negociación.
1.3. Se esponde indicando que exis e dicha combinación y el usua io ya queda iden i icado.
1.3.1. La aplicación clien e en ía la di ección ísica del disposi i o Blue oo h que ha p o ocado el
inicio de la negociación
1.3.1.1. El se ido comp ueba si esa di ección pe enece a uno de sus ehículos.
1.3.1.2. Responde nega i amen e y inaliza la negociación.
1.3.1.3. Responde con un iden i icado de la sesión que acaba de egis a se y el ehículo ya
queda iden i icado.
1.3.1.3.1. Se en ía una se ie de da os5 de mane a pe iódica al se ido .
El en ío de da os pe iódico cesa á cuando la aplicación mó il decida inaliza el seguimien o, es deci , cuando
se pie da la conexión con el disposi i o Blue oo h o se de enga manualmen e.
Como podemos obse a , odos los mensajes siguen un compo amien o del ipo pe ición- espues a que se
hacen uso del p o ocolo HTTP de ni el de aplicación. En cuan o al ipo de pe ición HTTP, nos hemos decan ado
po mensajes de ipo POST debido a que su papel se á in e ac ua con una base de da os al o o lado de la
comunicación (se ido ).
5!Iden i icado ,de,sesión,,ho a,del,sis ema,, echa,del,sis ema,,la i ud,y,longi ud."
21
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
Po o o lado, pues o que HTTP es un p o ocolo sin es ado, u iliza emos sesiones PHP en el lado del se ido
cuando sea necesa io e ene in o mación como, po ejemplo, pa a comp oba asegu a nos de que el usua io
que nos en ía da os de seguimien o se ha iden i icado p e iamen e.
5.3 Diseño del clien e
Siguiendo nues as in enciones, a con inuación se analiza el diseño de la aplicación que ac úa como clien e en
la comunicación.
Pa a ello, comenza emos es udiando la in e az g á ica que que emos implemen a a pa i de boce os y
pasa emos a analiza el modelo es uc u al y de compo amien o de las di e en es clases que cons a án nues a
aplicación.
5.3.1 In e az g á ica de usua io
Siguiendo los equisi os de diseño del capí ulo an e io , se ha diseñado un boce o de la aplicación clien e. A la
izquie da, el aspec o que end ía la aplicación p incipal y, a la de echa, el aspec o que end ía la ac i idad de
ajus es.
Figu a 5-3. Boce o de la in e az p incipal
Figu a 5-4. Boce o de la in e az secunda ia
Además, es a in e az g á ica sa is ace los casos de uso que se expusie on en la especi icación de equisi os del
sis ema.
22
Diseño
Figu a 5-5. Diag ama de casos de uso del clien e
5.3.2 Resumen de clases
Pa a lle a a cabo el desa ollo del clien e se han elabo ado nue e clases que, conjun amen e, se enca ga án de
consegui el compo amien o espe ado.
• Una ac i idad p incipal, llamada MainAc i i y.
• Una ac i idad que pe mi e modi ica los ajus es, llamada Se ingsAc i i y.
• Un se icio o ien ado a la comunicación con el se ido , llamado Connec ionSe ice.
• Un se icio o ien ado al seguimien o y as eo del disposi i o, llamado Loca ionSe ice o
Loca ionSe iceCompa ible si nues o disposi i o no es compa ible con el p ime o.
• Una clase o ien ada a ges iona los e en os Blue oo h, llamada Blue oo hManage .
• Una clase o ien ada a ges iona el mapa de la ac i idad p incipal, llamada MapManage .
• Una clase que nos se i á como in e az pa a accede al es ado y a los da os de la aplicación, llamada
P e e encesManage .
• Y po úl imo, una clase que, cuando cambie el es ado de la aplicación, se enca gue de modi ica la
in e az de la ac i idad p incipal. Es a úl ima se llama P e e encesLis ene .
A con inuación se mues an los modelos es uc u ales y de compo amien o de es as clases de mane a
indi idual aunque se puede consul a una isión gene al de la es uc u a del clien e en los anexos6.
5.3.3 Ac i idades
5.3.3.1 Ac i idad p incipal
La ac i idad p incipal se á la pan alla p incipal de la aplicación y se á la enca gada de p opo ciona al usua io
la in o mación del seguimien o.
6!Consul a *diag ama*de*clases*comple o*en*los*anexos"
23
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
5.3.3.1.1 Modelo es uc u al de la clase
Pa a inicia la desc ipción de es a ac i idad, podemos apoya nos en un pequeño diag ama de clases que nos
mos a á las elaciones de es a clase con el es o.
Figu a 5-6. Diag ama de clases pa cial (MainAc i i y)
Como podemos obse a , nues a ac i idad p incipal iene elación con cua o clases di e en es de nues a
aplicación, analicemos cada una de es as elaciones pa a comp ende mejo su uncionamien o.
• Relación con la clase P e e encesManage . La ac i idad pod á ins ancia y usa un obje o de es a
clase pa a comp oba el es ado de cada componen e de la aplicación en odo momen o y, además,
pod á egis a se como obje i o de las no i icaciones de una clase P e e encesLis ene que
explica emos a con inuación.
• Relación con la clase P e e encesLis ene . La ins ancia de es a clase c eada po
P e e encesManage escucha á los cambios en las p e e encias (Sha edP e e ences) de
nues a aplicación y, en unción de lo que haya cambiado, i á ac ualizando la in e az de nues a
ac i idad p incipal en iempo eal.
• Relación con la clase MapManage . La ac i idad p incipal end á un obje o de es e ipo enca gado de
ges iona el mapa de mane a ín eg a, se explica á más adelan e en su apa ado co espondien e.
• Relación con la clase Connec ionSe ice. Es a es la elación más compleja e impo an e de odas.
És a clase ac ua á como un se icio que egula á la comunicación con el se ido e inicia á el
seguimien o cuando la ase de negociación sea sa is ac o ia, nues a ac i idad p incipal pod á c ea el
se icio e inicia lo y de ene lo siemp e que se cumplan los equisi os de p io idad.
5.3.3.1.2 Modelo de compo amien o de la clase
Una ez conocemos los componen es de nues a ac i idad, in en emos in eg a odos los elemen os y explica
su uncionamien o a pa i de un simpli icado diag ama de ac i idad.
30
Diseño
3. El se icio se queda a la espe a de e en os.
Los dis in os e en os que pueden in e umpi es e es ado de espe a son los siguien es:
• Conexión con la API de Google, a a és del mé odo onConnec ed y p opicia á la llamada al
mé odo s a T ack que inicia el as eo.
• E o es en la conexión, a a és de los mé odos onConnec ionSuspended y
onConnec ionFailed, que lanza á la econexión con la API.
• Nue a ubicación ob enida, ges ionada a a és del mé odo onLoca ionChanged y que en ia á
da os al se ido u ilizando el mé odo sendDa a del se icio Connec ionSe ice.
• Des ucción del se icio, a a és del mé odo onDes oy se inaliza á el as eo (s opT ack) y
el se icio se á des uido.
5.3.5 Res o de clases
5.3.5.1 Clase o ien ada a ges iona los e en os Blue oo h
Es a clase esul a de g an impo ancia en nues a aplicación ya que sin ella no pod íamos de ec a e en os
Blue oo h y, po an o, no exis i ía el seguimien o au omá ico.
En de ini i a, es la clase enca gada de cap u a los dis in os e en os del sis ema y ex iende de la clase
B oadcas Recei e , es deci , es un ecep o de mensajes de di usión.
5.3.5.1.1 Modelo es uc u al de la clase
Figu a 5-14. Diag ama de clases pa cial (Blue oo hManage )
Como podemos obse a , Blue oo hManage sólo compa e elación con dos clases.
• Con P e e encesManage , pa a lee y edi a los da os y el es ado de la aplicación.
• Con Connec ionSe ice, pudiendo inicia el se icio (seguimien o au omá ico) y inaliza lo.
En cuan o a las a iables y mé odos de la clase, obse amos que no apo a nada dis in o a un
B oadcas Recei e gené ico, sal o que se ha pa icula izado pa a de ec a e en os Blue oo h.
31
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
5.3.5.1.2 Modelo de compo amien o de la clase
El compo amien o de es a clase es muy básico; cada ez que el sis ema gene e un mensaje de di usión de los
que debemos cap u a , se ejecu a á el cons uc o en p ime luga y a con inuación se llama á al mé odo
onRecei e.
En es e mé odo, a pa i de sus pa áme os, se a e igua á el e en o que lo ha exci ado y a pa i de es a
in o mación, inicia á y inaliza á el se icio de comunicaciones (Connec ionSe ice) del mismo modo que
cuando se hacía manualmen e.
5.3.5.2 Clase o ien ada a ges iona el mapa
Es a clase se llama MapManage e implemen a la clase OnMapReadyCallback. Su unción es ins ancia el
mapa y ges iona an o su es ado como la in o mación que apa ece ( u a eco ida, posición ac ual, e cé e a).
Po o o lado, p esen a mé odos que ayudan a ges iona los dis in os es ados de la ac i idad p incipal (iniciada,
pausada, pa ada y des uida).
5.3.5.2.1 Modelo es uc u al de la clase
Figu a 5-15. Diag ama de clases pa cial (MapManage )
Como podemos obse a , exis e elación con es elemen os dis in os.
• Un obje o de la clase MapManage pod á se ins anciado y usado po la ac i idad p incipal
(MainAc i i y) pa a que ges ione su mapa po él.
• U iliza á un obje o de la clase P e e encesManage acili ado po la ac i idad p incipal pa a pode
lee la in o mación de la u a ac ual o la úl ima u a ealizada así como el es ado de la aplicación.
• En el mapa se e á la posición en iempo eal con una ecuencia de mues eo mayo al del as eo en
segundo plano, po an o, si la aplicación es á en p ime plano y encon amos una ubicación se la
en ia emos a los se icios de localización (Loca ionSe ice o Loca ionSe iceCompa ible)
pa a que la ges ione como se debe.
32
Diseño
5.3.5.3 Clase o ien ada a ges iona las p e e encias
Es a clase an u ilizada y mencionada a lo la go de la memo ia ac úa como ba e a en e los da os y el es o de
componen es de la aplicación. La clase se llama P e e encesManage y, en de ini i a, posee un conjun o
de mé odos GET y SET que nos pe mi e lee y modi ica an o el es ado como los da os de la aplicación a
a és de una ins ancia de la clase Sha edP e e ences, que es un p o eedo de con enidos de And oid.
Pues o que la es uc u a y compo amien o son ealmen e básicos, la mane a de explica es a clase se basa á en
mos a los da os que es e elemen o es capaz de adminis a .
5.3.5.3.1 Ope aciones que pe mi e la clase
A con inuación se exponen las di e en es ope aciones que pe mi e es a clase, jun o con una b e e desc ipción.
Es ado de la aplicación
isH pSession
Comp ueba si el se icio de comunicaciones es á ac i o
isGpsSession
Comp ueba si alguno de los se icios de as eo es á ac i o
isAu oMode
Comp ueba si la sesión ac ual es au omá ica o manual
se Au oMode
Es ablece el ipo de la sesión ac ual
Da os de la aplicación
se U l
Es ablece una nue a URL del se ido
ge U l
Ob iene la URL del se ido con igu ada
se Use
Es ablece un nue o usua io
ge Use
Ob iene el usua io con igu ado
se Pass
Es ablece una nue a con aseña
ge Pass
Ob iene la con aseña con igu ada
se Mac
Es ablece una nue a MAC de u a ac ual
ge Mac
Ob iene la MAC ligada a la u a ac ual
Aspec o de la aplicación
se ShowMap
De ine que el mapa sea isible o no lo sea
isShowMap
Consul a si el mapa debe se isible o no
se S a us
Modi ica el ex o que de ine el es ado ac ual de la aplicación
ge Rou eColo
Ob iene el colo del cual se debe pin a la u a en el mapa
se Rou eColo
Es ablece un nue o colo del cual se debe pin a la u a en el mapa
Ru a almacenada
33
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
addToLas Rou e
Añade una nue a ubicación a la úl ima u a (o u a ac ual)
ge Las Rou e
Ob iene la úl ima u a almacenada (o u a ac ual)
clea Las Rou eIn o
Limpia la in o mación ace ca de la úl ima u a almacenada
Especial
se P e e encesLis ene
Decla a un Lis ene que modi ica á la in e az de la ac i idad p incipal
cuando cambie el mensaje de es ado.
5.3.5.4 Clase o ien ada a ac ualiza la in e az de la ac i idad p incipal
La clase P e e encesLis ene implemen a la clase OnSha edP e e enceChangeLis ene y se
enca ga á de ejecu a el mé odo upda eS a us de la ac i idad p incipal (si es á en ejecución) pa a ac ualiza
su ex o de es ado cada ez que se de ec e un cambio en el es ado de la aplicación.
La de ección de es os cambios se consegui á ya que escucha á los cambios de las Sha edP e e ences.
Figu a 5-16. Diag ama de clases pa cial (P e e encesLis ene )
Como podemos obse a en la igu a an e io , la ac i idad p incipal ins ancia un obje o de la clase
P e e encesManage y luego lo u iliza pa a egis a se como ecep o de la clase
P e e encesLis ene .
5.4 Diseño del se ido
Pa a inaliza con la ase de diseño de nues a he amien a, en es a sección se lle a á a cabo es a a ea pa a el
se ido .
Pa a ello comenza emos con el diseño de la página web (es é ica), pasa emos po el diseño de la base de da os
es udiando su modelo en idad- elación y, pa a inaliza , es udia emos los algo i mos que se aplican pa a
a ende las pe iciones del clien e.
5.4.1 In e az g á ica de la página web
Del mismo modo que se hizo con el clien e, pa a el se ido ambién se ha diseñado un boce o del aspec o que
que emos que enga nues a página web pa a que cumpla los equisi os de diseño e in o mación.
En p ime luga , se adjun a un boce o de una is a gene al de con enidos, dependien e de la sección que
34
Diseño
es emos isualizando (conduc o es, ehículos, u as o adminis a ).
Figu a 5-17. Boce o de la is a gene al del na egado web
Y en segundo luga , obse amos la es é ica de una icha de allada que apa ece ía al in e ac ua con algún
elemen o de la abla an e io .
Figu a 5-18. Boce o de la is a de allada en el na egado web
35
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
Pa i emos de es e diseño a la ho a de implemen a la página web del se ido .
5.4.2 Base de da os
Pa a pode lle a a cabo la ecolección de los da os, es necesa io c ea y p epa a una base de da os que
almacene de mane a co ec a y e icien e la in o mación.
Haciendo uso de MySQL y consul ando su documen ación, se ha cons uido8 la siguien e es uc u a de la base
de da os bajo el nomb e de TFG.
5.4.2.1 Modelo en idad- elación
A con inuación se mues a el modelo en idad- elación de la base de da os que se a a implemen a en nues o
se ido .
Figu a 5-19. Modelo ER de la base de da os
5.4.2.2 Tabla USER
Es a abla nos pe mi i á almacena in o mación ace ca de los conduc o es. Sus a ibu os son los siguien es:
• use , que almacena á una cadena de ca ac e es que se á el usua io del conduc o y además se á la
cla e p ima ia de nues a abla.
• pass, que almacena á la con aseña de nues o usua io.
• s a us, que se á un booleano que indique si nues o usua io es á habili ado o deshabili ado.
• name, que ep esen a á el nomb e del usua io como una cadena de ca ac e es.
• su name, que mos a á los apellidos de nues o usua io.
8!Ins ucciones+en+los+anexos"
36
Diseño
5.4.2.3 Tabla VEHICLE
La abla VEHICLE nos pe mi i á almacena in o mación sob e los ehículos, sus columnas se explican a
con inuación:
• id_ ehicle se á el iden i icado del ehículo y end á dado po su ma ícula (cadena de ca ac e es).
Además se á la cla e p ima ia de la abla.
• mac se á el campo que almacene la di ección ísica del Blue oo h asociado a es e ehículo.
• model se e e i á al modelo u o a in o mación adicional que se quie a especi ica del ehículo en
cues ión.
• s a us ecoge á el es ado (booleano) del ehículo, es deci , si es á habili ado o deshabili ado.
• ene gy almacena á un en e o que ep esen a á el consumo medio del ehículo cada 100 kilóme os
( alo anunciado po el ab ican e).
5.4.2.4 Tabla SESSION
La abla SESSION almacena á in o mación gene al sob e las sesiones de seguimien o, sus columnas se
explican a con inuación:
• id_session se á el iden i icado de la sesión y se á un en e o au oinc emen ado, po lo an o se á la
cla e p ima ia de nues a abla SESSION.
• id_ ehicle se á una e e encia a la cla e p ima ia de la abla VEHICLE, po an o, la u iliza emos
como cla e ex e na.
• use , del mismo modo que con la columna an e io , se á una cla e ex e na que haga e e encia a la
cla e p ima ia de la abla USER.
El obje i o de es a abla es es ablece una elación en e los conduc o es y los ehículos cons uyendo una
sesión de seguimien o.
5.4.2.5 Tabla SESSION_DET
La abla SESSION_DET almacena á in o mación de seguimien o, sus campos son los siguien es:
• id_session cla e ex e na que ha á e e encia al iden i icado de una sesión. Fo ma á pa e de la
cla e p ima ia.
• a i e_o de se á el o den de llegada de una ubicación den o de una sesión. Se á au oinc emen al
y comple a á la cla e p ima ia.
• la se á una cadena que ep esen e una la i ud.
• lon se á una cadena que ep esen e una longi ud, jun o con la la i ud de e minan una ubicación en un
momen o dado.
• ime_c, almacena la ho a del clien e al en ia los da os.
• da e_c, almacena la echa del clien e al en ia los da os.
• ime_s, almacena la ho a del se ido al ecibi los da os.
• da e_s, almacena la echa del se ido al ecibi los da os.
• commen , aunque no es u ilizado en es a e sión de la he amien a, pod ía se i en un u u o pa a
ano a incidencias du an e la sesión u o os comen a ios de in e és.
Cada ila en es a abla iden i ica á una ubicación en un momen o dado de una sesión y, a pa i de dicha sesión,
pod emos conoce el usua io y el ehículo in oluc ados.
37
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
5.4.3 A ención de pe iciones
Las pe iciones del clien e se a ende án a a és de es iche os PHP que ep esen a án las di e en es ases en la
comunicación en e ellos.
5.4.3.1 Iden i icación del usua io
Se lle a a cabo a a és del iche o iden i y.php y su compo amien o es el siguien e:
Figu a 5-20. Fase I en el lado del se ido
Como podemos obse a en el diag ama, sólo se asigna una sesión PHP en caso de que exis a el pa usua io-
con aseña en la base de da os. Pa a hace es a comp obación se ealiza la siguien e consul a SQL.
SELECT * FROM USER WHERE use = 'usua io' AND pass = 'con aseña' AND s a us = ue;
Si la clausula an e io ob iene algún esul ado se comp ueba que el usua io exis a, la con aseña sea co ec a y
además es é habili ado.
5.4.3.2 Iden i icación del ehículo
La iden i icación del ehículo se ía la segunda ase de la negociación y consis i ía en comp oba si la MAC
de ec ada es álida (pe enece a la base de da os) y, en caso a i ma i o, c ea una en ada en la abla SESSION.
Es o se lle a a cabo en el iche o alida emac.php.
38
Diseño
Figu a 5-21. Fase II en el lado del se ido
La en ada que se c ea en la abla SESSION de la base de da os es ablece á una elación en e un conduc o y
un ehículo. Es e egis o se ealiza median e la siguien e cláusula SQL:
INSERT INTO SESSION (id_session, id_ ehicle, use ) VALUES (NULL, 'ma icula',
'usua io');
Asignando el alo NULL al campo id_session hacemos uso de la capacidad au o-inc emen al del mismo y
a con inuación end emos que ob ene es e alo pa a de ol e lo al clien e.
SELECT LAST_INSERT_ID() FROM SESSION;
Es a cláusula de uel e el úl imo alo au o-inc emen ado de la conexión con la base de da os y se á la
e e encia que el clien e enga con su sesión de seguimien o.
5.4.3.3 Recepción de da os
En cuan o a la ecepción y almacenamien o de da os, el diag ama que con empla su compo amien o es el
siguien e:
39
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
Figu a 5-22. Recepción de da os en el lado del se ido
Es as posiciones se egis an median e la siguien e cláusula SQL:
INSERT INTO SESSION_DET (id_session, a i e_o de , la , lon, ime_c, da e_c, ime_s,
da e_s) VALUES ('idsesion', 'o denllegada', 'la i ud', 'longi ud', 'ho aclien e',
' echaclien e', 'ho ase ido ', ' echase ido ');
46
Implemen ación
s opConnec ionSe ice.
public oid onClickSe ingsBu on (View iew);
Es e mé odo es el Lis ene del bo ón de ajus es, es deci , se ejecu a á cada ez que pulsemos dicho bo ón y
se enca ga á de lanza la ac i idad de ajus es.
public oid upda eS a us(S ing s a us);
Es e mé odo es muy simple, se enca ga á de ac ualiza el ex o de es ado de la ac i idad a pa i de una cadena
en iada como pa áme o.
public oid upda eUi();
Es e mé odo se enca ga á de ac ualiza odos los elemen os de la in e az sal o el ex o de es ado.
Pa a una mejo comp ensión de su uncionamien o, se adjun a a con inuación un diag ama de ac i idad:
Figu a 6-4. Diag ama de Ac i idad del mé odo upda eUi
Como podemos e , lo p ime o que comp obamos es si hay una sesión en cu so, es deci , si hay alguna
comunicación iniciada con el se ido y, en unción de ello, ac ualizamos los alo es del bo ón y la ba a de
p og eso.
47
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
En caso de que haya una sesión en cu so comp obamos si la sesión se ha iniciado au omá icamen e y
dependiendo del esul ado, pe mi imos que se pueda de ene la sesión de mane a manual o no.
Pa a inaliza , comp obamos si se ha c eado la is a del mapa pa a e i a excepciones y luego comp obamos si
hay un as eo en cu so, en caso a i ma i o ac i amos la ac ualización en iempo eal del mapa.
De es e modo conseguimos un mé odo que ac ualiza la in e az bajo demanda, lo llama emos cada ez que se
p oduzca un cambio del es ado de la aplicación sin en ia le da os de ningún ipo ya que es e mé odo e alúa el
es ado au omá icamen e.
p i a e oid s a Map(Bundle sa edIns anceS a e);
Es e mé odo se enca ga de comp oba si el usua io quie e mos a un mapa o no y, en caso de que sí lo desee,
inicializa an o la is a de mapa como el obje o de la clase MapManage . Es a ins ancia nos se i á de en ana
de comunicación con el mapa y se explica á más adelan e.
p i a e oid s a Connec ionSe ice();
Sólo en caso de que no haya una sesión en cu so, inicia á el se icio adecuado haciendo uso del In en
p e iamen e de inido en el mé odo onC ea e. An es de hace lo se enca ga á de elimina oda in o mación de
la úl ima sesión así como odo aquello que es u ie a dibujado an e io men e en el mapa.
p i a e oid s opConnec ionSe ice();
En es e mé odo se comp oba á si hay alguna sesión que inaliza y lo ha á si es necesa io.
public oid loadP e e ences();
Al llama a es e mé odo se inicializa la a iable mP e e encesManage como una ins ancia de la clase
P e e encesManage . A a és de es a ins ancia pod emos accede a un conjun o de mé odos que nos
acili a á la lec u a y esc i u a de da os así como la consul a del es ado de la aplicación (qué se icios se
encuen an ac i os, e c.).
p o ec ed oid onResume();
p o ec ed oid onPause();
p o ec ed oid onDes oy();
public oid onLowMemo y();
En es os cua o mé odos se sob esc ibe el mé odo o iginal de la clase Ac i i y pa a ges iona los elemen os
en memo ia cuando la ac i idad pasa a sus dis in os es ados. Ha esul ado ealmen e ú il pa a pode ene el
con ol en memo ia del mapa, po ejemplo.
6.1.2.2 Se ingsAc i i y
Es a ac i idad se aloja á en el iche o Se ingsAc i i y.ja a y ambién ex ende á la clase Ac i i y de
And oid.
6.1.2.2.1 Va iables
En es e apa ado amos a comen a las a iables que u iliza emos en es a clase.
p i a e Tex View mEdi Use ;
p i a e Tex View mEdi Pass;
p i a e Tex View mEdi U l;
p i a e Swi ch mMapToggle;
Es os a ibu os se u iliza án como e e encia a los di e en es elemen os que p esen a la in e az de es a
ac i idad.
p i a e P e e encesManage mP e e encesManage ;
Es a a iable de la clase P e e encesManage nos pe mi i á lee y modi ica las en adas de las
p e e encias de la aplicación ales como el usua io, la con aseña, la di ección del se ido y la decisión del
usua io sob e mos a el mapa o no hace lo.
48
Implemen ación
6.1.2.2.2 Mé odos
A con inuación amos a esumi el uncionamien o de cada uno de los mé odos de es a clase.
p o ec ed oid onC ea e(Bundle sa edIns anceS a e);
Sob esc i u a del mé odo de la clase Ac i i y. Inicia á la a iable mP e e encesManage y llama á al
mé odo se All.
p i a e oid se All();
Decla a á cada elemen o de la in e az y le da á el alo ap opiado. Básicamen e se enca ga de ac ualiza la
in e az cuando algún alo haya cambiado o al inicio de la ac i idad.
public oid onClickC eden ialsBu on(View iew);
Se llama á cuando el usua io pulse el bo ón de edición de los c edenciales. En p ime luga p epa a á y
mos a á un obje o de la clase Ale Dialog de o ma que enga el siguien e aspec o:
Figu a 6-5. Solici ud al usua io de nue as c edenciales
Y as la in e acción del usua io, almacena emos los nue os alo es del usua io y con aseña haciendo uso de
la clase P e e encesManage .
public oid onClickSe e Bu on(View iew);
Su uncionamien o es análogo al del mé odo an e io , cambiando únicamen e el aspec o del Ale Dialog.
Adicionalmen e, comp oba á si se a a de una URL o di ección IP álida.
49
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
Figu a 6-6. Solici ud al usua io de nue a URL del se ido
public oid onClickMapToggle(View iew);
Es el mé odo que se enca ga á de escucha las pulsaciones al bo ón de es ado enca gado de ocul a y mos a el
mapa. T as cada pulsación einicia á la aplicación, aunque los se icios (y en consecuencia, el seguimien o) no
se e á a ec ado.
Como podemos obse a , en es a ac i idad no hemos sob esc i o odos los mé odos de una clase de ipo
Ac i i y ya que no enemos nada que apo a a es os elemen os.
6.1.3 Se icios
En es a sección se analiza án los se icios implemen ados, es deci , aquellos componen es p epa ados pa a
ejecu a a eas la gas en segundo plano.
6.1.3.1 Connec ionSe ice
Es e se icio se encon a á codi icado en el iche o Connec ionSe ice.ja a y su desa ollo lo
explica emos siguiendo la misma es uc u a que en las ac i idades de los apa ados an e io es.
6.1.3.1.1 Va iables
En es a sección es udia emos las dis in as a iables que con iene nues a clase con la inalidad de conoce su
obje i o.
p i a e s a ic Connec ionSe ice mIns ance;
Se a a de una a iable es á ica p i ada que nos pe mi e de ini un modelo Single on en nues a clase. Al
ejecu a se el cons uc o se ija á es a a iable impidiendo que exis an múl iples ins ancias de es a clase.
p i a e H pClien mH pClien ;
p i a e H pResponse mH pResponse;
p i a e H pPos mH pPos ;
50
Implemen ación
Es as es a iables p i adas son u ilizadas pa a lle a a cabo la comunicación po HTTP con el se ido .
• H pClien es una clase que ges iona cookies, au en icación, conexión y o os de alles de una
comunicación ía HTTP.
• H pResponse nos pe mi i á almacena la espues a de una pe ición HTTP p e ia.
• H pPos se i á pa a encapsula un mensaje en una pe ición de ipo Pos pa a su en ío pos e io a
a és de HTTP.
Se pod ían habe decla ado localmen e en cada uno de los mé odos u ilizados, aunque se ha p e e ido hace lo
de es e modo pa a simpli ica el desa ollo de los mé odos.
p i a e P e e encesManage mP e e encesManage ;
Como en las clases an e io es, un obje o de la clase P e e encesManage nos pe mi i á accede a la
in o mación y al es ado de la aplicación, así como modi ica los.
p i a e In ege mSession;
p i a e S ing mU l;
p i a e S ing mUse ;
p i a e S ing mPasswo d;
p i a e S ing mMac;
Las a iables an e io es nos se i án pa a almacena la in o mación ace ca de la sesión ac ual, e i ando que
consul emos las Sha edP e e ences de la aplicación y, en de ini i a, mejo ando su endimien o.
Inicialmen e mSession no end á alo sino que se inicializa á cuando se comple e la ase de alidación de la
di ección MAC.
p i a e inal s a ic in TIME_BETWEEN_RETRY = 10000;
p i a e inal s a ic in TIMEOUT_CONNECTION = 5000;
p i a e inal s a ic in TIMEOUT_SOCKET = 3000;
Es as úl imas a iables de inen algunos iempos en milisegundos pa a las conexiones HTTP.
• TIME_BETWEEN_RETRY, como su p opio nomb e indica, nos mues a el iempo en e ein en os. Se
u iliza á es e alo como iempo de ein en o cuando la iden i icación o el en ío de MAC haya
acasado.
• TIMEOUT_CONNECTION se u iliza á como iempo de expi ación de la conexión HTTP.
• TIMEOUT_SOCKET se u iliza á como iempo de expi ación del socke .
Los dos úl imos se u iliza án a la ho a de inicializa la a iable mH pClien .
6.1.3.1.2 Mé odos
A con inuación se expond án los mé odos que con iene es e se icio jun o con una b e e desc ipción de su
compo amien o.
public Connec ionSe ice();
Es el cons uc o po de ec o de la clase, en él inicializamos las a iables mH pClien y mIns ance con el
in de consegui una clase Single on. Es e mé odo se ejecu a únicamen e cuando se c ea el se icio.
public in onS a Command(In en in en , in lags, in s a Id);
Si eco damos el ciclo de ida de un se icio, es e mé odo se ejecu a cada ez que lo llamamos a a és del
mé odo s a Se ice. En es e mé odo se ealizan una se ie de a eas haciendo uso de la clase AsyncTask.
A a és de es a clase, podemos ejecu a mé odos en un hilo di e en e al p incipal y es o es necesa io pa a
pode ealiza una comunicación HTTP.
Po an o, en es e mé odo, se c ea á un obje o de la clase AsyncTask que llame en segundo plano al mé odo
s a Flow que lle a á a cabo la iden i icación y el en ío de la MAC al se ido , al inaliza es e mé odo y
51
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
dependiendo de su esul ado se llama á o no al mé odo s a T ack que se enca ga á de inicia el
seguimien o, es deci , inicia el se icio enca gado de ello.
public oid onDes oy();
Mé odo sob esc i o de la clase Se ice, en él se llama á al mé odo endFlow enca gado de ce a conexiones
y inaliza el seguimien o.
p i a e boolean s a Flow();
En es e mé odo se lle a án a cabo las siguien es a eas:
1. Inicializamos el obje o mP e e encesManage .
2. Inicializamos las a iables mU l, mUse , mPasswo d haciendo uso del obje o
mP e e encesManage .
3. Comp obamos si que emos un seguimien o iniciado au omá ica o manualmen e y; en caso de que sea
au omá ica, inicializamos la a iable mMac al alo de la MAC; en caso de que sea manual, le damos el
alo NoMac12.
4. Ac ualizamos el ex o de es ado de la in e az de usua io pa a que mues e el mensaje adecuado.
5. Ges ionamos el in e cambio de mensajes del siguien e modo:
i (logIn()) {
i (sendMac() && mSession != 0) {
s a us = ue;
}
}
6. De ol emos el alo de la a iable s a us. Vald á ue si la negociación se ha comple ado
sa is ac o iamen e y alse en caso con a io.
Po an o, se pod ía deci que es el mé odo enca gado de llama a las dis in as ases de la negociación así como
de inicia el seguimien o cuando sea necesa io.
public oid s a T ack();
Es el mé odo enca gado de inicia el seguimien o. Pues o que hay dos se icios dis in os que pueden lle a a
cabo es a a ea se comp ueba si la aplicación Se icios de Google Play se encuen a disponible. En
caso posi i o se inicia el se icio Loca ionSe ice; en caso nega i o se u iliza el se icio
Loca ionSe iceCompa ible.
Po o o lado, an es lanza el se icio debemos comp oba si ya exis e alguna ins ancia an e io ( u o de
e o es en la aplicación) y inaliza la.
public boolean logIn();
En es e mé odo se c ea á una pe ición HTTP Pos que iden i ica á al usua io en el se ido . Además se
ges iona án los posibles e o es que puedan su gi an o de comunicación como de iden i icación nega i a.
La c eación de una pe ición de es e ipo se ealiza del siguien e modo:
En p ime luga iniciamos el obje o mH pPos especi icando la URL del iche o PHP que a a ges iona la
pe ición.
mH pPos = new H pPos (mU l + "/iden i y.php");
En segundo luga , c eamos los pa es de da os que se en ia án en el cue po del mensaje.
Lis <NameValuePai > nameValuePai Lis = new A ayLis <>(2);
nameValuePai Lis .add(new BasicNameValuePai ("use ", mUse ));
nameValuePai Lis .add(new BasicNameValuePai ("passwo d", mPasswo d));
12!Valo &especial&que&el&se ido &in e p e a á&como&sesión&iniciada&manualmen e."
52
Implemen ación
mH pPos .se En i y(new U lEncodedFo mEn i y(nameValuePai Lis ));
Po úl imo, pues o que HTTP es un p o ocolo que sigue un modelo de pe ición y espues a, debemos consumi
la espues a ecibida.
mH pResponse = mH pClien .execu e(mH pPos );
A pa i de es a espues a, pod emos conoce si la iden i icación es co ec a ( ecibimos OK) o inco ec a
( ecibimos algo dis in o).
Si la pe ición de uel e alguna excepción signi ica que ha habido algún e o en el en ío y debemos een ia el
mensaje, es deci , espe a el iempo TIME_BETWEEN_RETRY y ol e a ejecu a el mé odo logIn. Es os
ein en os cesa án cuando el seguimien o ya no sea necesa io (se ha pe dido conexión con el disposi i o
Blue oo h o se ha inalizado manualmen e).
public boolean sendMac();
El uncionamien o es análogo al del mé odo logIn sal o que la in o mación en iada y ecibida son di e en es.
El único da o en iado en es e mensaje es la MAC del disposi i o Blue oo h, no es necesa io en ia más
in o mación ya que la a iable mH pClien con end á una Cookie con la sesión PHP ac i a, es deci , el
se ido acep a á el mensaje si ya exis e una sesión PHP ligada a es a conexión y es a sesión PHP sólo exis i á
si se ha iden i icado co ec amen e.
Como espues a ob end emos un núme o que iden i ica á a la sesión en cu so si la MAC es álida o un mensaje
acío si no lo es.
Del mismo modo se een ia á el mensaje si hay e o es en la comunicación.
public oid sendDa a( inal S ing la i ud, inal S ing longi ud);
Su uncionamien o es simila a los an e io es sólo que en es e caso la llamada al mé odo no se ealiza á desde
es e se icio, sino desde el se icio de seguimien o como se explica á más adelan e.
La in o mación en iada en es a pe ición es el iden i icado de la sesión, la la i ud, la longi ud, la ho a y la
echa.
public oid endFlow();
Se llama á a es e mé odo cuando que amos inaliza el seguimien o; es deci , cuando haya una negociación
allida o se inalice el seguimien o de mane a manual o au omá ica.
public s a ic Connec ionSe ice ge HTTPIns ance();
Es un mé odo es á ico que de ol e á la ins ancia única del se icio en nues a aplicación, se u iliza á pa a
sabe si exis e alguna ins ancia (es dis in o de null) o pode u iliza el mé odo sendDa a (po pa e del
se icio Loca ionSe ice)
public IBinde onBind(In en in en );
Mé odo acío que es necesa io sob esc ibi , es el análogo al mé odo onS a Command aunque pa a llamadas
ligadas al se icio median e el mé odo bindSe ice. Como no hacemos nunca una llamada ligada al se icio
no es necesa io desa olla su con enido.
6.1.3.2 Loca ionSe ice
Es a clase se encuen a desa ollada en el iche o Loca ionSe ice.ja a, ex iende la clase Se ice e
implemen a las clases Loca ionLis ene , Connec ionCallbacks y OnConnec ionFailedLis ene .
Mien as que la p ime a se u iliza pa a que eciba no i icaciones ace ca de la ubicación del disposi i o, las dos
úl imas encuen an su uso en la comunicación con la API de Google.
6.1.3.2.1 Va iables
A con inuación amos a explica las dis in as a iables que maneja es e se icio.
53
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
p i a e s a ic Loca ionSe ice mIns ance;
En ella almacena emos una ins ancia única de es e se icio, es deci , se á una clase Single on.
public s a ic inal long UPDATE_INTERVAL_IN_MILLISECONDS = 8000;
public s a ic inal long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS =
UPDATE_INTERVAL_IN_MILLISECONDS / 2;
Es as a iables nos pe mi i án de ini el iempo deseado en e ac ualizaciones de la ubicación (8 segundos) y el
iempo mínimo (4 segundos). De es os alo es depende á mucho el consumo de ba e ía y la p ecisión de la
aplicación.
p i a e GoogleApiClien mGoogleApiClien ;
Es a a iable ac ua á como clien e de la API de Google, es necesa io pa a pode nos susc ibi a cambios en la
ubicación del disposi i o.
p i a e Loca ionReques mLoca ionReques ;
Se a a de una a iable que modela á el ipo de pe ición que le ha emos a la API de Google, u iliza emos los
iempos an e io men e de inidos pa a su inicialización.
p i a e Loca ion mCu en Loca ion;
En es a a iable almacena emos la úl ima localización conocida del disposi i o. Además, la clase Loca ion
nos pe mi e conoce su p ocedencia, elocidad, e cé e a que, aunque no u ilicemos en es a e sión de la
aplicación, puede esul a nos ú il en un u u o.
p i a e Boolean mReques ingLoca ionUpda es;
Es a a iable ac úa como bande a a la ho a de inicia o no el as eo.
p i a e P e e encesManage p e e encesManage ;
Del mismo modo que el es o de clases, aquí ambién ins anciamos un obje o de ipo P e e encesManage
pa a accede a los da os de la aplicación.
6.1.3.2.2 Mé odos
En es e apa ado amos a analiza con algo más de de alle los dis in os mé odos de es e se icio.
public oid onC ea e();
Mé odo que se ejecu a al c ea el se icio po p ime a ez. En él, inicializamos la a iable mIns ance pa a
es ablece un pa ón Single on.
public in onS a Command(In en in en , in lags, in s a Id);
Se ejecu a cada ez que se inicia el se icio con el mé odo s a Se ice. Llama al mé odo
buildGoogleApiClien e inicializa la a iable mReques ingLoca ionUpda es al alo alse.
p o ec ed synch onized oid buildGoogleApiClien ();
Inicializa la a iable mGoogleApiClien haciendo uso del mé odo es á ico GoogleApiClien .Builde .
A con inuación, llama al mé odo c ea eLoca ionReques y as ello, solici a la conexión del clien e de la
API de Google.
p o ec ed oid c ea eLoca ionReques ();
Inicializa y p epa a la a iable mLoca ionReques pa a que solici e ac ualizaciones con un in e alo
deseado de UPDATE_INTERVAL_IN_MILLISECONDS milisegundos, in e alo mínimo de
FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS milisegundos y al a p ecisión.
public oid s a T ack();
Llama al mé odo s a Loca ionUpda es.
public oid s opT ack();
54
Implemen ación
Llama al mé odo s opLoca ionUpda es.
p o ec ed oid s a Loca ionUpda es();
Solici a ac ualizaciones de ubicación según los a ibu os p epa ados an e io men e.
p o ec ed oid s opLoca ionUpda es();
Finaliza las ac ualizaciones y, en de ini i a, el seguimien o.
public oid onConnec ed(Bundle connec ionHin );
public oid onConnec ionSuspended(in cause);
public oid onConnec ionFailed(Connec ionResul esul );
Son mé odos sob esc i os que son llamados en los dis in os es ados de la conexión con la API de Google.
En el p ime o, onConnec ed, se inicia el seguimien o (s a T ack) ya que se ha conec ado
sa is ac o iamen e.
En los dos úl imos, se ein en a la conexión.
public oid onLoca ionChanged( inal Loca ion loca ion);
Mé odo que se ejecu a cada ez que se de ec a un cambio en la ubicación. En él, median e el uso de la clase
AsyncTask, llamamos al mé odo sendDa a del siguien e modo:
Connec ionSe ice.ge HTTPIns ance().sendDa a(S ing. alueO (loca ion.ge La i ude()),
S ing. alueO (loca ion.ge Longi ude()));
Sin ol ida nos de cap u a odas las excepciones que se puedan p oduci .
public s a ic Loca ionSe ice ge GPSIns ance();
De uel e la ins ancia del se icio, es deci , la a iable mIns ance.
public IBinde onBind(In en in en );
Mé odo acío que es necesa io sob esc ibi , es el análogo al mé odo onS a Command aunque pa a llamadas
ligadas al se icio median e el mé odo bindSe ice. Como no hacemos nunca una llamada ligada al se icio
no es necesa io desa olla su con enido.
public oid onDes oy();
Mé odo sob esc i o de la clase Se ice, en él se llama á al mé odo s opT ack enca gado de inaliza el
seguimien o.
6.1.4 Res o de clases
Aunque no sean ac i idades o se icios, hemos implemen ado algunas clases que han esul ado cla es en la
implemen ación del clien e. Es as clases no amos a analiza las con an a p o undidad ya que su complejidad
es educida.
6.1.4.1 Blue oo hManage
Es a clase ex iende la clase B oadcas Recei e , es deci , es un ecep o de mensajes de di usión. Los
mensajes de di usión que amos a de ec a son los siguien es:
• Es ablecimien o de una conexión Blue oo h con algún disposi i o.
and oid.blue oo h.de ice.ac ion.ACL_CONNECTED
• Fin de una conexión Blue oo h ya es ablecida.
and oid.blue oo h.de ice.ac ion.ACL_DISCONNECTED
• Solici ud de desconexión de una conexión Blue oo h.
55
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
and oid.blue oo h.de ice.ac ion.ACL_DISCONNECT_REQUESTED
Es os e en os se de ec a án a a és del mé odo onRecei e de la clase que, además, ecibi á como pa áme o
un obje o de ipo In en del cual pod emos ex ae in o mación ace ca del disposi i o que ha gene ado la
acción.
Blue oo hDe ice mDe ice = in en .ge Pa celableEx a(Blue oo hDe ice.EXTRA_DEVICE);
A pa i de ese obje o, pod emos lee po ejemplo la di ección ísica:
mDe ice.ge Add ess()
Y el nomb e del disposi i o:
mDe ice.ge Name()
G acias a es o, pod emos ges iona co ec amen e el inicio y in de los seguimien os au omá icos.
Pa a decla a es e componen e de And oid, igual que las ac i idades y los se icios, se ha enido que añadi
in o mación al iche o And oidMani es .xml, especi icando además los e en os que que emos ecibi .
< ecei e
and oid:name=".Blue oo hManage "
and oid:enabled=" ue"
and oid:expo ed=" ue" >
<in en - il e >
<ac ion and oid:name="and oid.blue oo h.de ice.ac ion.ACL_CONNECTED" />
<ac ion and oid:name="and oid.blue oo h.de ice.ac ion.ACL_DISCONNECTED" />
<ac ion and oid:name="and oid.blue oo h.de ice.ac ion.ACL_DISCONNECT_REQUESTED"/>
</in en - il e >
</ ecei e >
6.1.4.2 MapManage
Si eco damos la ac i idad p incipal, exis ía un mé odo llamado s a Map y en él se ejecu aba lo siguien e:
i (mP e e encesManage .isShowMap()) {
// Inicializamos la is a que con iene al mapa
mMapView = (MapView) indViewById(R.id.mapView);
mMapView.onC ea e(sa edIns anceS a e);
MapsIni ialize .ini ialize( his);
// C eamos el obje o MapManage (Codi icado en MapManage .ja a)
mMapManage = new MapManage (mP e e encesManage , mMapView);
// Asignamos es e lis ene al mapa que es amos espe ando.
mMapView.ge MapAsync(mMapManage );
}
De es e modo, asignamos a la is a un callback con enido en el obje o de la clase MapManage que se á
ejecu ado cuando el mapa es é ca gado. De es e modo, se ejecu a á de mane a asínc ona sin alen iza la
in e az de usua io.
Una ez ca gado el mapa se ejecu a á el mé odo onMapReady que comp oba á el es ado de la aplicación y, en
unción del mismo, mos a á una u a ac ual o la úl ima u a ealizada.
Si cambia a el es ado del seguimien o, la ac i idad p incipal debe a isa le a es a clase a a és del mé odo
enableMap pues o que no lo consul a de mane a pe iódica.
El es o de mé odos de la clase son u ilizados pa a limpia el con enido del mapa, es au a los da os de la
úl ima u a y comp oba el es ado del mapa.
6.1.4.3 P e e encesManage
No hay mucho que comen a ace ca de la implemen ación de es a clase, se a a de un conjun o de mé odos
62
Implemen ación
6.2.2.5.1 Adminis ación
Como he amien a de adminis ación, se ha acili ado una sección pa a añadi usua ios y ehículos
( eco demos que se pueden deshabili a o ehabili a desde sus espec i as secciones).
Es o se ealiza median e un sencillo o mula io que con ola á que se ellene co ec amen e median e
Ja aSc ip .
Figu a 6-13. Sección de adminis ación en la página web
6.2.3 Mapas
La implemen ación de mapas a pa i de la API de Google Maps [15] pa a Ja aSc ip esul a muy
in e esan e a la ho a del seguimien o en iempo eal o la consul a de la úl ima posición conocida de algún
conduc o o ehículo.
En p ime luga debemos impo a el sc ip Ja aSc ip que que emos u iliza y pa a ello amos a inclui la
siguien e línea en el elemen o <head> del índice de nues a página.
<sc ip s c="h ps://maps.googleapis.com/maps/api/js?key=API_KEY"></sc ip >
Debemos sus i ui la cadena API_KEY con nues a cla e de la API de Google.
A con inuación, en la zona del cue po HTML en que que amos inclui el mapa, debemos añadi un elemen o de
bloque que ep esen a á el espacio ocupado po el mapa. G acias a es e elemen o pod emos da le un mejo
o ma o (dimensiones) haciendo uso de CSS.
<di id=map-can as></di >
Po an o, nos e e i emos al elemen o que con iene al mapa median e el iden i icado map-can as.
Cuando que amos ca ga el mapa (es deci , en las ichas de alladas), esc ibi emos la siguien e línea que
pe mi e ejecu a un mé odo (ini ialize) cuando se ca gue la en ana.
google.maps.e en .addDomLis ene (window, 'load', ini ialize);
En es e mé odo lo que ha emos se á inicia una se ie de a iables que ep esen a án an o el mapa como los
elemen os que con iene. La inicialización de a iables se hace del siguien e modo:
a mapOp ions = {
zoom: 5,
cen e : new google.maps.La Lng(36.1043454, -5.4509973)
};
a map = new google.maps.Map(documen .ge Elemen ById('map-can as'), mapOp ions);
a coo dina es = [];
a sessionPa h = new google.maps.Polyline({
pa h: coo dina es,
geodesic: ue,
s okeColo : '#FF0000',
63
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
s okeOpaci y: 1.0,
s okeWeigh : 2
});
En el agmen o an e io no apa ecen odas las a iables que se inicializan pe o nos se i á de base pa a
comp ende su uncionamien o. Du an e el uncionamien o del mapa pod emos modi ica la posición de los
ma cado es y la cadena de coo denadas (coo dina es) que ep esen a una sesión (sessionPa h). En
de ini i a, es as a iables son las que nos pe mi i án modela su aspec o inicial y modi ica el con enido del
mapa en iempo de ejecución.
Además de inicia a iables ambién podemos decla a unciones, en nues o caso end emos las siguien es:
unc ion zoomToObjec (obj);
El p incipal uso de es a unción es encuad a el dibujo de la u a den o del mapa pa a que apa ezca con el
zoom adecuado.
En esumen, en es a unción se c ea un obje o google.maps.La LngBounds incluyendo los pun os que
que emos en oca en el mapa y, a con inuación, hacemos uso de la unción map. i Bounds(bounds)
pasando como pa áme o el obje o que hemos cons uido.
unc ion indi idualRe esh();
Es a unción se enca ga de lee de la base de da os la u a que se a a mos a en el mapa ace ca de un
elemen o.
Como Ja aSc ip se ejecu a en el lado del clien e y el acceso a la base de da os debe se en el se ido ,
necesi amos hace uso de la ecnología Ajax que nos pe mi e, de una mane a sencilla, hace pe iciones desde
Ja aSc ip a PHP.
Es as pe iciones Ajax se hacen a a és de la lib e ía jQue y ya que nos o ece unciones muy sencillas de
comp ende .
jQue y.ajax({
u l: 'ajax.php',
ype: 'POST',
da a: {ge Coo dina es: in oToGe },
success: unc ion( esponse){
e al(" a newcoo dina es = [" + esponse. oS ing() + "];");
i (newcoo dina es. oS ing() != coo dina es. oS ing()){
sessionPa h.se Map(null);
coo dina es = newcoo dina es;
sessionPa h.se Pa h(coo dina es);
sessionPa h.se Map(map);
ma ke 1['posi ion'] = coo dina es[0];
ma ke 2['posi ion'] = coo dina es[coo dina es.leng h-1];
ma ke 1.se Map(null);
ma ke 1.se Map(map);
ma ke 2.se Map(null);
ma ke 2.se Map(map);
zoomToObjec (sessionPa h);
in owindow1.open(map, ma ke 1);
i (sec ion == " u as"){
64
Implemen ación
in owindow2.open(map, ma ke 2);
}
}
}
});
Como podemos ap ecia en el código an e io , especi icamos el iche o PHP que a a p ocesa la pe ición
(ajax.php), el ipo de pe ición (POST), la unción PHP (ge Coo dina es), el pa áme o (in oToGe ) y a
con inuación una unción pa a p ocesa la espues a.
En esa espues a, modi icamos la cadena de coo denadas y mo emos los elemen os del mapa en unción de los
nue os da os.
El pa áme o in oToGe es una cadena que se decla a á como a iable al llama a la unción ini ialize y
end á el siguien e o ma o: sección&elemen o.
unc ion colec i eRe esh();
Es a unción es simila a la an e io aunque o ien ada a consul a odos los elemen os del mismo ipo ( odos los
conduc o es o odos los ehículos) y plasma los en el mapa median e ma cado es.
Es as dos úl imas unciones se llama án pe iódicamen e pa a ac ualiza el con enido del mapa a iempo eal15.
6.2.4 G á icas
Las g á icas compa a i as se han c eado haciendo uso de la lib e ía Highcha s [16] basada en
Ja aSc ip . Es a biblio eca es g a ui a pa a uso pe sonal o p oyec os sin ánimo de luc o16.
A con inuación se expone un sc ip simila a los u ilizados pa a log a los esul ados.
<sc ip ype=" ex /ja asc ip ">
$( unc ion () {
$('#con aine ').highcha s({
cha : {
ype: 'column'
},
i le: {
ex : 'Velocidad'
},
xAxis: {
ca ego ies: ['Velocidad (Km/h)']
},
yAxis: {
i le: {
ex : 'Km/h'
}
},
se ies: [{
name: 'Seleccionado',
15!O ece&ac ualizaciones&cada&5&segundos¶&no&sa u a &a&pe iciones&al&se ido ."
16!Bajo%la%licencia%C ea i e%Commons%A ibu ion,NonComme cial*3.0*License."
65
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
da a: [ elocidad]
}, {
name: 'Media o al',
da a: [ elocidadglobal]
}]
});
});
</sc ip >
Con es e código se inclui ía una g á ica de ba as en el elemen o con iden i icado con aine que mues e la
elocidad de un conduc o (po ejemplo) en e a la elocidad media de oda la plan illa de conduc o es.
6.2.5 Resolución de di ecciones
Pa a consegui la esolución de di ecciones a pa i de una la i ud y longi ud se ha c eado una unción
Ja aSc ip que se á llamada una ez po cada di ección a esol e . En es a unción se ha á uso de la API
de Google [17].
El mé odo de esolución es el siguien e:
a geocode = new google.maps.Geocode ();
a la lng = new google.maps.La Lng(la , lon);
geocode .geocode({'la Lng': la lng}, unc ion( esul s, s a us) {
i (s a us == google.maps.Geocode S a us.OK) {
i ( esul s[0]) {
documen .ge Elemen ById(id. oS ing()).inne HTML =
esul s[0]. o ma ed_add ess;
}
}
});
En el código an e io podemos e que c eamos un obje o google.maps.Geocode que pod emos u iliza
pa a consegui la di ección de un obje o google.maps.La Lng en iado como pa áme o.
Como espues a ob end emos una abla con los esul ados o denado en je a quía de de alles. El obje o en el
índice ce o de la abla end á más de alle que cualquie obje o de índice supe io .
Es os obje os son accesibles y pe mi en lee la in o mación que buscamos ( o ma ed_add ess). La
in o mación que ecibimos iene encapsulada en o ma o JSON (po de ec o, aunque ambién podemos elegi
XML), sin emba go, el uso del obje o google.maps.Geocode hace el p oceso de encapsulado o almen e
anspa en e a noso os.
6.2.6 In o mes
En cuan o a la gene ación de in o mes en o ma o CSV, nues a misión es lee la abla que el usua io ha
decidido p oyec a a a és de los il os y olca esos da os en ex o plano siguiendo la es uc u a de dicho
o ma o.
Pa a ello, bas a con lee o denadamen e las celdas de la abla e i ando la úl ima columna (bo ones de acción).
Es o se ealiza median e el siguien e agmen o de código.
a able = documen .ge Elemen ById(" able_s");
a num ows = able. ows.leng h;
a numcells = able. ows[1].cells.leng h;
66
Implemen ación
a cs = "sep=| n";
o (i=0; i<(num ows); i++){
o (j=0; j<(numcells-1) && ( able. ows[i].cells[j] != unde ined); j++){
i ( able. ows[i].cells[j].inne HTML == "Acción"){
}else{
cs += able. ows[i].cells[j].inne HTML. eplace("<b >", " -
"). eplace(".", ",");
}
i (j != (numcells-2)){
cs += "|";
}
}
cs += " n";
}
A a és de es e código podemos lee la abla, almacena el con enido en una a iable (CSV) sus i uyendo los
elemen os que conside emos opo unos (cambia pun os po comas pa a e i a con usión) y añadi los
sepa ado es en el momen o ap opiado.
El sepa ado de columnas se puede especi ica en la p ime a línea del iche o de salida pa a que los in é p e es
ac uales lo in e p e e co ec amen e de mane a au omá ica.
6.2.7 Acceso a la base de da os
La exis encia de una base de da os es lo que da sen ido a nues o se ido y, po an o, sus consul as son el
núcleo del mismo. En es e apa ado amos a analiza algunas de es as sen encias SQL.
• Iden i icación de un usua io
SELECT * FROM USER WHERE use =
'usua io'
AND pass =
'con aseña'
AND s a us = ue;
• Iden i icación de un ehículo
SELECT id_ ehicle FROM VEHICLE WHERE mac =
'MACdelVehiculo'
AND s a us = ue;
• Regis a un usua io
INSERT INTO USER (use , pass, s a us, name, su name) VALUES (
'usua io'
,
'con aseña'
,
'es ado'
,
'nomb e'
,
'apellidos'
);
• Regis a un ehículo
INSERT INTO VEHICLE (id_ ehicle, mac, model, s a us, ene gy) VALUES (
'ma icula'
,
'MAC'
,
'modelo'
,
'es ado'
,
'consumo'
);
• Regis a una sesión
INSERT INTO SESSION (id_session, id_ ehicle, use ) VALUES (NULL,
'ma icula'
,
'usua io'
);
El alo id_session se gene a á au omá icamen e y se pod á consul a a con inuación median e la cláusula
SELECT LAST_INSERT_ID() FROM SESSION.
• Regis a una posición
INSERT INTO SESSION_DET (id_session, a i e_o de , la , lon, ime_c, da e_c, ime_s,
da e_s) VALUES (
sesion
,
o dendellegada
,
la i ud
,
longi ud
,
ho adelclien e
,
67
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
echadelclien e
,
ho adelse ido
,
echadelse ido
)
• Habili a o deshabili a un usua io
UPDATE USER SET s a us =
nue oes ado
WHERE use =
'usua io'
;
• Habili a o deshabili a un ehículo
UPDATE VEHICLE SET s a us =
nue oes ado
WHERE id_ ehicle =
'ma icula'
;
• Ob ene sesiones
SELECT id_session FROM SESSION ORDER BY id_session;
• Ob ene ehículos
SELECT id_ ehicle, model FROM VEHICLE ORDER BY id_ ehicle;
• Ob ene usua ios
SELECT use FROM USER ORDER BY use ;
• Ob ene oda la in o mación de una sesión
SELECT * FROM SESSION_DET NATURAL JOIN SESSION NATURAL JOIN USER NATURAL JOIN VEHICLE
WHERE id_session =
'sesion'
;
Todas es as consul as se ealizan median e PHP del siguien e modo:
$se e name = "localhos ";
$use name = " g";
$passwo d = " g g";
$dbname = "TFG";
// C eamos la conexión con la base de da os
$conn = new mysqli($se e name, $use name, $passwo d, $dbname);
// Comp obamos la conexión con la base de da os
i ($conn->connec _e o ) {
die("Connec ion ailed: " . $conn->connec _e o );
}
$sql = sp in ("
CONSULTA A REALIZAR
");
// Ejecu amos la consul a
$ esul = mysqli_que y($conn, $sql);
// E aluamos el esul ado
/*
*
*/
// Ce amos la conexión
$conn->close();
69
7 PRUEBAS
n es e capí ulo se incluyen di e en es p uebas que demues an el uncionamien o de la he amien a
implemen ada. Pa a ello, se adjun an cap u as an o del se ido como de la aplicación clien e en los
di e en es es ados de uncionamien o.
En el lado del clien e, se ha p obado la aplicación an o en un Mo o ola Mo o G con la e sión Lollipop
de And oid como en un Sony Xpe ia Neo con la e sión Ki Ka . Como disposi i o Blue oo h se ha
p obado un Pa o CK3100 y ambos elé onos mó iles han de ec ado co ec amen e los e en os de conexión
y desconexión.
En cuan o al se ido , su despliegue e ins alación17 se han ealizado sob e una Raspbe y Pi Model B+
bajo el dominio h p://u ejo api.ddns.ne .
7.1 Con igu ación inicial
En p ime luga , una ez ins alado odo po p ime a ez, nues a base de da os se encon a á acía y debemos
c ea las en adas de los usua ios y los ehículos. Pa a ello, usa emos la pes aña Adminis a de la página web.
Figu a 7-1. Regis o de usua ios y ehículos
Una ez enemos c eados los conduc o es y ehículos que nos in e esan, ya podemos p oba el uncionamien o
de la he amien a.
Pa a ello, ab imos la aplicación clien e po p ime a ez y accede emos a los ajus es de la aplicación pa a
con igu a algunos pa áme os.
17!El#p oceso#de#ins alación# an o#del#se ido #como#del#dominio#se#de alla#en#los#anexos."
E
70
P uebas
Figu a 7-2. Ajus es en la aplicación mó il
Una ez con igu ados un usua io y con aseña álidos y la di ección URL del se ido con el que que emos
comunica nos, ya enemos odo lis o pa a empeza .
7.2 Seguimien o de sesiones
Si alguno de los conduc o es asociados comienza un seguimien o, ya sea manual o au omá ico,
inmedia amen e se añadi á una en ada en la abla de la sección Ru as de la página web que mos a á
in o mación sob e la sesión en cu so.
Figu a 7-3. En ada en lis a de sesiones.
No solo ha apa ecido una en ada sino que si accedemos al con enido a a és de la lupa, e emos que aunque
la sesión no es á inalizada, podemos e el eco ido de es a sesión en cu so. Es a in o mación se ac ualiza y
pe mi e un seguimien o en iempo eal de mane a emo a.
71
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
Figu a 7-4. Seguimien o en iempo eal en el clien e.
Figu a 7-5. Seguimien o en iempo eal en el se ido .
Una ez la sesión haya inalizado, podemos accede a la icha de allada de la misma y compa a la u a
dibujada en el clien e con la almacenada en el se ido pa a comp oba que el uncionamien o es el espe ado.
Figu a 7-6. Sesión comple a en el clien e
Figu a 7-7. Sesión comple a en el se ido
78
Anexos
@O e ide
public oid onLowMemo y() {...}
}
9.1.2 Esquele o de Connec ionSe ice
package com. icen e. g;
impo and oid.app.Se ice;
impo and oid.con en .In en ;
impo and oid.os.AsyncTask;
impo and oid.os.IBinde ;
impo and oid.u il.Log;
impo com.google.and oid.gms.common.Connec ionResul ;
impo com.google.and oid.gms.common.GooglePlaySe icesU il;
impo o g.apache.h p.H pResponse;
impo o g.apache.h p.NameValuePai ;
impo o g.apache.h p.clien .H pClien ;
impo o g.apache.h p.clien .en i y.U lEncodedFo mEn i y;
impo o g.apache.h p.clien .me hods.H pPos ;
impo o g.apache.h p.impl.clien .De aul H pClien ;
impo o g.apache.h p.message.BasicNameValuePai ;
impo o g.apache.h p.pa ams.BasicH pPa ams;
impo o g.apache.h p.pa ams.H pConnec ionPa ams;
impo o g.apache.h p.pa ams.H pPa ams;
impo o g.apache.h p.u il.En i yU ils;
impo ja a. ex .SimpleDa eFo ma ;
impo ja a.u il.A ayLis ;
impo ja a.u il.Da e;
impo ja a.u il.Lis ;
public class Connec ionSe ice ex ends Se ice{
p i a e s a ic Connec ionSe ice mIns ance;
p i a e H pClien mH pClien ;
p i a e H pResponse mH pResponse;
p i a e H pPos mH pPos ;
p i a e In ege mSession;
p i a e P e e encesManage mP e e encesManage ;
p i a e S ing mU l;
p i a e S ing mUse ;
p i a e S ing mPasswo d;
p i a e S ing mMac;
p i a e inal s a ic in TIME_BETWEEN_RETRY = 10000;
p i a e inal s a ic in TIMEOUT_CONNECTION = 5000;
p i a e inal s a ic in TIMEOUT_SOCKET = 3000;
public Connec ionSe ice(){...}
@O e ide
public in onS a Command(In en in en , in lags, in s a Id) {...}
79
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
@O e ide
public oid onDes oy() {...}
p i a e boolean s a Flow(){...}
public oid s a T ack(){...}
public boolean logIn(){...}
public boolean sendMac(){...}
public oid sendDa a( inal S ing la i ud, inal S ing longi ud){...}
public oid endFlow(){...}
public s a ic Connec ionSe ice ge HTTPIns ance() {...}
@O e ide
public IBinde onBind(In en in en ) {...}
}
9.1.3 Esquele o de Loca ionSe ice
package com. icen e. g;
impo and oid.app.Se ice;
impo and oid.con en .In en ;
impo and oid.loca ion.Loca ion;
impo and oid.os.AsyncTask;
impo and oid.os.Bundle;
impo and oid.os.IBinde ;
impo and oid.u il.Log;
impo com.google.and oid.gms.common.Connec ionResul ;
impo com.google.and oid.gms.common.api.GoogleApiClien ;
impo com.google.and oid.gms.common.api.GoogleApiClien .Connec ionCallbacks;
impo com.google.and oid.gms.common.api.GoogleApiClien .OnConnec ionFailedLis ene ;
impo com.google.and oid.gms.loca ion.Loca ionReques ;
impo com.google.and oid.gms.loca ion.Loca ionSe ices;
impo com.google.and oid.gms.loca ion.Loca ionLis ene ;
public class Loca ionSe ice ex ends Se ice implemen s Loca ionLis ene , Connec ionCallbacks,
OnConnec ionFailedLis ene {
p i a e s a ic Loca ionSe ice mIns ance;
p i a e s a ic inal S ing TAG = "Loca ionSe ice";
public s a ic inal long UPDATE_INTERVAL_IN_MILLISECONDS = 8000;
public s a ic inal long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = UPDATE_INTERVAL_IN_MILLISECONDS / 2;
p i a e GoogleApiClien mGoogleApiClien ;
p i a e Loca ionReques mLoca ionReques ;
p i a e Loca ion mCu en Loca ion;
p i a e Boolean mReques ingLoca ionUpda es;
p i a e P e e encesManage p e e encesManage ;
@O e ide
public oid onC ea e() {...}
@O e ide
public in onS a Command(In en in en , in lags, in s a Id) {...}
80
Anexos
p o ec ed synch onized oid buildGoogleApiClien () {...}
p o ec ed oid c ea eLoca ionReques () {...}
public oid s a T ack() {...}
public oid s opT ack() {...}
p o ec ed oid s a Loca ionUpda es() {...}
p o ec ed oid s opLoca ionUpda es() {...}
@O e ide
public oid onConnec ed(Bundle connec ionHin ) {...}
@O e ide
public oid onLoca ionChanged( inal Loca ion loca ion) {...}
@O e ide
public oid onConnec ionSuspended(in cause) {...}
@O e ide
public oid onConnec ionFailed(Connec ionResul esul ) {...}
@O e ide
public IBinde onBind(In en in en ) {...}
@O e ide
public oid onDes oy() {...}
public s a ic Loca ionSe ice ge GPSIns ance() {...}
}
9.1.4 Esquele o de Loca ionSe iceCompa ible
package com. icen e. g;
impo and oid.app.Ale Dialog;
impo and oid.app.Se ice;
impo and oid.con en .Con ex ;
impo and oid.con en .DialogIn e ace;
impo and oid.con en .In en ;
impo and oid.loca ion.Loca ion;
impo and oid.loca ion.Loca ionLis ene ;
impo and oid.loca ion.Loca ionManage ;
impo and oid.os.AsyncTask;
impo and oid.os.Bundle;
impo and oid.os.IBinde ;
impo and oid.p o ide .Se ings;
impo and oid.u il.Log;
public class Loca ionSe iceCompa ible ex ends Se ice implemen s Loca ionLis ene {
p i a e inal Con ex mCon ex ;
p i a e s a ic Loca ionSe iceCompa ible mIns ance;
boolean isGPSEnabled = alse;
boolean isNe wo kEnabled = alse;
boolean canGe Loca ion = alse;
public Loca ion mLoca ion;
public Loca ion mCu en Bes Loca ion;
p i a e s a ic inal long MIN_DISTANCE_CHANGE_FOR_UPDATES = 5;
p i a e s a ic inal long MIN_TIME_BW_UPDATES = 1000 * 7;
81
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
p o ec ed Loca ionManage mLoca ionManage ;
p i a e P e e encesManage mP e e encesManage ;
p i a e s a ic inal S ing TAG = "Loca ionSe iceC";
public Loca ionSe iceCompa ible() {...}
@O e ide
public in onS a Command(In en in en , in lags, in s a Id) {...}
public Loca ion ge Loca ion() {...}
public oid s opUsingGPS(){...}
public oid showSe ingsAle (){...}
@O e ide
public oid onLoca ionChanged( inal Loca ion loca ion) {...}
@O e ide
public oid onP o ide Disabled(S ing p o ide ) {...}
@O e ide
public oid onP o ide Enabled(S ing p o ide ) {...}
@O e ide
public oid onS a usChanged(S ing p o ide , in s a us, Bundle ex as) {...}
p i a e boolean isBe e Loca ion(Loca ion loca ion, Loca ion cu en Bes Loca ion) {...}
p i a e boolean isSameP o ide (S ing p o ide 1, S ing p o ide 2) {...}
public s a ic Loca ionSe iceCompa ible ge GPSIns ance() {...}
@O e ide
public oid onDes oy() {...}
@O e ide
public IBinde onBind(In en a g0) {...}
}
9.1.5 Esquele o de MapManage
package com. icen e. g;
impo and oid.loca ion.Loca ion;
impo and oid.u il.Log;
impo and oid. iew.ViewT eeObse e ;
impo com.google.and oid.gms.maps.Came aUpda eFac o y;
impo com.google.and oid.gms.maps.GoogleMap;
impo com.google.and oid.gms.maps.MapView;
impo com.google.and oid.gms.maps.OnMapReadyCallback;
impo com.google.and oid.gms.maps.model.La Lng;
impo com.google.and oid.gms.maps.model.La LngBounds;
impo com.google.and oid.gms.maps.model.Ma ke Op ions;
impo com.google.and oid.gms.maps.model.Polyline;
impo com.google.and oid.gms.maps.model.PolylineOp ions;
impo ja a.u il.A ayLis ;
public class MapManage implemen s OnMapReadyCallback {
p i a e GoogleMap mGoogleMap;
82
Anexos
p i a e P e e encesManage mP e e encesManage ;
p i a e MapView mMapView;
public GoogleMap.OnMyLoca ionChangeLis ene mLoca ionChangeLis ene ;
p i a e Boolean mT igge ;
p i a e A ayLis <La Lng> mLa LngA ayLis ;
p i a e Polyline mRou e;
p i a e in mRou eColo ;
MapManage (P e e encesManage p e e encesManage , MapView mapView){...}
@O e ide
public oid onMapReady( inal GoogleMap googleMap) {...}
p i a e oid polylineD awe (La Lng posi ion){...}
public oid esumeMap(){...}
p i a e La LngBounds showLas Rou e(){...}
public oid clea Map(){...}
public oid enableMap(Boolean oggle){...}
public boolean isMyLoca ionEnabled(){...}
}
9.1.6 Esquele o de P e e encesManage
package com. icen e. g;
impo and oid.app.Ac i i yManage ;
impo and oid.con en .Con ex ;
impo and oid.con en .Sha edP e e ences;
impo and oid.loca ion.Loca ion;
public class P e e encesManage {
p i a e Sha edP e e ences mSha edP e e ences;
public P e e encesLis ene mP e e encesLis ene ;
public Con ex mCon ex ;
p i a e s a ic boolean au oMode = alse;
public inal s a ic S ing onwai = "Pulse "Inicia " pa a comenza una nue a u a";
public inal s a ic S ing onconnec = "Conec ando";
public inal s a ic S ing on ack = "Ras eando";
public inal s a ic S ing one o = "Se ha p oducido un e o ";
public inal s a ic S ing ondisconnec = "Mos ando u a ealizada";
public inal s a ic S ing on inish = "Fin del as eo";
public inal s a ic S ing on e y = "Rein en ando";
public inal s a ic S ing onbadlogin = "E o de iden i icación";
P e e encesManage (Con ex mCon ex ){}
public oid se P e e encesLis ene (Con ex con ex ){...}
public boolean isH pSession(){...}
public boolean isMySe iceRunning(Class<?> se iceClass) {...}
public boolean isGpsSession(){...}
83
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
public oid clea Las Rou eIn o(){...}
public oid se U l(S ing u l){...}
public S ing ge U l(){...}
public oid se Use (S ing use ){...}
public S ing ge Use (){...}
public oid se Pass(S ing pass){...}
public S ing ge Pass(){...}
public oid se Mac(S ing mac){...}
public S ing ge Mac(){...}
public s a ic boolean isAu oMode(){...}
public s a ic oid se Au oMode(boolean au o){...}
public oid se ShowMap(boolean ac ion){...}
public oid se S a us(S ing s a us){...}
public boolean isShowMap(){...}
public oid addToLas Rou e(Loca ion loca ion){...}
public S ing ge Las Rou e(){...}
public in ge Rou eColo (){...}
public oid se Rou eColo (in colo ){...}
}
9.1.7 Esquele o de P e e encesLis ene
package com. icen e. g;
impo and oid.con en .Con ex ;
impo and oid.con en .In en ;
impo and oid.con en .Sha edP e e ences;
public class P e e encesLis ene implemen s Sha edP e e ences.OnSha edP e e enceChangeLis ene {
p i a e MainAc i i y mMainAc i i y;
p i a e inal s a ic S ing TAG = "P e e encesLis ene ";
P e e encesLis ene (Con ex con ex , Sha edP e e ences sha edP e e ences){...}
@O e ide
public oid onSha edP e e enceChanged(Sha edP e e ences sha edP e e ences, S ing key) {...}
}
9.1.8 Esquele o de Se ingsAc i i y
package com. icen e. g;
impo and oid.app.Ac i i y;
impo and oid.app.Ale Dialog;
impo and oid.con en .DialogIn e ace;
impo and oid.con en .In en ;
impo and oid.os.Bundle;
impo and oid. ex .Inpu Type;
impo and oid. iew.View;
impo and oid.webki .URLU il;
84
Anexos
impo and oid.widge .Edi Tex ;
impo and oid.widge .Linea Layou ;
impo and oid.widge .Swi ch;
impo and oid.widge .Tex View;
impo and oid.widge .Toas ;
public class Se ingsAc i i y ex ends Ac i i y {
p i a e Tex View mEdi Use ;
p i a e Tex View mEdi Pass;
p i a e Tex View mEdi U l;
p i a e Swi ch mMapToggle;
P e e encesManage mP e e encesManage ;
@O e ide
p o ec ed oid onC ea e(Bundle sa edIns anceS a e) {...}
p i a e oid se All(){...}
public oid onClickC eden ialsBu on( inal View iew){...}
public oid onClickSe e Bu on(View iew){...}
public oid onClickMapToggle(View iew){...}
}
9.1.9 Esquele o de Blue oo hManage
package com. icen e. g;
impo and oid.blue oo h.Blue oo hDe ice;
impo and oid.con en .B oadcas Recei e ;
impo and oid.con en .Con ex ;
impo and oid.con en .In en ;
impo and oid.u il.Log;
public class Blue oo hManage ex ends B oadcas Recei e {
p i a e inal s a ic S ing TAG = "Blue oo hManage ";
public Con ex mCon ex ;
public Blue oo hManage () {...}
@O e ide
public oid onRecei e(Con ex con ex , In en in en ) {...}
}
9.1.10 Diag ama de clases comple o
85
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
86
Anexos
Figu a 9-1. Diag ama de clases del clien e
9.2 Se ido
9.2.1 Despliegue del se ido
Pa a pode lle a a cabo las p uebas ealizadas, se ha u ilizado una Raspbe y Pi bajo una dis ibución Linux
basada en Debian Wheezy. Aunque se a a de un disposi i o de baja po encia, ha sido más que su icien e
pa a ealiza las comp obaciones de uncionamien o co ec o.
El se ido HTTP que se ha desplegado sob e el equipo es Nginx, una ecnología g a ui a, de código lib e y
al o endimien o. Aunque la ins alación de es e so wa e puede a ia lige amen e de un disposi i o a o o, a
con inuación adjun o algunos pasos a segui si que emos ins ala lo en un disposi i o bajo la dis ibución
Debian.
En p ime luga , haciendo uso de la he amien a ap -ge (necesi amos los eposi o ios al día), hacemos lo
siguien e.
oo @equipo:~# ap -ge ins all nginx php5- pm php-apc
De es e modo hemos ins alado nginx y lo necesa io pa a in e p e a PHP. A con inuación, debemos ins ala la
base de da os.
oo @equipo:~# ap -ge ins all mysql-clien mysql-se e php5-mysql
Y ya end emos los paque es necesa ios ins alados. En cuan o a la con igu ación de los mismos, depende á de
las p e e encias de cada usua io aunque en odo caso debemos modi ica el iche o de con igu ación de nues a
web alojado en /e c/nginx/si es-a ailable/midominio.con , en nues o caso y como sólo se a a
de un p o o ipo, hemos u ilizado el iche o de aul que iene po de ec o aunque es ecomendable c ea uno
apa e. A con inuación se adjun a el iche o de con igu ación que se ha u ilizado pa a las p uebas.
se e {
lis en 80; ## lis en o ip 4; his line is de aul and implied
#lis en [::]:80 de aul _se e ip 6only=on; ## lis en o ip 6
oo /us /sha e/nginx/www;
index index.php index.h ml index.h m;
# Make si e accessible om h p://localhos /
se e _name localhos ;
loca ion / {
}
loca ion /doc/ {
alias /us /sha e/doc/;
au oindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
87
Implemen ación de una he amien a dis ibuida pa a el seguimien o de una lo a de ehículos
loca ion ~ .php$ {
as cgi_spli _pa h_in o ^(.+ .php)(/.+)$;
# Wi h php5- pm:
as cgi_pass unix:/ a / un/php5- pm.sock;
as cgi_index index.php;
include as cgi_pa ams;
}
# deny access o .h access iles, i Apache's documen oo
# concu s wi h nginx's one
#
loca ion ~ / .h {
deny all;
}
}
9.2.2 Despliegue de la base de da os
Una ez desplegado el se ido y con PHP uncionando, debemos c ea nues a base de da os. Pa a ello,
accedemos a MySQL con la con aseña de supe usua io que nos pidió c ea al ins ala el paque e.
mysql -u oo -p
Una ez acep ada, en a emos en la consola MySQL y en p ime luga debe íamos c ea un usua io y con aseña
pa a lee la base de da os que amos a c ea a con inuación. Pa a ello, podemos c ea un iche o SQL con el
siguien e con enido e in e p e a lo median e MySQL.
CREATE DATABASE IF NOT EXISTS TFG;
USE TFG;
CREATE TABLE USER (
use VARCHAR(30) PRIMARY KEY,
pass VARCHAR(40) NOT NULL,
s a us BOOLEAN NOT NULL,
name VARCHAR(255) NOT NULL,
su name VARCHAR(255) NOT NULL
);
CREATE TABLE VEHICLE (
id_ ehicle VARCHAR(40) PRIMARY KEY,
mac VARCHAR(40) NOT NULL,
model VARCHAR(40) NOT NULL,
s a us BOOLEAN NOT NULL,
ene gy INT(10)
);
CREATE TABLE SESSION (
id_session INT(10) AUTO_INCREMENT PRIMARY KEY,
id_ ehicle VARCHAR(40),