scieee Science in your language
[es] (orig)

Implementación de una herramienta distribuida para el seguimiento de una flota de vehículos

Abstract

Este documento recoge el estudio y desarrollo de una herramienta distribuida para el seguimiento de una flota de vehículos. En él, se analiza el mercado actual y se propone una solución alternativa de bajo coste para que las empresas con menos recursos económicos puedan llevar a cabo monitorizaciones de este tipo y tengan un control total sobre su inventario de transporte. Esta solución pasa por usar los teléfonos móviles de los empleados como elementos agentes que enviarán su posición de manera inteligente cuando sea necesario, evitando así el uso de localizadores GPS de uso específico que son, junto con su mantenimiento, los responsables del alto sacrificio económico que suponen otras alternativas

Read accessible full text

Implementación de una herramienta distribuida para el seguimiento de una flota de vehículos

Author: Mayor Gallego, Vicente Jesús
Year: 2015
Source: https://idus.us.es/bitstreams/b7075a09-99b4-4ca2-9a8c-b40abbe8eb62/download
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),