Hécate: aplicación Android con realidad aumentada y geolocalización
Abstract
El proyecto tiene como objetivo desarrollar una aplicación de Realidad Aumentada (a partir de ahora R.A.) que se incorpore como complemento en la aplicación Vadeo 2.0 Móvil para Android realizada en el proyecto Hécate. La aplicación debe ofrecer dinámicamente información en tiempo real acerca del estado de la accesibilidad de las vías públicas.
Full text
UNIVERSIDADPOLITÉCNICADEVALENCIA FACULTADDEINFORMÁTICA INGENIERÍAINFORMÁTICA PROYECTOFINDECARRERA HÉCATE AplicaciónAndroidconRealidadAumentada yGeolocalización ALUMNO:DIRECTOR: JoseMªMartinezLechonJuanMiguelGarcíaGómez TUTORES: ZoeValeroRamón JoséLuisBayoMontón AñoAcadémico2011/2012 UniversidadPolitécnicadeValencia CaminodeVeras/n 46022Valencia España
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón ii
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón iii Índicegeneral Índicegeneral.................................................................................................iii Introducción...................................................................................................vi 1. Objetivos......................................................................................................................................vii 2. Estructuradeestedocumento.............................................................................................ix 1Preliminares............................................................................................1 1.1 Estudiodecampo..................................................................................................................1 1.1.1Discapacidades.........................................................................................................................2 1.1.2TecnologíaAsistiva.................................................................................................................3 1.1.3Perfilesdelusuario..................................................................................................................4 1.2 RealidadAumentada............................................................................................................5 1.2.1Tecnología...................................................................................................................................6 2EstadodelArte........................................................................................7 2.1.1Layar..............................................................................................................................................7 2.1.2WikitudeWorldBrowser......................................................................................................8 2.1.3Mixare...........................................................................................................................................8 2.1.4LookAr...........................................................................................................................................9 2.1.5LibreGeosocial........................................................................................................................10 3Materialesymétodos............................................................................11 3.1 Android:Plataformadedesarrollo..............................................................................11 3.1.1Estructuraycaracterísticas.............................................................................................12 3.1.1.1LinuxKernel..........................................................................................................................13 3.1.1.2AndroidRuntime.................................................................................................................13 3.1.1.3Libraries..................................................................................................................................14 3.1.1.4ApplicationsFramework.................................................................................................14 3.1.1.5Applicactions........................................................................................................................15 3.1.2Hardware..................................................................................................................................15 3.1.3Herramientasdedesarrollo.............................................................................................17 3.1.3.1AndroidSDK(SoftwareDevelopmentKit)..............................................................17 3.1.3.2NDK(NativeDevelopmentKit)....................................................................................17
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón iv 3.1.4Diseñodeaplicacionesaccesibles.................................................................................18 3.1.5Modelodenegocio................................................................................................................18 3.1.6ProblemaslocalizadosenAndroid...............................................................................21 3.1.6.1Fragmentación....................................................................................................................21 3.1.6.2EstándaresdeJava.............................................................................................................22 3.2 FrameworkdedesarrollodeR.A..................................................................................22 3.2.1Mixare........................................................................................................................................23 3.2.2Layar...........................................................................................................................................24 3.2.3Wikitude....................................................................................................................................25 3.2.4LookAR!.....................................................................................................................................26 3.2.5LibreGeoSocial........................................................................................................................27 3.2.6Resumen....................................................................................................................................28 4Hécate:AplicacióndeRealidadAumentada..........................................30 4.1 Introducciónalafuncionalidad.....................................................................................31 4.2 Especificaciónfuncional...................................................................................................34 4.2.1Funcionalidad.........................................................................................................................34 4.3 Requisitosdeusabilidad..................................................................................................38 4.4 Especificaciónderequisitos(Casosdeuso)............................................................40 4.4.1Modográfico...........................................................................................................................42 4.4.2Modotexto................................................................................................................................45 5Arquitecturadelaaplicación.................................................................48 5.1 ClienteAndroid....................................................................................................................51 5.1.1Ciclodevidadelaaplicación..........................................................................................52 5.1.2Manejodelamemoria........................................................................................................54 5.1.3GPSyLocalización................................................................................................................57 5.1.4Conexiónainternet..............................................................................................................62 5.1.5CámarayOpenGL.................................................................................................................66 5.1.6Text‐to‐speech........................................................................................................................69 5.1.7TarjetadememoriayLazyLoader...............................................................................70 5.1.8SherlockActionBar................................................................................................................71 5.1.9Opcionesdebúsqueda.........................................................................................................72 5.1.10FrameworkdeR.A.LibreGeoSocial.............................................................................73 5.1.11Lossensores............................................................................................................................77 5.2 ElServidorWeb...................................................................................................................98 5.2.1Modelodedatos..................................................................................................................101
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón v 5.2.2BasedeDatos.......................................................................................................................102 5.2.3Diagramadeclases...........................................................................................................103 6Conclusiones.......................................................................................105 7Glosariodetérminos...........................................................................107 8Bibliografía..........................................................................................110 9ApéndiceA..........................................................................................113 9.1 Especificaciónderequisitos:Casosdeuso............................................................113 10ApéndiceB......................................................................................126 10.1 CiclodevidadelasaplicacionesAndroid..............................................................126 10.1.1Estadosenelciclodevida.............................................................................................127 10.1.2Métodosutilizadosenelciclodevida.....................................................................127
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón vi Introducción Actividadescomodesplazarse,comunicarse,usaromanipularformanpartede laactividadhumana,dependiendodelascapacidadestécnicas,cognitivasofísicas cadapersona,seafrontanestasactividadesconungradodiferentedeculminación. Garantizarlaaccesibilidadsignificaasegurarquecualquierpersonapuederealizar estasactividadesdeformasegura,cómodaeindependientesinencontrarningúntipo debarrera.Sinembargo,distintosfactorestantosocialescomoeconómicoso arquitectónicoslimitanlarealizacióndeestasactividadesauncolectivoimportantede lapoblacióncomosonlaspersonasconmovilidadreducidaorestricciónenel desplazamiento.SegúnelInstitutoNacionaldeEstadística,enlasociedadespañola estecolectivorondaloscuatromillonesdepersonas,cercadeun9%delapoblación. Comoconsecuenciadelasdeficienciasenlasinfraestructuraspúblicasestaspersonas venlimitadosuaccesoalmedio,lugardetrabajo,ociootransporte.Elconocimiento delestadoyniveldeaccesibilidaddelentornoquelesrodeapuedesuponerunagran ventajaparaestecolectivo,deformaquepuedenplanificarsusdesplazamientosen basealainformacióndeaccesibilidaddisponible. ElproyectoHécate,dentrodelqueseenmarcaelpresentetrabajo,tienecomo objetivolacreacióndeunsistemaintegraldegestióndeaccesibilidadglobalyde consultaeinformaciónciudadanaquepermitamejorardeformacontinuala accesibilidadenlosespaciospúblicos.Lasoluciónpropuestaconsisteenunsistema formadopordosaplicacionesindependientesretroalimentadas. LaprimeraaplicaciónsetratadeunaherramientadeGestiónIntegralde Accesibilidad(GIA).Esunaherramientaprofesionaldeaccesibilidadconlaqueel profesionaldeaccesibilidadvalida,planificaygestionalaaccesibilidaddelespacio públicobasándoseeninformaciónurbanísticayarquitectónicaheterogéneagenerada pordistintosactores:ciudadanía(pertenecienteaalgúncolectivoono),laentidad localyelpropioprofesional.Conestaherramientaelprofesionalpodrádiagnosticarla accesibilidaddelespacio,planificarlasactuacionesnecesarias,realizarlapropuestade soluciónalascarenciasdetectadas,certificarlaaccesibilidaddelespaciosegúnla
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón vii legislaciónynormativaactualizada(UNEeISO),realizarpresupuestosygestionarla informacióngenerada. LasegundaesunaaplicacióndeConsulta,InformaciónyRutas(VADEO2.0) paraelciudadanobasadaenunaaplicaciónderedsocialonlineyunservidorde mapas.Atravésdeestaherramienta,elusuariopuedeconsultarlainformaciónde accesibilidadgeneradaporlosdistintosactores,trazarrutasaccesiblesentredistintos puntos,geo‐referenciardichospuntosygenerarinformaciónsobreelnivelde accesibilidaddesuentorno,lacualpodráseranalizadayvalidadaposteriormentepor elprofesional.VADEO2.0estáaccesibleenversiónwebyenversiónmóvil.Laversión móvilhasidodesarrolladaparadispositivosAndroid,albergandounaaplicaciónde RealidadAumentadaañadidacomomóduloindependientequeaportauna funcionalidadadicional.Estafuncionalidadadicionalmuestraelniveldeaccesibilidad entiemporealsobreelespaciopúblicoalrededordelusuario,yhasidodesarrollada comounaaplicaciónindependientequeseajustaalasnecesidadesinformativasde Vadeo,peroqueademás,dadoqueesunaaplicación,puedaserreaprovechadapara incorporarseenotrasaplicacionesocomoaplicaciónindependiente.Laaplicaciónde RealidadAumentadasuponeotramaneradeconsultarlainformacióndeaccesibilidad generadaporlosdistintosactores,superponiendoimágenesdelmundorealcon informacióndeaccesibilidad,facilitandolareferenciadelaaccesibilidaddelazona rápidamente.Todaesafuncionalidaddeesladesarrolladaenelpresentetrabajo. ElproyectoHécatesedesarrollaeneldepartamentodeTecnologíasparala SaludyelBienestar(TSB),delInstitutodeaplicacionesdelasTecnologíasdela InformaciónydelasComunicacionesAvanzadas(ITACA). 1. Objetivos ElproyectotienecomoobjetivodesarrollarunaaplicacióndeRealidad Aumentada(apartirdeahoraR.A.)queseincorporecomocomplementoenla aplicaciónVadeo2.0MóvilparaAndroidrealizadaenelproyectoHécate.Laaplicación debeofrecerdinámicamenteinformaciónentiemporealacercadelestadodela accesibilidaddelasvíaspúblicas.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón viii Losprincipalesobjetivosquedebecumplirlaaplicaciónsonlossiguientes: Utilizartecnologíasdelocalizaciónparaubicarlaposicióndelusuarioen exteriores. Representarenlapantalladeldispositivolainformaciónrealcaptadaporla cámaradeldispositivojuntoconlainformacióndescargadadelos servidoresdeHécate(Vadeo). Optimizarlosrecursosqueconsumaeldispositivo,tantodetráficodedatos comodebatería. UtilizarelmodelodedatosheredadodelproyectoVadeo. Cumplirconlosestándaresbásicosdeaccesibilidadestablecidospor Androidparafacilitarlausabilidaddelaaplicación. Lossiguientesobjetivossonsecundariosperodebenserincorporadosenla medidaqueseaposible: Lacomunicaciónconelservidordeberáserescalableparaquefuturas mejoraspuedanserincorporadasalproyecto. LainformacióndeRAdebeintegrarsecompletamentedentrodela aplicacióndeVadeosinnecesidaddelanzarotrasaplicaciones. Empleartecnologíasoherramientasquepermitanlafuturaexplotaciónde laaplicación,sinningúntipodecláusularestrictiva. Incorporarherramientasdeaccesibilidadparapoderfacilitarlautilización porpartedepersonasconlimitacionesfísicas.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón ix 2. Estructuradeestedocumento Eldocumentorealizaunadescripciónprogresivasobrelasnocionesnecesarias paracomprendereltrabajorealizadoenelproyecto.Elprimercapítulorealizaun estudioparadeterminaraquienvadirigidaestaaplicación,laspersonasconmovilidad reducida,yquediscapacidadespuedenencontraseenesesectordelasociedad, ademásdescribeelconceptodeRealidadAumentadaenelquesebasaelproyecto.El segundocapítuloresumeelestadodelartedeaplicacionesdeRealidadAumentada paradeterminarsiexistealgunaqueseasemejealosobjetivosmarcadosenel proyecto.Eltercercapítulodetallatodaslasherramientasutilizadasenelproyectoyse concretaqueFrameworkdeRealidadAumentadasehautilizado.Conlasherramientas detrabajoclaras,elcapítulocuatroespecificalascaracterísticas,requisitosy funcionalidadesquelaaplicacióndeRealidadAumentadadebecumplir.Elquinto capítulocontieneunaintroducciónatodoelcontenidodelproyectoHécateydefine todosycadaunodeloscomponentesdelaaplicacióndeRealidadAumentadapara determinarelrolquedesempeñan.Lasconclusionesdelproyectoestándefinidasenel capítuloseis.Parafinalizarlossiguientescapítuloscontienenunglosariodetérminos parafacilitarlacomprensióndelostérminosotecnicismos,labibliografíautilizaday dosapéndicesconinformacióncomplementariadeapartadosdeldocumento.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 7 2 EstadodelArte LasaplicacionesdeR.A.paradispositivosmóvileshanidoapareciendoalolargo deestosúltimosañosdebidoalaumento,tantodelascapacidadesHardware,comode losnuevossistemasoperativosqueintegrantodosloscomponentesnecesariosGPS, giroscopiosoacelerómetros. Enelmercadoactualexisteungrannúmerodeaplicacionesqueincorporanla realidadaumentadaparaofrecerdemaneramásinteractivaydinámicainformación sobreelentornoquerodeaalusuario.Estasaplicacionesseasemejanalosobjetivos quesedeseanalcanzarenelproyecto,aunquecarecendepuntosquehacenqueno todasseanválidas.Paraelproyectoseestábuscandounaaplicaciónquedispongade tecnologíadelocalizaciónypremielaaccesibilidad.Ladisponibilidadde documentaciónqueelusuariopuedaconsultarparaelaprendizajepuedevalorarse comofavorableaunquenoesunobjetivoestablecido.Lainformaciónarepresentares otrodelospuntosadestacar,laintenciónesquelasaplicacionespuedanreproducirla informaciónqueofreceVadeo.Acontinuaciónsedetallanlasaplicacionesque,tras revisarelmercado,másseasemejanalasnecesidadesdefinidas. 2.1.1 Layar Layaresunaaplicaciónmuycompletaqueutilizasupropionavegador paramostrarlainformacióndelentornoquerodeoalusuario.La informaciónseagrupaencapasquerepresentanunatemática.El usuariopuedeseleccionarunaovariascapasylaaplicaciónmuestra aquellospuntosmáscercanos relacionadosconlainformación seleccionada.Disponede herramientasparalocalizarla posicióndelusuarioyrealizar búsquedasdetalladasdel Figura4:Layar
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 8 entorno.Porúltimo,disponedeunabuenadocumentaciónademásde unequipodesoportetécnicoquepuedefacilitarlealusuarioelproceso deaprendizajedelaaplicación[11]. 2.1.2 WikitudeWorldBrowser Wikitudeesunaherramientamuy elaboradaenelcampodelaR.A.Utiliza capasparaagruparlainformacióna mostrar.Losusuariospuedenasociarsea tantascapascomocreanoportunooañadirpuntosencasodeestar registrado.Cuentaconunmapadondepoderconsultarlascapas asociadasensupáginaweb.Entrelainformaciónquemuestrase encuentranetiquetas,imágeneseinclusoimágenesanimadas.Conesta aplicaciónpuedeocurrirqueseaposiblerepresentartodala informacióndisponibleenVadeo,limitándoseelcontenido.Porotra parte,disponedemuchadocumentaciónyopcionesdeaprendizajeque puedefacilitaralusuariosuutilización.Suinterfazgráficaesmuy intuitivaaunquenodisponedetodaslasherramientasdeaccesibilidad quepodríanpermitirelaccesoalamayoríaeusuarios.[12] 2.1.3 Mixare LaaplicaciónMixareesotradelas másdestacadasenelámbitodeR.A. endispositivosmóviles.Suinterfaz gráficanoestanamigablecomolo puedenserlasanterioresaplicaciones descritas,LayaryWikitude,pero tambiénofreceunaamplia informaciónsobrelospuntoscercanosalusuario.Enestecasola Figura6:Mixare Figura5:Wikitude
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 9 informaciónestaorganizadaenunamismatemática,sinnecesidadqueel usuariodebaseleccionarlascapasdeinformaciónamostrarenlapantalla. Enaspectosdeaccesibilidadcarecedeherramientasquepuedan reproducireltextoqueapareceenlapantallaynodisponedeinformación deusotandetalladacomopuedantenerporejemplolasaplicaciones anteriormentedescritas.[13] 2.1.4 LookAr Aplicaciónmuycompletaparalocalización eninteriordeedificiosutilizando dispositivosWIFIynavegacióninercial, aunquetambiénpuedeserajustadaparalalocalizacióndelusuarioen exteriores.Estacombinacióndeinterioryexteriorpodríallegarapermitir unamplioconocimientodetodalatrayectoriaporpartedelusuario, aunqueesacombinaciónexcededelosobjetivosbuscadosenelproyecto. AligualqueMixare,lainformaciónnosealmacenaencapasypredomina unatemáticadefinidaporlaaplicación.Lasdesventajasdeutilizaresta aplicaciónsebasanensuinterfazgráficoacausadesudiseñoo herramientasparaelaborarloyademásdeltrabajoarealizarparaajustar lalocalizaciónenexteriores.Laaccesibilidadtampocoessupuntofuerte,al noincorporarningunaherramienta.Porúltimoyaunquenoseaundetalle crucialladocumentacióndisponibleparaelusuarioesbastantelimitaday podríadificultarelaprendizajedelaaplicación.[15] Figura7:LookAR
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 10 2.1.5 LibreGeosocial LaaplicacióndeR.A.LibreGeosocialhasidodesarrolladaporlaUniversidad ComplutensedeMadrid.Lainformaciónestáagrupadaencapasypuede serconsultadatantoen modalidadderealidad aumentadacomotambiénenun mapa.Estápreparadapara permitiralosusuariosconsultar informaciónasociadaapuntoscomoimágenes,texto,videosoincluso audio.Incorporaunaopciónparaqueelusuariopuedaañadirnuevos puntosporsimismo,losnuevoslugarespuedenagregarsetomandounpar deinstantáneasdellugarjuntoconlalocalizacióndellugar.Como herramientadeaprendizaje,lawebdelaaplicaciónincorporadiferentes videosparaexplicarcomoseutiliza.Incorporatambiénunsistemade localizaciónparaobtenerlainformaciónrelacionadaconlatemáticadela aplicación.Suampliorepertoriodeinformaciónamostrarpermitequeel usuariopuedaconsultartodalainformacióndisponibleenvadeo,además suinterfazgráficoesbastanteintuitivoyfácildeutilizar.[16] Figura8:LibreGeoSocial
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 11 3 Materialesymétodos Elsiguienteapartadorealizaunadescripcióngeneraldelosmaterialesy métodosutilizadosenelproyecto.Enestecapítulosetratarádeexplicarcomoseha realizadoelestudioparadeterminarquématerialesempleareneldesarrollo. Laseccióndematerialesymétodoscontempladosapartadosprincipales.El primerocontieneladescripcióndelaplataformaAndroidyelentornodedesarrollo elegidosparaelproyecto,AndroiddebidoalosrequisitosdeVadeo.Elsegundo contienelaeleccióndelFrameworkdedesarrollodeR.A.entrelasopciones disponibles.EntreellasseencuentraMixare,Layar,Wikitude,LookAR!y LibreGeoSocial,todasellasmuypróximasalosobjetivosnecesariosquedeben cumplirseenelproyecto. 3.1 Android:Plataformadedesarrollo Androidesun sistemaoperativomóvil basadoen Linux(libre,gratuitoy multiplataforma),diseñadoenunprincipioparadispositivosmóvilesperoenla actualidadesutilizadotambiénparatabletas,SmartTVcomoGoogleTV,relojesy otrosdispositivosquecontinuamenteaparecencomonovedades.Esdesarrolladopor laalianzadeempresasllamada OpenHandsetAlliance.Estaalianzaestácompuesta porochentaycuatroempresas,lideradasporGoogle,ycombinaoperadoras, empresasdesoftware,fabricantesycompañíasdecomercialización:ejemplosdeestas compañíassonVodafone,Telefónica,T‐Mobile,Google,Ebay,SkyPop,LG,HTCoIntel. Laeleccióndeestaplataformaparaeldesarrollodelaaplicaciónvienedefinida porelpropioproyectoHécate.EldesarrollodelaaplicaciónVadeo2.0deHécateha sidorealizadoparadispositivosAndroid,porlotantolaaplicacióndeR.A.debe desarrollarseparalamismaplataforma. LaplataformaAndroiddisponedediferentesversionesdelsistemaoperativo quepuedenelegirseparadesarrollaraplicaciones.Dependiendodelaversiónelegida laaplicaciónpuedellegaraunosterminalesuotros.Paraesteproyectolaversión elegidahasidolaAPI8,quesetratadelaversión2.2delS.O.AndroidllamadaFroyo,
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 12 abreviaturadeFrozenYogurt(yogurhelado).Enlaactualidadeslaversiónmínima recomendadparaalcanzarelmáximodedispositivosdelmercado,aunqueelprincipal motivodeestaelecciónvienedefinidoporelusodelalibreríaOpenGLensuversión 2.0paralareproduccióndegráficos.Lanuevaversiónhasidopreparadapara optimizarelrendimientoenlosdispositivosyporconsiguientelagranmayoríade herramientashansidodesarrolladasparatrabajarconestatecnología.Por consiguientelaversiónconlaquesetrabajaráserálaAPI8. Acontinuaciónsedetallanalgunosdelospuntosmásimportantesque caracterizanalsistemaoperativoAndroid. 3.1.1 Estructuraycaracterísticas LascaracterísticasdelossistemasoperativospublicadosporAndroidhanido mejorandodrásticamenteencadanuevaversión.Algunasdeestascaracterísticasson sudiseñoadaptableapantallasdemayorresoluciónosusbibliotecasdegráficos3D. TambiéncabedestacarlossistemasdeconexióndisponiblescomoGSM,CDMA,UMTS, Bluetooth,HSDPAoinclusoWiMAX.Elsoportemultimedia(MP4,AMR,PNG,JPG,etc.) ysoporteparaStreamingtambiénsoncaracterísticasimportantes.Porlogeneral incorporasoporteparalagranmayoríadeavancestecnológicosdelmercado:como porejemplomultitarea,multi‐táctil,videollamadaoTethering(usarelmóvilcomo puntodeconexiónparaotrosdispositivosporWifi). Lasiguienteimagenmuestraunavisióngeneraldelaarquitecturadelsistema operativo,dondesepuedeobservarqueestáformadaporcuatrocapas.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 13 Acontinuaciónsedescribenlasprincipalescaracterísticasdecadaunadelas capaspresentesenlaarquitectura.[17] 3.1.1.1 LinuxKernel ElnúcleodeAndroidestáformadoporelsistemaoperativoLinuxconalgunas modificacionesycaracterísticasqueseajustanalaslimitacionesdelosdispositivos. ActúacomounacapadeabstracciónentreelHardwaredeldispositivoyelrestodela piladesoftware,proporcionandointeracciónentreservicioscomoseguridad,manejo dememoria,multiproceso,piladeprotocolosysoportededriversparadispositivos entreotros. 3.1.1.2 AndroidRuntime ElRuntimedeAndroidesunaMáquinaVirtualllamadaDalvikVM.Esel componenteprincipaldelentornodeejecuciónyprecisadelusodelibreríasdel sistemaparasufuncionamiento.HasidodiseñadacomounavariacióndelaMVde Javapero,aunqueutilicesumismolenguajenosoncompatiblesdebidoasu compilaciónenunformatoespecífico(.dex). Figura9:AndroidCore
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 14 Sudiseñohasidooptimizadoalmáximoparareduciralmínimoelusode recursosysuejecuciónestábasaenregistrosdebidoaquelosteléfonosmóvilesestán optimizadosparaestamismaejecución.[18] 3.1.1.3 Libraries SonunconjuntodelibreríasescritasenC/C++ycompiladasparaelhardware deldispositivo.Lagranmayoríasondesarrolladasporlosfabricantesparafacilitar operacionesrepetitivasdecomunicaciónconeldispositivo.Suusolibraalos desarrolladoresdecodificarciertasoperacionesygarantizaqueéstasserealicen correctamente.[17][18] Laslibreríasmáscomunesenlosdispositivosson: AdministradordeInterfazGráfica:libreríaparalacomunicaciónconlos componentesrelacionadosconlainterfazgráficadelsistema. BasededatosSQLite:potenteyligeromotordebasesdedatos relacionalesdisponibleparatodaslasaplicaciones. APIdeprogramacióndegráficosparaOpenGLES2.03D:libreríaparael desarrollodegráficosen2Dy3D. MotorderenderizadoWebKit:libreríaquefuncionacomobaseparalos navegadores.SafarioChromesonalgunosnavegadoresquelautilizan. ProtocolosdecomunicaciónSSL:protocolodecomunicaciónque permitelaencriptacióndelascomunicaciones. 3.1.1.4 ApplicationsFramework ElFrameworksecomponedetodaslasclasesyserviciosquedisponiblespara quelasaplicacionespuedanrealizarsusfunciones.Lagranmayoríadeestaslibrerías estánpreparadasparacomunicarseconlacapaLibrariespormediodeDalvik.Suuso
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 15 seextiendetambiénalosdesarrolladoresquedisponendeaccesoaellaspararealizar lasmismasoperaciones,realizándoseunareutilizacióndeestecódigo.[19] 3.1.1.5 Applicactions Laúltimacapaincluyetodaslasaplicacionesinstaladaseneldispositivo.Entre ellasseencuentranlaspreinstaladasporlosdistribuidores(gMail,Cámara,etc.),las nativasyaquellasinstaladasporelusuario. 3.1.2 Hardware EnlaactualidadlaplataformaAndroidestádisponiblenosoloparamóvilessino tambiénparaTablets,dispositivosparaverlatelevisión(GoogleTV)oinclusoPCsy portátiles.Sumercadoalcanzatodotipodedispositivosycadadíaaparecennuevos dispositivosqueincluyennuevasfuncionalidades.Ejemplosdeestosdispositivosson: GooglepublicóelanunciódesusgafasqueutilizanlatecnologíadeRealidad AumentadabasadasenAndroid. ApareceelMini‐PCMk802killer:miniprocesadordoblenúcleoARMCortex‐A9 a1.6GHz,gráficosMalí400,1GBdeRAMy4GBdealmacenamientointerno. Figura10:GafasR.A. Figura11:Mini‐PC
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 16 SamsungGalaxyNote10.1:procesadorcuatronúcleosa1.4GHzcon2GBde RAM,memoriainternadehasta64GB,WIFI,HSDPA,GPS,doscámarasdehasta 5GB. GoogleNexusD:unQuadCorea1.8GHzcon1.5GHzdeRAM,memoriainterna dehasta64GB,conectividadNFC,pantallaflexible… Figura12:SamsungGalaxyNote Fi g ura13:Dis p ositivomóvilúltima g enración
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 23 Disponibilidaddelcódigofuentepararealizarmejoras. UtilizacióndeformatoJSONparacomunicaciónconelservidor. Herramientasdeaccesibilidadoensuausenciaposibilidaddeincorporarlas. UtilizacióndelpatróndediseñodeR.A.oensuausencialaposibilidadde crearlo.Elpatróndediseñoquesiguenporreglagenerallasaplicacionesde R.A.esunestándardefacto.Lagranmayoríadelasaplicacionesrepartenel contenidosituandounradarenlasesquinassuperiores,lospuntosde informaciónenelcentroylasdescripcionesenlaparteinferior. Lainformaciónmostradasobreunpunto,puedaincluircomentarios,fotos, títulos,descripciones,iconosdeaccesibilidadycoordenadas. Licenciasquepermitanlalibreexplotacióndelaaplicación. Espreferiblequenoseutilicencapasparaaccederalainformación. 3.2.1 Mixare MixareesunalibreríadeR.A.quecuentaconelrespaldodeunacomunidadde desarrolloabierta.Sucódigofuenteestádisponibleparaserdescargadoyeditadobajo licenciaGPLv3,conlocual,permiterealizarlosajustesnecesariossegúnnecesidades delproyectoperoobligaalapublicacióndelcódigofuente. Lacomunicaciónconelservidorserealizademaneradirectasinusode intermediarios.EnunprincipioexisteunaestructuradedatosdefinidaqueutilizaJSON comolenguajedecomunicación,peropuedeserajustadaparatransferiraquelloque seanecesario(imágenes,comentarios,etc.).Ladocumentacióndisponibleexplica pasoapasocomoconfigurarelservidorconcódigofuenteyejemplosenPHP. Elusodelaaplicaciónenmodoofflinetambiénestáincluidoutilizandouna basededatos,estacaracterísticanotienetantarelevanciayaquelaaplicaciónprecisa
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 24 deinformaciónquepuedeactualizarsediariamente,enconsecuenciaesrecomendable quedispongadeconexióndedatos. Lalibreríahasidodesarrolladaytesteadaparagarantizarquefuncionacon versionessuperioresalaelegidaparaelproyecto.Estogarantizaquetantodispositivos conlaversióndelproyectocomoconversionessuperioresvanapoderutilizarla aplicaciónyaquenoutilizarecursosquesehayandescartadoenversionessuperiores. Enladocumentacióndisponiblenodeterminasiutilizaherramientaspara mejorarlaaccesibilidad.Detodosmodos,comoocurreconlosotrospuntos,al disponerdelcódigofuentepermitequepuedaserañadidoaposteriori. Laimplementaciónactualutilizaunnavegadorlanzadocomounaaplicación. Estáenfocadaaenlazarlospuntosconpáginaswebs.Estopuedeserutilizadoparaque lasconsultasdelospuntosnorecaigansobrelaaplicación,todolocontrarioalobjetivo dequetodoaparezcadentrodeella. 3.2.2 Layar Layaresunnavegadordesarrolladoparamostrarinformaciónsegmentadaen capas.Cadaunadelascapasalmacenalainformacióncorrespondienteauntema publicadoporundesarrollador.Suutilizaciónimplicaríalacreacióndeunacapaque contendríatodalainformaciónrelacionadaaHécate.Deunmodomástécnicouna capaalmacenalainformacióndeconexiónconelservidorquecontienelospuntosde información. Enlaactualidad,elFrameworkLayarnohadesarrolladoaunningúnkitde desarrolloSDKparausuariosAndroid,porlotantolaúnicaopciónvigenteparautilizar estaherramientasecentraenlautilizacióndelascapasparasegmentarla información.[23] ElusodelalibreríadeLayarobligaríaadirigirtodaslascomunicacioneshacia unservidorintermediooProxyencargadoderedirigirlaspeticioneshaciaelservidor dedatos(Hécate)yluegodevalidarlainformacióndevuelta.Estavalidaciónsirvepara asegurarquelainformacióndevueltacontieneinformacióncorrectaquepuedaser
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 25 representadaenelnavegador.LascomunicacionesserealizanutilizandoJSONy disponedeunadocumentacióndetalladapararealizarelmontajedelservidorweby todoelesquemadebasesdedatos,documentaciónquefacilitaelensamblajeconla informacióndefinidaenelservidordedatosdelproyecto. Lanoposibilidaddedescargarelcódigofuenteesunaspectonegativoque contemplar.Lospuntosqueaparecenenlapantallasolomuestrantextoeimágenes, sindisponerdelaposibilidaddeenlazarcomentarios.ElmodelodedatosdeHécate incluyeelusodecomentariossobrelospuntosydebidoaqueelcódigofuentenoestá disponibleseimposibilitaagregarloscomentariosuotrainformaciónextra. Porúltimo,laaplicaciónesgratuitasiemprequenosesupereunnúmero máximodepeticiones.Esotrodelosaspectosnegativosencasodealcanzarun volumenconsiderabledeusuarios. 3.2.3 Wikitude Wikitudeesunaherramientaqueofrecelaposibilidaddeincorporarelservicio deR.A.dentrodelasaplicaciones.IncluyeunkitdeherramientasdedesarrolloSDK paralaintegracióndeunnavegadorencargadodemostrarlainformación.Suuso puedeserlimitadodadoqueutilizaunalicenciaprivadaynoofrecelaposibilidadde accederalcódigofuentepararealizarajustesenelcontenido. ElSDKdedesarrolloestábasadoenestándaresdelatecnologíacomoHTML, Javascripty/oCSSquefavorecenlafácilintegracióndelastecnologías.Ademásde tenerunaampliadocumentaciónyunportalconampliacobertura,forosotambién entornodedesarrollo,elFrameworkconsumeelmínimoespacioposiblegarantizando quelaaplicaciónnoexcedaentamaño. Respectoalaslimitaciones,cabedestacarelhechodequelacomunicacióncon leservidorserealizapormediodeunProxyperosinutilizarJSONparala comunicación,ensulugarseutilizaunformatopropiollamadoARML(XML personalizado).
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 26 ElusodeWikitudeesgratuitoenelcasodequelaaplicaciónnoestédestinada aproyectoscomerciales,delocontrariodebepagarseunalicenciaporsuuso, mantenimientoynúmerodeinstalacionesqueserealicendelproducto.Suinstalación requieredispositivosconAPI8osuperior. Lawebdelaaplicacióndisponedeunapartadoparalosdesarrolladores,enél sepuedenpublicartodaslasdudasoconsultartutoriales. 3.2.4 LookAR! LookAResunFrameworkdeR.A.preparadoparatrabajarenlocalizaciones internasdeedificiosutilizandodispositivosWIFIynavegacióninercial.Sucódigo fuenteestádisponibleparaserdescargadoyeditadosegúnnecesidades,entreellas hayquedestacarquepuedeajustarseparautilizarcoordenadasGPSparala localización.TambiéncontieneaplicacionesquehanutilizadoesteFrameworkpara descargaryconsultarsucódigofuente. ElFrameworknodisponenideSDKnideningúninterfazimplementadopara mostrarinformaciónacercadepuntososudescripción.Porelcontrario,ofrece métodosparafacilitarlaimplementacióndeldiseñodesdecero,dadoquedelo contrariohabríaqueinteractuarconlalibreríaOpenGLencargadaderealizarestas operacioneseincrementaríalacomplejidaddeldesarrollo. Lacomunicaciónconelservidordebeserconfiguradaporeldesarrollador,esta flexibilidadesidóneaparapoderenviarlainformaciónajustándolaalascaracterísticas uobjetivosarepresentar(imágenes,comentarios,etc.) Elsoportetécnicodisponibleesbastantebásico.Elequipodedesarrollo resuelvelasdudasqueselesenvíanconciertotiempodemargen,estoesdebidoa queelproyectofueterminadohacetiempoynohatenidomáscontinuidad.Eneste casoesinteresantequeelproyectohayaterminadoyaquetodaslasmejorasse realizansegúnnecesidadessintenerencuentafuturasversionesquepuedansobre escribirloscambiosrealizados.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 27 Porúltimo,hasidodesarrolladaparalaAPI10perosufuncionamientoestá garantizadoparalaAPI8ylalicenciautilizadahasidoGPLv3. 3.2.5 LibreGeoSocial LibreGeoSocialhasidodesarrolladacomounaaplicacióndestinadaamostrar informaciónagrupadaencapas.EnningúncasohasidodesarrolladacomoFramework olibreríaperosucódigofuentedisponiblepermiteextraertodalalógicapara incorporarlaacualquierproyecto.Suinterfazgráficanoincorporaaspectosde accesibilidad,peroaldisponerdelcódigofuentepuedenserañadidos. Lainformaciónserepresentaencapasqueapuntanalosrespectivosservidores dondeestánalmacenadas,peroescompletamenteconfigurableparapodereliminar lascapasyquedirectamentemuestrelainformacióncorrespondientealproyecto. ElproyectodeLibreGeoSocialfuefinalizadoynoestápreparadoparaquese realicenmodificaciones,estogarantizaqueloscambiosqueserealicennosufrirán conflictosconpublicacionesdefuturasversiones,ypermitecrearunalíneade desarrollopropiaparaajustarelcódigoalasnecesidadesderepresentaciónquese necesiten.Nodisponedeunacomunidaddedesarrolloperosisuficiente documentaciónparautilizarloyademáslosdesarrolladoressonparticipesderesolver dudassinningúninconveniente. EldiseñoyestructuradeLibreGeoSocialpuedeseraprovechableyaquecumple conelpatróndediseñodeR.A.aunquealgunosaspectosgráficosdebenser mejorados. Porúltimo,lalicenciadepublicaciónfueCreativeCommonseliminando restriccionesqueobliguenapublicarlaaplicaciónyrestrinjanunafuturaexplotación delamisma,unodelosobjetivosmarcados.Además,nocontemplaelpagode ningunatarifa.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 28 3.2.6 Resumen Lasiguientetabla,Tabla1:Comparativadecaracterísticasparaeldesarrollo, realizaunacomparacióndelospuntosmásimportantesdecadaunodelosapartados anteriores. Layar Wikitude Mixare LookARLibreGeoSocial Documentaciónysoporte Licenciasinrestricciones depublicaciónoventa SinTarifasporuso Códigofuentedisponible Noutilizanavegador Propio Servidorycomunicaciones configurables Accesibilidadconfigurable Informaciónmostradapor puntosajustable Tabla1:Comparativadecaracterísticasparaeldesarrollo EnlaTabla1:Comparativadecaracterísticasparaeldesarrolloseobservaque sololaaplicacióndeLibreGeoSocialcumplecontodoslosobjetivosmarcados. Aspectoscomoelcódigofuentedisponibleinfluyenenlaposibilidaddepoderajustar completamentelaaplicación.Ladisponibilidaddelcódigofuenteparateneraccesoa
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 29 todoelcontenidoesunodelosaspectosquemássehatenidomuyencuenta. HerramientascomoLayaroWikitude,ambaspunterasenelámbitodelaR.A.hansido descartadas,pordichalimitaciónyporelusodetarifas,alincumplirconlosobjetivos marcadosenelproyecto.Otrosaspectoscomolalicenciadeterminanlaexplotación quepuedarealizarsetrassupublicaciónunavezterminada.Taleslarepercusión derivadaporelusodelicenciaGPLv3quetantoMixarecomoLookARsondescartadas porserpublicadasbajodichalicencia,hechoqueobligaríaapublicarelcódigofuente delaaplicacióndeR.A.UtilizarLibreGeoSocialpermitedecidirlibrementelaliberación delcódigoono. Quelainformaciónmostradadecadapuntoseajustealasnecesidades heredadasdeHécatetambiénesunaspectomuyimportanteatenerencuenta.Solo aquellasaplicacionesconelcódigodisponiblegarantizanqueestepuntopueda cumplirsealcienporcien. Parafinalizar,eldiseñodelainterfazgráficavaarepercutirenmayormedida conlaaceptacióndelaaplicación.FrameworkscomoLibreGeoSocialoMixarehansido desarrolladossiguiéndolo,todolocontrarioqueLookAR.AunqueLookARofrezca herramientasparasucreaciónyelaboración,larealizacióndelainterfazgráficapuede sermuycostosatantoenpreparacióncomoentiempodedesarrollo.Ladisponibilidad delcódigofuentepermitequeconlaherramientaLibreGeoSocialpuedan, perfectamente,adaptarsetodaslasnecesidadesquesurjanenVadeo.Dehecho,gran partedeldiseñopuedeserreaprovechadoeinclusomejoradoentodosycadaunode susaspectos. Portodoesto,elFrameworkelegidopararealizareldesarrollodelprocesode R.A.enlaaplicaciónVadeo2.0esLibreGeoSocial.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 30 4 Hécate:AplicacióndeRealidadAumentada Enestecapítuloseintroducenlasprincipalescaracterísticasdelproyecto Hécateenelqueseenmarcaelpresentetrabajo,paraacontinuaciónpasaradescribir losrequisitosylafuncionalidaddelaaplicacióndeRealidadAumentadadesarrolladay suaportaciónalproyecto. ComosehacomentadoelproyectoHécateestáformadopordosherramientas oaplicacionesindependientesretroalimentadasentresí,laHerramientadeGestión integraldeAccesibilidad(GIA)ylaaplicacióndeConsulta,InformaciónyRutas(Vadeo 2.0),todasellasinteractuandoconelservidordeHécate.Enlasiguientefigura,Figura 15:ArquitecturaHécate,sepuedenvertodosestoselementosylaformaenque interactúanentresí.Elprimerpuntodeconexiónconelsistemaestárepresentadopor elpersonaldelayuntamientoylostécnicosdeaccesibilidadatravésdelaherramienta GIAenversiónweb,quesetratadeunaaplicaciónweb.Porsuparte,losciudadanos puedenaccederalsistemaatravésdelaaplicaciónVadeo2.0ensuversiónweby móvil.Porúltimoeladministradordelsistemaaccedevíawebatravésdelaaplicación webdeVadeo.Enlasiguientefigurasepuedenvertodoslosactoresinvolucradosylas diferentesmodalidadesdeconexiónconelsistema,enesteapartadosedescribeen detallelaaplicaciónmóvilparaAndroid,yaqueeselmediodeaccesohaciala aplicacióndeR.A.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 31 4.1 Introducciónalafuncionalidad Antesdecomenzarconladescripcióndelaaplicación,esimportantedetallarla informaciónsobreelniveldeaccesibilidaddelentornoquevaasermostradaatravés delaaplicacióndeR.A. Lainformaciónamostrarpuedeserseparadaendosgrupos,enelprimero entraríanlosobjetosquerepresentanunabarreradesdeelpuntodevistadela accesibilidad,llamadosobstáculosoPuntosdelMapa,yenelsegundogrupose incluyenlosPuntosdeInterésoPDIqueincluyeninformaciónrelacionadaconelocioo servicios.Acontinuaciónsedescribenestosconceptosendetalle. ObstáculooPuntodelMapa:objetoqueresideenlacalleoporuna zonadeviandantesyquesuponeunabarreraparaprogresarenel caminooparaaccederaunlugardeterminadodesdeelpuntodevista Figura15:ArquitecturaHécate
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 32 delaaccesibilidadalmediofísico.Ejemplo:escaleras,acerascon bordillos,obrasenlasaceras,etc.Lainformaciónqueelusuariopodrá consultareslasiguiente: o Nombreotítulodelobstáculo. o Descripcióndelobstáculo:brevedescripciónsobreelobstáculo. o TipodePunto:ofreceráinformacióngráficaqueindiqueeltipo deobstáculo,diferenciandoentresiesunitinerario,vado, escalera,rampa,calleconpendiente,obstáculovario,obras, banco,buzón,cabina,contenedor,fuenteuotrotipodistinto. o Ubicación:geo‐localizacióndelobstáculo. o Atributosdeaccesibilidaddeunpuntodelmapa:información gráficacertificadaquerepresentalosatributosdeaccesibilidad presentesosuausenciaenunpuntodelmapa:escalera, accesos,itinerariosanteriores,rampasyubicación. o Comentariosdeotrosusuarios. o Imágenesdelobstáculo. PuntodeInterésoPDI:edificio,lugarozonaqueofrecealgunautilidad frecuentementerelacionadaconelociooservicios.Ejemplo: restaurantes,oficinasdeinformación,aparcamientos,paradasdemetro obus,etc.Lainformaciónqueelusuariopodráconsultareslasiguiente: o NombreotítulodelPDI. o DescripcióndelPDI:brevedescripciónsobreelpuntodeinterés. o TipodePDI:ofreceráinformacióngráficaqueindiqueeltipode PDIdeentrelossiguientes:aparcamiento,aparcamiento reservado,bar/restaurante,comercio,turismo,ocionocturno, ocioinfantil,deportes,educación,taxi,tranvía,tren,autobús, metroyotros.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 39 debenteneruntamañoconsiderableparaquelainteracciónsea lomássimpleposible. o Interfazlimpiaysencilla:seránecesarioparaquelainformación puedaleerselomásrápidamenteposible.Lasencillezdebeser lomásimportanteparafacilitarlausabilidad. o Elusuarionohadeintroducirnadadetextosolodebeutilizarun dedoparatocarlosiconos. Destacarlausabilidaddelaaplicaciónyoptimizaciónalmáximodelos recursoshardwareysoftwaredisponibles. Pantallaapaisadaparamostrartodalainformación:laaplicacióndeR.A. podrámostrasesoloapaisadapararepresentarconmáximodetalle todalainformación.ElFrameworkpordefectotrabajaconlaimagen apaisadayporlotantoeldesarrolloserealizarásiguiendoesafilosofía. Ademásdelosrequisitosanteriores,enelmomentoqueaparezcaeldetallede unpuntoenlapantalla,tambiéndebenconsiderarselossiguientesrequerimientos: 1. Text‐to‐Speech:seráunbotónparareproducireltextoqueaparezcapor pantalla.Facilitarálalecturadelainformacióntantotítulo,descripciones, distancia,… 2. Mostrarimágenesextra:lospuntospodrántenerimágenesrelacionadas,por elloaparecerálaopcióndemostrarlastodasporpantalla. 3. Mostrarcomentarios:ocurrelomismoqueconlasimágenes. 4. Losiconosmásgrandes:almostrarlosdetalleslosiconosdebensermás grandes. 5. Distanciamáxima2km:ladistanciamáximadebeser2kmparanosobrecargar lainformaciónenlapantalla.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 40 6. Títuloydescripción:comodetallesprincipalesdecadapuntodeberánaparecer porpantallaeltítuloyladescripción,ademásdeiconosdeaccesibilidadque describangráficamentelosaccesosquepuedatener. Lasiguientefigura,Figura23:Mockupconlosdetallesinformativosdestacandolos puntosquedebencumplirse,representaladistribuciónyeldiseñorealizadopara quelaaplicacióndeR.A.cumplaconloselementosanteriores. 4.4 Especificaciónderequisitos(Casosdeuso) Eldiagramadecasosdeusorepresentalasecuenciadeinteraccionesquese desarrollaránentreunsistemadedesarrolloylosactores(clientes)enrespuestade eventoslanzadosporelactorsobreelpropiosistema.Estetipodediagramasdecasos deusopermitendescribirelfuncionamientoqueelsistemarealizaráencadaevento querecibayaseadelosactoresodelpropiosistemacomorespuestadeoperaciones previas. Loselementosqueformaneldiagramasonlossiguientes: ActoroActores: Figura23:Mockupconlosdetallesinformativosdestacandolospuntosquedeben cumplirse
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 41 o Unactoresunrolqueunusuariodesempeñaconrespectoal sistema.Elusoderolenladefinicióndetermina queunactornodeberepresentarauna personaoentefísicoenparticular,sino quesimulalalaborqueserealizaconel sistema. Casodeuso: o Representaunaoperaciónqueeslanzadaorealizadatrasrecibir unaordendealgúnagenteexterno.Laspeticionespueden recibirsedeunActorodesdeotrocasodeusoquehaterminado derealizarsulabor. Relaciones: o Existentresdiferentesrelacionesparasegúnquéoperaciónse realiceenelcasodeusooquefuncionalidadselequieradar.La Asociaciónindicalainvocacióndelcasodeuso,puedevenirde unactorodeuncasodeuso.LaDependenciaoInstanciación denotaunarelaciónentreclases,unaclaseseinstanciadeotra. PorúltimolaGeneralizacióntienedoblesignificado,tantoUso comoHerencia. Elusodeestatécnicaderepresentaciónesmuyutilizadoensistemas interactivos,comopuedeserlaaplicacióndeR.A.,yaqueexpresalaintenciónque tieneelActorallanzareventoscontraelsistema.Ademáspermitealanalista representarlasnecesidadesquepuedetenerelclienteofreciendounaimagendel sistemasintenerquemostrarningúntecnicismoquepuedanosercomprendido.En definitiva,elanalistapuedecentrarseenlastareasquerealizaráelcliente, describiendoloscasosdeusoprincipalesdelsistema. Figura24:Actorcasodeuso Figura25:Casodeuso
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 42 Acontinuaciónsehandetalladodosmodosderepresentaciónparauncasode uso,elrestodecasosdeusoestándescritosenelapéndiceA:Especificaciónde Requisitos.Elprimermodoutilizalaiconografíaparadetallarlasoperacionesqueel sistemapuederealizaralrecibirmensajes,eventosointeraccionestantodeactores comodeotroscasosdeuso(modográfico).Elsegundomododescribelasdiferentes interaccionesdeunmodomásdetallado,definiendolosflujosdeentradaysalida entreotrosdetalles(modotexto). 4.4.1 Modográfico Lassiguientesfiguras,Figura26:CasosdeusolanzarR.A.yFigura27:Casosdeuso informaciónpunto,utilizanlarepresentacióngráficaparadescribirlospasosquese realizanpararealizarlosprocesosdelsistema.Laprimerafigurarepresentaelproceso realizadoporelusuarioparautilizarlaR.A.,desdequelaactivahastaqueobtienela informaciónenlapantalla.Lasegundafigurarepresentalospasosqueserealizanpara consultarlainformacióndeunpuntoseleccionadoenlapantalla.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 43 MostrarvistaR.A.:elprimerbloque(nodos1,2,3y4)describeelprocesoque serealizaráparamostrarelcontenidodeR.A.Allanzarseactivaráunaseriede pasosconsecutivos,elprimerpasointentalalocalizacióndelusuario(2), comprobandosiesválida(3),yencasodeserlodescargarparapintardenuevo porpantalla(4). Figura26:CasosdeusolanzarR.A.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 44 CambiarconfiguraciónR.A.:elrestodenodosdefinenlasiguienteposibilidad delusuarioparainteractuarconlaR.A.Enestecasopermitirácambiar parámetrosdelaconfiguraciónyfiltradodepuntos. LaFigura27:Casosdeusodefinelasdiferentesopcionesdeinteracciónentre usuarioymáquinaparaqueaparezcanlasdescripcionesdelospuntos. VisualizardetallesdeelementoenR.A.:elnodo8realizaráelprocesode mostrarlainformacióndeunpuntoalserllamadoporelusuario. Text‐to‐SpeechdelainformacióndeunelementoenR.A.:eldetalleenpantalla permitiráalusuarioactivarlareproduccióndetexto. Figura27:Casosdeusoinformaciónpunto
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 45 Consultarimágenesasociadasalelemento:otrasdelasaccionesqueestarán disponiblesserámostrarlagaleríaconimágenesrelacionadasalpunto. Consultarcomentariosasociadosalelemento:ocurrelomismoqueconlas imágenesperoparaloscomentarios,conlaopcióndepoderreproducirlos. Text‐to‐Speechdeloscomentarios:podránleerseloscomentarios.Parallegara estepuntoprimerodeberáncargarselosdetalles,luegoloscomentariosycomo últimopasoelusuariopodráreproducirlos. 4.4.2 Modotexto Elcasodeusoenmodotextoposibilitaunadefinicióndetalladecadaunade lasoperacionesrealizadasporelsistemadeR.A.Enesteapartadosolohansido expuestosunosejemplosparamostrarsucontenido,elcontenidocompletose encuentraenelApéndiceA:Especificaciónderequisitos:Casosdeuso,dondese puedenseguirunoporunotodoslospasosrealizadosparaqueelusuariopueda obtenerlainformación. MóduloRealidadAumentada Componente Personalización ID1NombreLanzarVistaR.A. DescripciónElusuarioseleccionalavistadeR.A.delmenúprincipaldela aplicación. ActoresUsuarioanónimo,usuarioregistrado Incluye‐ Nivelde prioridad Secundario Datosde entrada Ninguno PrecondicionesElusuariosolicitacambiarlavistaaR.A.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 46 FlujoNormal 1. Elusuarioseencuentraenelmenúprincipaldelaaplicación 2. ElusuarioseleccionaR.A. 3. LaaplicacióncambialavistaaR.A. Flujo Alternativo Nohay Post‐ condiciones SemuestralavistadeR.A.conlasopciones(elementos)por defecto. ExcepcionesNo Módulo Realidad AumentadaComponente Personalización ID5NombreCambiaropcionesR.A. Descripción Elusuarioquieremodificarlasopcionesdefiltradodeelementosa mostrarenlavistadeR.A.,pordefectolaaplicaciónmuestralos elementosenunradiode2kmalrededordelconestaopciónse puedemodificarestefiltrado. ActoresUsuarioanónimo,usuarioregistrado Incluye‐ Nivelde prioridad Secundario Datosde entrada Ninguno Precondiciones Elusuariosolicitacambiarlasopcionesdefiltradodelavistade R.A. FlujoNormal 1. ElusuarioseencuentraenlavistadeR.A. 2. Elusuarioseleccionalaopción“Configuración” 3. Seleccionalaopcióndedefinirperímetro. 4. Elusuarioseleccionaelradioenelquedeseavisualizarlos elementos 5. Laaplicaciónmuestraloselementosseleccionadosenla vistadeR.A.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 47 Flujo Alternativo Silosdatosrecibidosestáncorruptosonosereciben,mostrar mensajealusuarioynoaplicarcambiosalmapa. Post‐ condiciones LavistadeR.A.muestralosiconosdelosrespectivoselementos paraelnuevomargendefiltrado. ExcepcionesNo
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 48 5 Arquitecturadelaaplicación LaaplicaciónmóvilVadeoesunapartedelaarquitecturadelsistemaHécate. Estesistemaestácompuesto,comoseapreciaenlaFigura28:ArquitecturaHécate, porunconjuntodesubsistemasqueseencargandedividirlasfuncionalidadesdel sistemacompleto.Esimportanteantesdeempezaradesglosartodolorelacionado conlaR.A.hacerunamencióndeestossubsistemasimplicados: Figura28:ArquitecturaHécate
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 55 Enlamayoríadeaplicacionesnoesnecesariocontrolarenexcesolagestiónde memoria,siendoelGCelencargadoenlugardeldesarrollador.ElmódulodeR.A.ha sidodesarrolladollevandoacabouncontroldelsistemaparaimpedirelusode recursosquetambiénafectaenelconsumodelabatería,elementoquelimitalavida delterminal. Estametodologíadetrabajoincorporapartesbuenasymalas,yaquela automatizaciónpuedellevaradesbordamientosdememoria.EnelcasodelaR.A.yel correspondienteusodeimágenes,implicaquepuedellegaratenerunelevado consumodependiendodeladensidaddepuntosencontradosdentrodelperímetro. Paraimpedirsobrecargassehalimitadoelperímetroanomásdedoskmyun límitedecincuentaparalosnodosrepresentadosporpantalla. if (res_list.size() > 50) Encadaunadelaspeticionesrecibidasdelservidorserealizaunprocesode Mappingtransformandotodalainformacióndescargadaenlistasdenodos,objetos concoordenadasarepresentar,etc.Entreeseprocesoseencuentralacreaciónde listasordenadassegúnlaproximidaddelascoordenadasconrespectodelusuario. Estaslistasseránutilizadasentodomomentoparamostrarlosnodos,sonconsultadas continuamenteparadeterminarquéposicióndebeocuparcadapuntoenlapantallay lomásimportantedeterminarsiapareceenelrangodevisión. try{ refreshed=false; ARGeoNode.clearClicked(getResourcesList()); getLayers().cleanResouceLayer(); setResourcesList(null); ArrayList<ARGeoNode>res_list=ARUtils.cleanNoLocation(this,getLayers(), getManagerHecateGeoSocial().getNodes()); if(res_list==null||res_list.size()==0){ Toast.makeText(getBaseContext(),getString(R.string.error_no_avaliables), Toast.LENGTH_LONG).show();
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 56 Log.e("ARView",getString(R.string.error_no_resources_avaliables)); return; } if(res_list.size()>50){ ArrayList<ARGeoNode>list=(ArrayList<ARGeoNode>)res_list.clone(); res_list.clear(); for(inti=0;i<50;i++) res_list.add(list.get(i)); Toast.makeText(getBaseContext(),getString(R.string.error_too_much_obj), Toast.LENGTH_LONG).show(); Log.e(ARView.class.getName(),getString(R.string.error_too_much_objects)); } ARGeoNodeAzimuthComparatorcomparator=new ARGeoNodeAzimuthComparator(); Collections.sort(res_list,comparator); setResourcesList(res_list); mRadar.setResourcesList(res_list); ARGeoNode.setResourcesList(res_list); refreshed=true; if(altitude_status.equals(AltitudeManager.ALL_HEIGHTS)) actionRequestHeight(); }catch(Exceptione){ Toast.makeText(getBaseContext(),getString(R.string.error_loading) +e.getMessage(),Toast.LENGTH_LONG).show(); Log.e("ARView","",e); } Además,lacargadeimágenesserealizademaneraperezosa,solosoncargados losiconosdelospuntostantoparasermostradosporpantallacomoparalamuestra delainformacióndetallada.Elrestodeimágenesquepuedanmostrarseenunagalería únicadeunpunto,soncargadasenelmomento. privateImageLoaderimgLoader; publicARStaticSummaryPicturesBox(ActivitymActivity,RelativeLayoutcontainer){
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 57 super(container); this.mActivity=mActivity; imgLoader=es.tsb.hecate.lazylist.LazyLoader.getImageLoader(this.mActivity); } … ImageViewimg=(ImageView)view.findViewById(R.id.ar_image_node); imgLoader.DisplayImage(ServiceInterface.PDIPhotos+listUrls.get(position)[1], mActivity,img); intauxHg=img.getHeight(); intauxWg=img.getWidth(); img.setPadding(auxWg*2/4,auxHg*2/4,auxWg*2/4,auxHg*2/4); … Comoseapreciaenelcódigo,elimgLoadereselencargadoderealizarlacarga perezosautilizandolalibreríaLazyLoaderdetalladaenelpuntoTarjetadememoriay LazyLoader. 5.1.3 GPSyLocalización ÉsteesunodelospuntosmásimportantesenelprocesodeR.A.Lalocalización vaapermitiralusuariopoderconsultarlainformaciónquetieneasualrededor, cuantomásexactasealacoordenadamejorvaaserlainformaciónobtenida. Enlaactualidadycomosedetallóenelpunto2.2,losterminalesincorporanel componenteGPSpordefectoyesmás,tambiénutilizanlainformacióndelaseñalde comunicaciónparatriangularunaposiciónrelativaquesirvedeorientaciónenlos procesosdelocalización.EstaseñalescaptadadelastorresopuntosWifidondese conectaeldispositivo.Paraellodebenteneragregadalainformacióndesulocalización ocoordenadas.Estalocalizaciónpermitehacerunaestimaciónaproximadapara determinarlaubicacióndondepuedeencontrarseelterminal.Elprocesoaconsejado esrealizarunaprimerayrápidaestimaciónutilizandolaredmientraselGPSseactiva, yaquepuedetardaruntiempoenrealizarlaprimeralocalización. Contodaestainformacióndisponible,lalocalizacióndelusuarionodebe albergarmuchosproblemas,salvoqueporsulocalizaciónseadifícillatriangulación
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 58 conlasseñalesdelossatélitesparadeterminarlaubicación.Enesecasoelusodelos sistemasauxiliarespuedeserdegranayuda. Elprocesodeobtencióndelascoordenadashasidodeclaradocomounservicio queestarádisponibleduranteeltiempoqueestéactivalaR.A.Comorequisitoprevio paraaccederalaR.A.seconsultarásielGPSestáactivo,encasocontrariounaviso serálanzado,eselúnicorequisitoestablecido.Losserviciostienenunasemejanzaalos ActivityyaqueutilizanmétodoscomoonCreateuonDestroyaunqueseejecutan siempreenmodobackground.Continuandoconelserviciocreado,ésteseubicaenla claseLocationService.classqueheredadelaclaseServices. publicclassLocationServiceextendsService …. @OverridepublicvoidonCreate(){ startService(); Toast.makeText(this,R.string.id_locations_service+"hasbeenCreated", Toast.LENGTH_SHORT).show(); } @OverridepublicvoidonDestroy(){ hecateLocationContinued.destroyListeners(); //Telltheuserwestopped. Toast.makeText(this,R.string.id_locations_service+"hasbeendestroyed", Toast.LENGTH_SHORT).show(); } privatevoidstartService(){ loadConfig(); myLibreGeoLocationResult=newLibreGeoLocationResult(); hecateLocationContinued=newMyLocation(0,0,MyLocation.CONTINUED); hecateLocationContinued.getLocation(this,myLibreGeoLocationResult); if(auxILocationServiceListener!=null) myLibreGeoLocationResult.registerLocationListener(auxILocationService Listener); auxILocationServiceListener=null; Log.e("LGS‐Service:","ServicewithMyLocationisenabled");
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 59 } AlarrancarelservicioselanzaelmétodostartServicequeeselencargadode cargarlaconfiguracióndelGPS.Enellasedetallanparámetroscomoladistancia mínimaentrecadaconsulta,laperiodicidad,lasunidadesdemedida,etc.Lo importantevieneenelsiguientepaso.LaclaseLibreGeoLocationResulteslaque recibirálascoordenadasderespuestayMyLocationeslaclaseencargadadelanzarel procesodeobtención.Elfuncionamientoseresumeendospasossimples,comprueba sielGPSestáactivo,compruebasilaobtenciónporlaredtelefónicaestáactivaylanza unTimerTask(procesoparecidoaunhiloqueseejecutaduranteundeterminado tiempo)conunretrasode20segundos,tiempomásquesuficienteparaqueelGPS obtengaunabuenaposición.PasadoeltiemposeleenlosdatosdelGPSydelared,se comparanparadeterminarcuálesmásdeterminanteyseenvíanalainstanciadeclase LibreGeoLocationResultantescreada. publicclassMyLocation{ Timertimer1; LocationManagerlm; LocationResultlocationResult; ... publicMyLocation(inttime,intdistance,booleancontinued){ this.minTime=time; this.distance=distance; this.continued=continued; } publicbooleangetLocation(Contextcontext,LocationResultresult){ //IuseLocationResultcallbackclasstopasslocationvaluefromMyLocationtouser code. locationResult=result; if(lm==null) lm=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE); //exceptionswillbethrownifproviderisnotpermitted. try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);} catch(Exceptionex){}
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 60 try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);} catch(Exceptionex){} //don'tstartlistenersifnoproviderisenable if(!gps_enabled&&!network_enabled)returnfalse; if(gps_enabled) lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,this.minTime, this.distance,locationListenerGps); if(network_enabled) lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, this.minTime,this.distance,locationListenerNetwork); timer1=newTimer(); timer1.schedule(newGetLastLocation(),20000); returntrue;} classGetLastLocationextendsTimerTask{ @Override publicvoidrun(){ Locationnet_loc=null,gps_loc=null; if(gps_enabled) gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); if(network_enabled) net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); //iftherearebothvaluesusethebestone if(gps_loc!=null&&net_loc!=null){ locationResult.gotLocation(UtilGPS.isBetterLocation(gps_loc,net_loc)? net_loc:gps_loc); return; } if(gps_loc!=null){locationResult.gotLocation(gps_loc); return; } if(net_loc!=null){locationResult.gotLocation(net_loc); return; } locationResult.gotLocation(null);
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 61 } } publicstaticabstractclassLocationResult{ publicabstractvoidgotLocation(Locationlocation); } } ElconstructordelaclaseMyLocationrecibecomoparámetroslaconfiguración establecidaparaelGPSolared.Esaconfiguraciónincluyeladistanciamínimade consulta,elmínimotiempoentreconsultasysisoloserealizaunaconsulta, deteniendoelservicioalrecibirlaposición.Estaúltimaopciónnosecontemplayaque debeestarconsultandoperiódicamente.Conestosparámetrossedefinelalecturade lalocalización,intentandominimizarlaalmáximodebidoalcosteenergéticoque puedetener. UndetalleimportantequehayquedestacaracercadelGPSesquetenerlo encendidonoconsumebatería.Suconsumovienedadoporlasconsultasquerealice, eseeselpuntoquesehadeperfilaryconlosparámetrosantesdetalladosseintenta reduciralmáximolasconsultas. ElmétodoqueponeenmarchalasconsultasalservidoresgetLocation.Este métodorecibeelcontexto(informacióndelsistemaactual)yunainstanciade LocationResult.LaclaseLocationResulttieneunpapeldeterminante,todaslasclases quequieranutilizaresteprocesodebenheredardeellaeimplementarelmétodo getLocation()donderecibiránlanuevacoordenada.Unejemplodeesta implementaciónseencuentraenelsiguientecódigo: publicclassLibreGeoLocationResultextendsLocationResult{ privateList<ILocationServiceListener>arrayLocationListener; privateLocationcurrentLocation; publicLibreGeoLocationResult(){ arrayLocationListener=newArrayList<ILocationServiceListener>(); } @OverridepublicvoidgotLocation(Locationlocation){
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 62 //Comprobamosqueseaunamejorposición. if(currentLocation!=null &&UtilGPS.isBetterLocation(currentLocation,location)){ this.currentLocation=location; }else{this.currentLocation=location;} for(ILocationServiceListeneriterable_element:arrayLocationListener) iterable_element.updateCurrentLocation(this.currentLocation); } publicLocationgetCurrentLocation(){ returnthis.currentLocation; } publicvoidunRegisterLocationListener(Integerpos){ arrayLocationListener.remove(pos‐1); } publicIntegerregisterLocationListener(ILocationServiceListenerl){ arrayLocationListener.add(l); returnarrayLocationListener.size(); } } 5.1.4 Conexiónainternet InternetesunmedioimprescindibleenesteproyectodeR.A.Todala informaciónqueserepresentaporpantallaesobtenidaentiemporealporla aplicación.Lacomunicaciónconelservidornodebeserconstante,esmás,paraelcaso delaR.A.puedehaberperiodosdelatenciaelevadaentrepeticionesdadoqueun perímetrodefineeláreaderefresco.Perollegadoelmomentodelapeticiónesun momentocríticoquedeberealizarsecontotalfiabilidad.Esimportantedestacarque enningúnmomentosehatenidoencuentaeltipodeconexión3GoWifi,larazónes queesteprocesoestotalmentetransparenteparalosdesarrolladores,eselpropio sistemaelencargadodeestablecerlaconexiónenfuncióndelaconfiguración establecidaporelusuario.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 63 LatecnologíaAndroiddisponedeunasAPIsdesarrolladasporApacheSoftware Fundation(ASF)pararealizartodotipodeconsultas.Estasclasesresumenenvarios pasoselprotocolodecomunicaciónentreelclienteyelservidor: DefaultHttpClient:esunaimplementacióndelaclaseHttpClientque pre‐configuralosescenariosmáscomunesdecomunicación. HttpGet:elprotocoloGET(RFC2616)significaquecualquier identificadorseráenviadoporlaURI.Lainstanciadeberecibireltipode cabeceradecomunicaciónylaURIdedestino. HttpPost:elprotocoloPOST(RFC2616)esutilizadoparaqueelservidor acepteunaentidadcerrada(envíalosparámetrosenlacabecerayno enlaURI)enunapetición. HttpResponse:despuésderecibirlapetición,elservidorrespondecon unmensajehttpqueestaclaseseencargadealmacenar. HttpEntity:lasentidadespermitenconvertirelmensajerecibidoenun elementoconsistenteenlamemoriadelsistema.Sinofueraasíel mensajeestácontenidoenlacomunicaciónyenelmomentoquese cerraseelcontenidodesaparecería.Esresumen,unaentidadesuna instanciadelresultadodelacomunicación. Lasiguientefigura,¡Error!Noseencuentraelorigendelareferencia.,definelas diferentesposibilidadesquepuedetenerunclientemóvilparacomunicarseconel servidorutilizandotantolaredmóvilcomolasconexionesinalámbricas(Wifi).
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 64 Elsiguientecódigoesutilizadopararealizarconsultasalservidorutilizandoel protocolodecomunicaciónGETygestionandotantolarespuestadelservidorcomolos posiblesfallosenlacomunicación. privateInputStreamretrieveStream(Stringurl,Stringparametros) throwsIOException{ DefaultHttpClientclient=newDefaultHttpClient(); HttpGetgetRequest=newHttpGet(url+"?"+parametros); getRequest.setHeader("Content‐Type","text/plain;charset=utf‐8"); try{ HttpResponsegetResponse=client.execute(getRequest); finalintstatusCode=getResponse.getStatusLine().getStatusCode(); if(statusCode!=HttpStatus.SC_OK){ Log.w("HecateGeoSocial.class","Error"+statusCode +"forURL"+url); returnnull; Figura32:Arquitecturadecomunicaciónentreusuarioyelservidor
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 71 EsimprescindibleactivarelpermisodeescrituraenelAndroidManifest.xml,de locontrarionosepodríaalmacenar: <uses‐permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 5.1.8 SherlockActionBar LoscontinuosavancesdeAndroidtantoanivelde equiposcomodesistemasoperativosparecenenfocarsea realizartodalaoperatividadpormediodelapantalla.Lejos estánquedandolosterminalesqueincluíanbotonespara mostraropcionesylasopcionesestánquedandorelevadasa aparecercomounmenúmásenlapantalla. Parapodertenerunaexperienciadeusosimilartantoenversiones2.xcomolas másactuales4.x,sehaoptadoparaañadirestalibreríaquepermitesimularuna interfazgráficasimilaralasversionesmásmodernasperoendispositivoscon versionesanterioresymáslimitados. EstalibreríaesunaextensióndeunalibreríaquehacreadoGooglepara compatibilizarlosdiseñosyfacilitarelusodebarrasdediseñosatravésdelas Figura34:Icono sherlockActionBar Figura35:AplicaciónR.A.condetalledepunto
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 72 diferentesAPIs.LalibreríaautomáticamenteusacódigonativodelActionBarcuando locreeoportunooseajustaautomáticamentealaimplementaciónrealizadaenlos diseños.Estofacilitalausabilidadenlasversiones2.xysuperiores. Enlaimagenanterior,Figura35:Aplicación R.A.condetalledepunto,puedeapreciarseenla partesuperiorizquierdadelapantallaeliconoconel nombredelaaplicaciónyenlapartederechalos botonesparaabrirlaconfiguración.Unadelasfuncionalidadesqueincorporatambién eslaopcióndeaccederalapantallaanteriorseleccionandoeliconodelaAPPFigura 36:SalirdelaR.A..[26] 5.1.9 Opcionesdebúsqueda Elprocesodeobtencióndelainformaciónarepresentarsebasaenrealizar peticionesalservidorenviandolalocalizacióndeldispositivoencadamomento.Para quelasbúsquedasnoseangenéricasy descarguentodotipodeinformación,el usuariodisponedeopcionesparadeterminarel filtradoquedeseerealizar. Losparámetrosdebúsquedapermiten, entreotrascosas,elegirlospuntosdeinterés (PDIs),obstáculos,lavisualizaciónde componentescomolaflechaoinclusodefinirelradiodebúsqueda.Lacantidadde tiposdePDIsdisponiblesalcanzalatreintena,porlotantopuedellegaramostraruna grancantidaddeinformación,quesea superioralanecesitadaporelusuario.Como muestralaFigura38:ListadodePDIs,el usuariosolotienequeirmarcandolacasilla deaquellospuntosqueleintereseny Figura36:SalirdelaR.A. Figura37:Opcionesdefiltrado Figura38:ListadodePDIs
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 73 desmarcandolosquenoseandesuinterésendeterminadomomento.EnlaFigura37: Opcionesdefiltrado,esposibleelegirtambiénentrepuntosquehayansidoverificados portécnicosdeaccesibilidady/oayuntamientos(oficiales),otambiénpuntosquelos propiosusuariosdelaredsocialhayanañadidoporcuentapropia(sociales). 5.1.10 FrameworkdeR.A.LibreGeoSocial EltérminodeFrameworkparaLibreGeoSocialhasidoacuñadoaposteriori,en unprincipiosetratabadeunaaplicaciónconcretaquefueliberadacomoOpenSource ylicenciaCreativeCommons.UnavezseparadalapartequeenvolvíalaR.A.delaparte deconsultaqueteníalaaplicaciónoriginal,seledioestanomenclaturapara diferenciarambaspartes. Elprocesodeseparacióndeambaspartesnofueunprocesofácil.LaR.A. estabaenfocadaparautilizarseenesaAPP.Elementoscomolasclasesquecontienen lospuntosamostrarsehanmantenidoeincrementadoconlosnuevosatributospara poderutilizarlaR.A.Estotambiénhasidounpuntoafavorparadesarrollartodoel contenidodelaR.A.comounaaplicaciónindependientedelapropiaaplicaciónVadeo Móvil,ademásgraciasalmapeoutilizandolalibreríaGSONdeApache(ASF)hasido sencillopoderajustarloscamposdelabasededatosconlosatributosdelasclasesdel Framework. LascaracterísticasprincipalesdelaAplicaciónhansidodescritasenelcapítulo 2.1.5porloqueenestepuntodeldocumentosehacereferenciaacómosehan desarrolladolaspartesprincipalesdelFrameworkycómoseutilizanloselementos descritosenlosapartadosanteriores. Elsiguientecódigocontienelaclasequemapealospuntosdescargados. importcom.google.gson.annotations.SerializedName; publicclassGeoNodeimplementsSerializable{ //SerializableUID privatestaticfinallongserialVersionUID=‐9121943636715457236L; @SerializedName("id") privateIntegermId; @SerializedName("titulo") privateStringtitulo;
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 74 privateDoublemRadius; @SerializedName("fecha_alta")privateStringmSince; @SerializedName("lat") privateDoublemLatitude; @SerializedName("lon") privateDoublemLongitude; privateDoublemAltitude=AltitudeManager.NO_ALTITUDE_VALUE; privateStringmPosition_since; @SerializedName("nickUsuario")privateStringmUsername; @SerializedName("idUsuario")privateStringidUsuario; @SerializedName("tipo") privateStringtype; @SerializedName("classPDI")privateBooleanclassPdi; @SerializedName("classPunto")privateBooleanclassPunto; @SerializedName("coments")privateList<Integer>coments; @SerializedName("fotos") privateList<String[]>fotos; @SerializedName("accesib") privateList<AccessInformation> accesib; ... UnadelascaracterísticasqueutilizalaAppLibreGeoSocial(apartirdeahora acuñadaconeltérminoLGS)sonlascapas.LaAPPpermitíapoderenlazarunacapa paramostrarunainformaciónenconcreto.UnodelosejemplosoncapasdeYoutube, Paranomico,etc.Seleccionandounacapasedescargabasuinformación. Todaestageneralizaciónnoeranecesariaenesteproyecto.Enlugardeenviar lainformaciónencapassehautilizadolaclaseprincipalencargadadedescargarel contenidoconlainformaciónparaalmacenarlosmétodosnecesariosdecomunicación conelservidor.Sepodríaconsiderarcomoelpilarcentraldelosdatos,todoestoestá incluidoenlaclaseHecateGeoSocial.class. publicclassHecateGeoSocial{ ... staticpublicHecateGeoSocialgetInstance(){ if(singleton==null){ singleton=newHecateGeoSocial(); }
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 75 returnsingleton; } LalocalizaciónserealizaconsultadoelservicióactivadoalarrancarlaR.A. publicLocationgetLocation(){ LocationmyLocation=LocationService.getCurrentLocation(); returnmyLocation; } Elsiguientemétodoeselquerealizalasllamadasparaobtenerlosnuevos nodos.Seleenvíalaposiciónjuntoconlosparámetrosdelfiltradoparaqueelservidor devuelvalospuntosoportunos.Enelsiguientecódigosepuedeapreciarelusode GSON. publicArrayList<GeoNode>getLayerNodes(Locationloc,Stringparameters) throwsException{ try{ ... ReaderreadernewInputStreamReader( retrieveStream(ServiceInterface.ListPDIRadio,parameters)); Gsongson=newGson(); StatusRequestServerstatServ= gson.fromJson(reader,StatusRequestServer.class); returnmArrayNodes=statServ.getListNodes(); }catch(Exceptione){ Log.e(TAG,e.getMessage()); throwe; } } ... Loscomentariostambiénsedescargandelmismomodo,peroenestecasobajo demandadelusuario. publicList<Comment>getComments(StringstrListIdComents)throwsException {
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 76 try{ Stringparameters="ids_comentarios="+strListIdComents; Readerreader=newInputStreamReader( retrieveStream(ServiceInterface.Comments,parameters)); Gsongson=newGson(); StatusRequestServerCommentsstatServ= gson.fromJson(reader,StatusRequestServerComments.class); returnstatServ.getListComment(); }catch(Exceptione){ Log.e(TAG,e.getMessage()); throwe; } } ... ElúltimodelosmétodosinteresantesdenombrareselgetThreadtoUpdate, encargadodelanzarunnuevoHilodeejecuciónpararealizarelprocesodeobtención denodos.Esnecesarioelusodehilosparanodetenerlaejecucióndelaaplicación. publicThreadgetThreadtoUpdate(finalHandlerhNotification,finalString[] categories,finalLocationloc){ Log.e("HecateGeoSocialLayer","getThreadtoUpdate"); Threadth=newThread(){ publicvoidrun(){ try{ ArrayList<GeoNode>auxArray=newArrayList<GeoNode>(); auxArray.addAll(HecateGeoSocial.getInstance().getLayerNodes(loc)); if(!auxArray.isEmpty()){ GeoNodePositionComparatorcomparator=new GeoNodePositionComparator(); Collections.sort(auxArray,comparator); }
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 77 mArrayNodes=auxArray; hNotification.sendEmptyMessage(0); }catch(Exceptione){ Log.e(TAG,e.getMessage()); }}}; returnth; } } 5.1.11 Lossensores Lossensoressonutilizadoscontinuamentepararefrescarla información.Comomínimolabrújulamarcacadaunodelos movimientosquesufreelterminal.Laclase ARCompassManagereslaencargadadecontrolarlas actualizacionesdelossensoresynotificarloparaqueelementos comolabrújulaaparezcanrefrescadosporpantalla.Unadelasfuncionalidadesquese haañadidoeslaopcióndepoderpausarelcontenido.Trasrealizarmúltiplespruebas sedeterminóqueenalgunoscasospuedeserdifícilparaelusuarioutilizarambas manosyseoptóporañadirunbotóndepausaquedetuviesetodaactualización.Con esaopciónlosiconospermanecenestáticosenlapantallaysonmásfácilesde seleccionar.Lapausaserealizabloqueandolosnuevosresultadoscapturados. Enelsiguientecódigosereflejaloexplicadoconanterioridadaldefiniruna clasequeimplementalaInterfaceSensorEventListener.EstaInterfacepermite capturarlasactualizacionesproducidasenlossensorespararealizarcálculosdelas nuevasposicionesdeldispositivo.Estoscálculossonutilizadosalahoradesituarlos elementosenlapantalla. publicclassARCompassManagerimplementsSensorEventListener{ OnCompassChangeListeneronCompassChangeListener=null; privateSensorManagersm; privatestaticBooleanFLAG_PAUSE=false; ... Figura39:IconoPausa
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 78 publicARCompassManager(ContextmContext){ sm=(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); } privatevoidsetSensors(){ //Settingasensorlistenerforaccelerometerandmagneticfieldsensors try{ List<Sensor>sensors=sm.getSensorList(Sensor.TYPE_ACCELEROMETER); if(sensors.size()>0){ Sensorsensor=sensors.get(0); sm.registerListener(this,sensor, SensorManager.SENSOR_DELAY_NORMAL); } sensors=sm.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); if(sensors.size()>0){ Sensorsensor=sensors.get(0); sm.registerListener(this,sensor, SensorManager.SENSOR_DELAY_NORMAL); } }catch(Exceptione){ Log.e("ARCompassManager","",e);}} publicvoidsetOnCompassChangeListener(OnCompassChangeListener onCompassChangeListener){ if(this.onCompassChangeListener==null) setSensors(); this.onCompassChangeListener=onCompassChangeListener; } publicvoidunregisterListeners(){ sm.unregisterListener(this); onCompassChangeListener=null; } privatevoidOnCompassMeasure(){ if(onCompassChangeListener==null)
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 79 return; float[]values=newfloat[3]; float[]inr=newfloat[9]; float[]outr=newfloat[9]; float[]i=newfloat[9]; float[]values_acc=acc_values.clone(); float[]values_mag=mag_values.clone(); BooleanauxResuSensor=SensorManager.getRotationMatrix(inr,i, values_acc,values_mag); if(inr!=null&&!FLAG_PAUSE){ SensorManager.remapCoordinateSystem(inr,SensorManager.AXIS_X, SensorManager.AXIS_Z,outr); SensorManager.getOrientation(outr,values); values[0]=(float)Math.toDegrees(values[0]); values[1]=(float)Math.toDegrees(values[1]); values[2]=(float)Math.toDegrees(values[2]); //correctionofthemeasures //azimuth values[0]+=correction; if(values[0]<0) values[0]+=360; //elevation values[1]=90‐values[1]; //PIDcontrollerforazimuthandelevation //////////////////////////////// values[0]=azimuthPID.getValue(values[0]); values[1]=elevationPID.getValue(values[1]); onCompassChangeListener.onChange(values);
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 80 } } publicvoidonSensorChanged(SensorEventevent){ switch(event.sensor.getType()){ caseSensor.TYPE_ACCELEROMETER: acc_values=event.values.clone(); break; caseSensor.TYPE_MAGNETIC_FIELD: mag_values=event.values.clone(); OnCompassMeasure(); break; } } LaclaseencargadadearrancarymovertodalaactividaddelaR.A.esARView. HeredadeARActivityquealmismotiempoheredadeSherlockFragmentActivitypara poderutilizarlasventajasdelFramework.Cuandoarrancaseencargadeir instanciandotodosloscomplementosqueparticipanenelsistema.Paraempezarse instanciaelLocationServiceparacontrolarlalocalización.Despuésseencargadeir añadiendolascapasdeinformaciónqueapareceránporpantalla(radar,info,etc.). Actoseguidocargatodaslaspreferencias,entreotrascosas,yporfinlanzalaprimera llamadaparacargarlainformación. publicclassARViewextendsARActivity{ protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); try{ startService(newIntent(this,LocationService.class)); LocationService.registerInitListener(locationListenerStart); pointerObject=this; refreshed=false;
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 87 LaclaseARActivityantesnombradaheredandodeSherlockFragmentActivity quealmacenaelmétodorefreshResourceDrawns.Estemétodopintacadaunadelos nodosqueaparecenporpantalla. LaclaseARGeoNodeocupaunpapelfundamentalenlarepresentacióndelos puntosycontencióndelainformación.Contienetodoslosmétodosparainteractuar conelpuntomostradoenpantallayactivarlosprocesosdemostrardetallesde información.Lainstanciacióndeestaclaseserealizacuandounpuntoesdescargado. PrimerosedescargacomoGeoNodeyserealizaelprocesodemapeoconestaclase.El procesoincluyeoperacionesparadeterminarsuposición,cargarlaimagencomouna Viewparaquepuedasermostradaenpantalla,etc.Además,elmapeoincluyela ordenaciónenunlistadoqueluegoseráutilizadoparamostrarlainformación detallada. Comodatointroductorio,eldetalledecadapuntoesmostradoenunagalería deimágenes(ARStaticSummaryBox.class)ypermitedeslizarsehaciaelpuntoanterior oposteriorconelusodeldesplazamiento.Graciasaestosepuedenconsultartodos lospuntosdelmapaysiunonoapareceenelcampodevisiónunaflechaindicaenqué direcciónhayqueenfocar. ContinuandoconlaexplicacióndeARGeoNode,larepresentacióndela informaciónimplicatresclasesprincipales.ARView,quegestionalasactualizacionesde lainformación,suordenaciónyllamadasparaquesearepresentadaenpantalla.La siguienteclaseesARGeoNodequecontrolatantoeliconoinformativodelpuntoque aparecerporpantallacomolasaccionesparamostrareldetalledelpunto.También incluyeelpropiopuntoensídelqueseobtienetodalainformaciónquesepintaenel detallemencionadoanteriormente. publicclassARGeoNodeimplementsARNodeDrawingIF{ privateDrawResourcedrawn; privatebooleanisloaded=false; privateGeoNodegeoNode;
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 88 privatefloatdistance; privatefloatazimuth=0; privatePointpoint=null; privateDrawResourceSearchernodeSearcher; privateActivitymActivity; privatestaticARSummaryBoxarSummaryBox=null; privatestaticbooleandoCenterSummary=false; privatestaticSemaphoresem=newSemaphore(1); privatestaticDrawRadarmRadar=null; privatestaticbooleanrefreshIcon=false; privatestaticbooleanisSearchSystem=false; Ellistadodeatributosanteriorresumelainteracciónquepuedellegaratener laclase.ElejemplodemRadarpermitequealserseleccionadounpuntoaparezcaen elradarconuncolordiferente.ElatributoarSummaryBoxeselencargadode comunicarseconlaclasequemuestraeldetalleyalmarcarunpuntoindicarlequé informacióndebepintar.ElatributogeoNodecontienelainformacióndelpuntoque seráleídaymostradaporpantalla.ElúltimoatributoadestacaresnodeSearcher,que activaenpantallaunaflechapara,comosehaindicadoantesenlaexplicacióndela galería,indicarenquédirecciónhayqueenfocarlacámaraparaqueaparezcaenla pantalla. LaclaseDrawResourcetambiénestáinstanciadaenARGeoNodeymereceuna mencionaexclusiva.Enellacadapuntoqueapareceporpantallaconcentralas operacionesderepresentacióndelpunto,esdecir,almacenalospuntosencargadosde refrescarlainformación,localizarlaenpantalla,etc. publicclassDrawResourceextendsView{ ... AlextenderdeViewpermiteserrepresentadacomouncomponenteenla pantalla.EstaclasedisponedelmétodoonDrawquerecibeunCanvas(paneldondese
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 89 pinta)yenélsepintalainformacióndelpunto.Enestecasouniconoyuna descripción,peroenelcasodeDrawResourceSearcherpintaunaflechaquegiraasu alrededorsegúnsemuevaeldispositivo. Elcódigoqueapareceacontinuaciónmuestraloscálculosrealizadosenel métodoonDrawparasituarlosgráficosenlapantalla. @Override protectedvoidonDraw(Canvascanvas){ intw=canvas.getWidth();inth=canvas.getHeight(); cx=((float)w)/2;cy=((float)h)/2; /*Calculatingiftheiconshouldbedrawn*/ if((Math.abs(azimuth)>MAX_AZIMUTH_VISIBLE)|| (Math.abs(elevation)>MAX_ELEVATION_VISIBLE)){ if(onBoxChangeListener!=null) onBoxChangeListener.onChange(‐1,‐1,‐1,‐1); if(onShowIconListener!=null) onShowIconListener.onShow(false); return; } if(onShowIconListener!=null) onShowIconListener.onShow(true); /*Ifthereisnoicon,werequestforone*/ if((bitmap_clicked==null)&&(onGetIconListener!=null)) onGetIconListener.onGetIcon(); /*Calculatingthescreenpixelthatcorrespondstothenode*/ posx=cx+ (float)(Math.sin(Math.toRadians(azimuth))/Math.sin(Math.toRadians(MAX_AZIMUTH _VISIBLE)))*cx; posy=cy+ (float)(Math.sin(Math.toRadians(elevation))/Math.sin(Math.toRadians(MAX_ELEVATI ON_VISIBLE)))*cy; /*Checkifthetagisintothebigcentralregion*/
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 90 booleanisCenter=false; if(isOnCircularArea(cx,cy,posx,posy,ARUtils.transformPixInDip(mContext, BIG_CENTER_RANGE))) isCenter=true; /*Checkifthetagisintothecentralregion*/ if(isOnCircularArea(cx,cy,posx,posy,CENTER_RANGE)) if(onCenterListener!=null) onCenterListener.onCenter(); /*Calculatingthesizesoftheelements*/ if(is_clicked){ icon_size=MAX_ICON_SIZE; bitmap=bitmap_clicked; text_size=MAX_TEXT_SIZE; }elseif(isCenter){ icon_size=MED_ICON_SIZE; bitmap=bitmap_normal; text_size=MED_TEXT_SIZE; }else{ icon_size=MIN_ICON_SIZE; bitmap=bitmap_small; text_size=MIN_TEXT_SIZE; } /*Checkingthenamespainting*/ booleanisName=false; if(name_status.equals(ALL_NAMES)) isName=true; elseif((name_status.equals(CENTRAL_NAMES))&&isCenter) isName=true; /*Paintingtheiconbgbox*/ Paintpaint_bg=newPaint(); paint_bg.setARGB(200,0,0,0); paint_bg.setShader(newLinearGradient(posx,posy‐(icon_size/2)‐ BORDER,
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 91 posx,posy+(icon_size/2)+BORDER,Color.WHITE, Color.BLACK,TileMode.MIRROR)); paint_bg.setAntiAlias(true); RectFbackRect=newRectF(posx‐icon_size/2‐BORDER,posy‐ (icon_size/2+BORDER), posx+icon_size/2+BORDER,posy+icon_size/2+ BORDER); canvas.drawRoundRect(backRect,BORDER/2,BORDER/2,paint_bg); /*Paintingtheicon*/ if(bitmap!=null) canvas.drawBitmap(bitmap,posx‐(icon_size/2),posy‐ (icon_size/2),null); if(is_clicked||isName){ /*Paintingthearrow*/ Paintpaint=newPaint(); paint.setARGB(250,255,255,255); paint.setAntiAlias(true); paint.setFakeBoldText(true); paint.setTextAlign(Align.CENTER); paint.setTypeface(Typeface.SANS_SERIF); Pathpath=newPath(); path.moveTo(posx‐(icon_size/4),posy+(icon_size/2)+ 2*BORDER); path.lineTo(posx,posy+(icon_size/2)+BORDER); path.lineTo(posx+(icon_size/4),posy+(icon_size/2)+ 2*BORDER); canvas.drawPath(path,paint); /*Paintingthenamebgbox*/
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 92 paint.setTextSize(text_size); Stringtext=name; floattlongitude=paint.measureText(text); if(tlongitude>2*icon_size){ tlongitude=2*icon_size; paint.setTextAlign(Align.LEFT); } paint_bg.setShader(newLinearGradient(posx,posy+ (icon_size/2)+2*BORDER,posx,posy+(icon_size/2)+4*BORDER+icon_size/8, Color.WHITE,Color.BLACK,TileMode.MIRROR)); paint_bg.setAntiAlias(true); backRect=newRectF(posx‐tlongitude/2‐2*BORDER,posy+ (icon_size/2)+2*BORDER,posx+tlongitude/2+2*BORDER,posy+(icon_size/2)+ 4*BORDER+icon_size/8); canvas.drawRoundRect(backRect,BORDER/2,BORDER/2,paint_bg); /*Paintingthename*/ path=newPath(); path.moveTo(posx‐tlongitude/2,posy+(icon_size/2)+2*BORDER+ (2*BORDER+icon_size/8)*3/4); path.lineTo(posx+tlongitude/2,posy+(icon_size/2)+2*BORDER+ (2*BORDER+icon_size/8)*3/4); canvas.drawTextOnPath(text,path,0,0,paint); } //calculatingboxpadding if(is_clicked&&(onBoxChangeListener!=null)){ intleft=(int)Math.max(0,(posx‐ ARUtils.transformPixInDip(mContext,125))); inttop=(int)(posy+(icon_size/2)+4*BORDER+icon_size/8); intright=(int)Math.max(0,(w‐(left+ ARUtils.transformPixInDip(mContext,250)))); intbottom=(int)Math.max(0,(h‐(top+ ARUtils.transformPixInDip(mContext,200)))); onBoxChangeListener.onChange(left,top,right,bottom); }
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 93 age=System.currentTimeMillis(); super.onDraw(canvas); } Undetalleimportanteesquesevalorasielnodoestáseleccionadoono,en casoafirmativosetraealfrentedelrestodenodosparasermásvisibleyseaumenta sutamañoparaquedestaque. @OverridepublicbooleanonTouchEvent(MotionEventevent){ Log.i(name,Integer.toString(event.getAction())); switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: if((System.currentTimeMillis()‐age)>1000&& !ARCompassManager.getPauseStatus()) break; floatposx=this.posx; floatposy=this.posy; floatclick_posx=event.getX(); floatclick_posy=event.getY(); if(isOnCircularArea(posx,posy,click_posx,click_posy,CLICK_RANGE)){ is_clicked=!is_clicked; bringToFront(); if(onIconClickListener!=null) onIconClickListener.onClick(is_clicked); returntrue; } break; }returnfalse;} Elmétodoanteriorcapturaloseventoslanzadosaltocarlapantalla.Sidetecta quehayunaintersecciónentrelaposiciónqueocupaelnodo,ellistener
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 94 onIconClickListeneresllamadoyactivaelnodocomoseleccionado,activandolas variablescorrespondientesparaqueenelpróximorefresco(ejecucióndeonDraw) puedaresaltarseelicono. Otraopciónquepuedeapareceresqueelnodoseamarcadocomoactivodado queseestáconsultandoeneldetallequeapareceenlagalería.Estotambiénfuerzaa queseamarcadocomoseleccionado. LaclaseARStaticSumaryBoxeslaencargadaderepresentarporpantallael detalledecadaunodelospuntos.Estaclasehasidomejoradaparaqueincluyalas opcionesdemostrartantoloscomentarioscomolasimágenesdelpuntoseleccionado. Elmododerepresentarsehasidoactualizadoporcompletoparaajustarsealas necesidadesdelproyecto.Algunosdelosdetallesquesehanincluidosonlaopciónde consultariconosconinformacióndelaaccesibilidaddelpuntoylaopcióndelanzarel Text‐to‐Speech,opciónquesuponeungranalicienteparalaspersonasalasqueva dirigidoelproyecto. Acontinuaciónaparecenelconstructoryelmétodoquelanzalaoperaciónde mostrarelpunto. publicARStaticSummaryBox(ActivitymActivity,RelativeLayoutcontainer, RelativeLayoutlayerExtraInfoPicCom){ super(container); this.mActivity=mActivity; this.layerExtraInfoPicCom=layerExtraInfoPicCom; Figura40:Diseñopanelinformativo
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 95 tts=newTextToSpeech(mActivity,this); } publicvoiddrawSummaryBox(ContextmContext,intnum_node){ setNodeClicked(num_node); this.mContext=mContext; Viewsummary_box=getSummaryBox(); if(summary_box==null){ LayoutInflaterfactory=LayoutInflater.from(mContext); summary_box=factory.inflate(R.layout.ar_static_summary,null); inth=mActivity.getWindowManager().getDefaultDisplay().getHeight(); summary_box.setPadding(0,h/2,0,0); setSummaryBox(summary_box); BoxListAdaptermAdapter=newBoxListAdapter(mContext); gallery=(Gallery)summary_box.findViewById(R.id.ar_static_gallery); gallery.setAdapter(mAdapter); gallery.setSpacing(2); gallery.setOnItemSelectedListener(onItemSelectedListener); } if((gallery!=null)&&(num_node!=‐1)) gallery.setSelection(num_node,true); } Enelsegmentodecódigoanteriorseapreciacómosehacenllamadaspara obtenerelView,quepordefectodebeestarinstanciadoalserelmismoparatodoslos nodos,ysecargalagaleríaparaañadirlelainformaciónapintar.Lagaleríautilizala claseBoxListAdapterparapintarsucontenido. Lasoperacionesqueserealizanenestagaleríaoenlasgaleríasengeneral, implicandisponerdeunlistadoordenadodelospuntosamostrar.Ellistadoquese utilizaeselquedesdelaclaseARViewhasidodescargadoyordenado.Deahívienela importanciadeestelistado,ynosoloparaelradarquetambiénmuestralospuntos.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 96 AcontinuaciónseincluyeelmétodoprincipaldelBoxListAdaptercuyafunción esdeterminarelnodoapintareirextrayendoloselementosdelavistapara rellenarlosdeinformación. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ Viewview; if(convertView==null){//Makeupanewview LayoutInflaterinflater=(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ElinflateseencargadeinstanciarelXMLquedescribelapantallayconello permitequesuselementospuedanserinstanciadostambién. view=inflater.inflate(R.layout.ar_static_label,null); }else{//UseconvertViewifitisavailable view=convertView; } ApartirdeahílamayoríadelasaccionesutilizanelfindVewByconelfinde detectarelelementoporsuidentificadoryasíañadirleelcontenido. TextViewt=(TextView)view.findViewById(R.id.ar_static_title); t.setText(getTitle(position));//ok t=(TextView)view.findViewById(R.id.ar_static_distance); t.setText(""+getDistance(position));//okdefault t=(TextView)view.findViewById(R.id.ar_static_description); t.setText(getDescription(position)!=null?getDescription(position):"");//ok t=(TextView)view.findViewById(R.id.ar_static_page); intold_page=getPage(t.getText().toString()); Stringpage=Integer.toString(position+1)+"/"+Integer.toString(size); if(size!=1){ if(position==0)
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 103 indicalosposiblesestadosporlosquepuedepasarunafoto.LatablaSOLICITUDES almacenalassolicitudesdelosusuariosquedeseaneliminarunafoto.Lafotopodrá sermanualmenteeliminadaporeladministradoro,segúnelnúmerodesolicitudes, automáticamentemarcadacomobloqueadaynosevisualizará. EncuartolugarestánlosCOMENTARIOS,dondeseincluyelatablacomentarios, queguardainformacióndeloscomentarios;estatablaincluyeunarelacióncontodas lastablasdeaquelloselementosquepuedenrecibircomentarios:PuntosyPDIs.De nuevo,latablaESTADO_COMENTARIOSindicalosposiblesestadosporlosquepuede pasaruncomentario. EnquintoyúltimolugarseencuentraelbloqueUSUARIOSconlastablas pertenecientesalcontroldeusuarios.Latablausuariosposeelainformaciónreferente alosmismosylatablaestado_usuarioscontieneellistadodeestadosquepuedetener unusuario.Latablatipo_usuarioindicaeltipodeusuarioqueaccedealsistema (Administrador,ayuntamiento,asociación,usuarioestándar).Latabla Preferencias_usuarioalmacenaelperfildelusuario,quéinformaciónleinteresa mostraryquéinformaciónleinteresabloquearenelcálculoderutas. 5.2.3 Diagramadeclases Unanálisisinicialdeldiagramaindicalosobjetosprotagonistasdelservicio,es decir,losqueestánpresentesenlamayoríadelosflujosdetrabajo.Esfácilmente reconocibleelobjetoPuntodelMapacomoejecentraldelservicio.Estoescorrecto, puestodalainformacióndelserviciosebasaenpuntosgeo‐localizadosque representanunlugarfísico. UnPuntodelMapapuedesercreadoporunUsuarioestándarounUsuariode laplataformaGIA.Asímismo,unPuntopuedecontenerfotos,comentarios,solicitudes deeliminacióneincidencias.Lospuntosseespecializanendoscategorías:Puntosde Interés,lugaresoedificiosenlosquesepuededesarrollaractividadesdediferente índole;yPuntos,elementosquepodemosencontrarenelentornourbanoquenoson lugares.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 104 LosPuntosDeInteréspuedentenerasociadoatributosdeaccesibilidad,dónde sedefinequécaracterísticashaydisponibleseneledificiotalescomorampas, ascensoresobañosadaptados. Todalainformaciónestábasadaenubicacionesfísicasexistentesyportanto necesitaserreferenciada.PorestemotivoelobjetoPuntodelmaparequiereun objetoCoordenada,elcualalmacenalalatitudylongituddelpunto. ElsegundoobjetomásdestacabledeldiagramadeclaseseselobjetoUsuario. Representaunusuariowebomóvilqueaccedealaplataforma.Unusuariopuede contenerpreferenciaspersonales,asícomoalmacenarrutasyparticiparenla definicióndepuntos. GranpartedelcontenidodeVadeoseplasmaenformadecomentarios.El objetoComentarioseasociaconpuntosyPDIs. Figura44:Diagramadeclases
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 105 6 Conclusiones ElproyectodescritoenestedocumentopresentaunaaplicacióndeRealidad AumentadaqueseincorporacomofuncionalidaddelaaplicaciónVadeoMóvil2.0del proyectoHécate.Estatecnologíapermitiráalusuariodisfrutar,rápidae intuitivamente,deunmedioparaconsultarlaaccesibilidaddelosespaciospúblicosde suentorno. LaaplicacióndeRealidadAumentadaensuconjuntoestáconcluidayoperativa paraserincorporadaalproyectoHécate.Losobjetivosquesemarcaronenun principiosehancumplidoensutotalidad.ConlaaplicacióndeRealidadAumentadaun usuarioescapazdelocalizarsuposición,realizarconsultasalservidor,descargarla informacióndeaccesibilidaddesuentornoyconsultarlaenunainterfazgráficaque incorporaherramientasdeaccesibilidad.Elobjetivodeoptimizacióndelosrecursos tambiénsehacumplido,agregandoFrameworksquereduceneltráficoeintegrando todalainformaciónenlaaplicacióndeVadeoMóvil,sinnecesidaddeutilizarotras aplicacionesonavegadores. Algunasmejorasextras,quenoestabanenlosobjetivosinicialesdelproyecto, sehanañadidoduranteelprocesodedesarrollo.Hasidoenesaetapa,unavez conocidaalcompletosuestructuraycódigo,cuandosehacomprobadoquepodían incorporarsesingrandesinconvenientesyaportandograndesmejorasparaelusuario. Respectoalaaccesibilidadsehaoptadoporincorporarunaopciónparapausarel contenidoypoderelegirfácilmenteunpuntoenlapantalla.Enaspectosdediseñoy pararesolverproblemasdefraccionamientoporversionesdeAndroid,seincorporóla libreríaSherlockActionBar,quesimulaeldiseñodelasversionesmásactualesentodas lasversionesdeAndroid,consiguiendoelmismoestiloencadaunadelasversiones delsistemaoperativo. Durantelaelaboracióndelproyectosonalgunoslosproblemasquehanido surgiendoenlasdiferentesetapas.Empezandodesdelaeleccióndelaaplicaciónde R.A.hastadesglosarelcódigoparaañadirloaVadeo.Otrosdelosproblemasque surgieronsecentraroneneldiseñodelainterfazgráficaylausabilidaddelaaplicación
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 106 paraconlosusuariosalosquevadestinada,quepresentanalgúngradode discapacidad.Ladisponibilidaddelcódigofuente,deherramientasdisponiblescomoel Text‐to‐Speechydelcuidadodiseñodelainterfaz,hansidosuficientesparaobtener solucionesóptimas. Enlaactualidad,elproyectoestáalaesperadecomprobarsufuncionamiento dentrodeVadeo.DentrodelproyectoHécateestáprogramadaunafasedepruebas conelobjetivodetestearlaaplicaciónconusuariosrealescondistintasdiscapacidades conelfindeevaluarlaeficienciayusabilidaddelaaplicación.Enesemomentose podránestimarajustesenlainterfazgráficaparadecidirmejorasquepuedan agregarseenfuturasversiones. Personalmente,laelaboracióndeesteproyectomehapermitidodescubrir aspectosdesconocidasparamíenelmundodelainformática.Empezandoporel desarrollodelenfocadoaunsegmentodelasociedadquepuedeteneralgún problemafísico‐motrizquelesimpidautilizarundispositivomóvilnormalmente.Estas deficienciasprovocanquesimplesaccionescomoleeruntexto,oinclusotocarun iconopuedanseruninconveniente.Realizarlasaplicacionesmásaccesiblesha permitidoobtenerunanuevavisiónenelmundodeldesarrollo.Nosiempresepuede desarrollarparatodoslospúblicos,peroconestaexperienciapuedoapreciarque simplesdetallesañadidospuedenabrirlaspuertasaungransectordeusuarios. Otroaspectohasidolaposibilidaddedesarrollarunaaplicaciónutilizando nuevastecnologíastantoaniveldedispositivoscomodeRealidadAumentada. Siemprehesentidocuriosidadporsufuncionamientoosusaplicacionesalmundoreal. Poderdesarrollarelproyectodefinaldecarreraresolviendoesasdudasyqueademás puedaayudaralagenteamejorarsuvidahacequemesientarealmentesatisfecho conelesfuerzorealizado. Paraterminar,considerounagranoportunidadhaberpodidodesarrollareste proyectoencolaboracióncondelDepartamentodeTecnologíasparalaSaludyel BienestardelinstitutoITACA.Esperopoderaplicarlosconocimientosadquiridostanto decolaboracióncomousodeherramientasdedesarrollooinclusonuevastecnologías enpróximosproyectos.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 107 7 Glosariodetérminos ApacheSoftwareFundation(ASF):esunaorganizaciónnolucrativacreada paradarsoportealosproyectosdesoftwarebajoladenominaciónApache. Esunacomunidaddescentralizadadedesarrolladoresquetrabajancadauno ensuspropiosproyectosdecódigoabierto.LosproyectosApachese caracterizanporunmodelodedesarrollobasadoenelconsensoyla colaboraciónyenunalicenciadesoftwareabiertaypragmática. API(AplicationProgrammingInterface):representauninterfazde comunicaciónentrecomponentessoftware. ADC2:competiciónparadesarrolladoresAndroidpatrocinadaporGoogle. Epipolar:tecnologíautilizadaparacapturarunamismaimagendesdedos puntosdiferentes. Framework:conjuntoestandarizadodeconceptos,prácticasycriteriospara enfocaruntipodeproblemáticaparticular.Ademássirvecomoreferencia pararesolverproblemassimilares. Freemium:modelodenegociosqueofreceserviciosbásicosgratuitos, mientrasquecobrapormásavanzadosoespeciales. GPLv3:licenciadepublicacióndesoftwareorientadaaprotegerlalibre distribución.Estaversiónv3incluyenuevasrestriccionesqueimpidenla gestióndederechosoDRMensoftwarequelleveestalicenciapublicada. GPS:SistemaGlobaldePosicionamientoporsatélitequepermitedeterminar lalocalizaciónoposicióndeunobjetoentodoelmundo. IOS:sistemaoperativodesarrolladoporlacompañíaAppleparadispositivos móviles.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 108 ISO:organismoencargadodepromovereldesarrollodenormas internacionalesdefabricación.Secentraenbuscarlaestandarizaciónde normasdeproductosyseguridadparalasempresasanivelInternacional. Kernel:consisteenlapartemásimportantedelsistemaoperativo, encargadodelacomunicaciónentreelHardwareylasaplicaciones. MáquinaVirtual:Unamáquinavirtualsecomportacomounsoftwareque emulaunacomputadorapermitiendolaejecucióndeprogramasentiempo real. MIT:esunainstitucióndeeducaciónsuperiorprivadasituadaenCambridge, Massachusetts,EstadosUnidos. MVC:esunpatrónomodelodeabstraccióndedesarrollodesoftwareque separalosdatosdeunaaplicación,lainterfazdeusuario,ylalógicade negocioentrescomponentesdistintos. Proxy:esunprogramaodispositivoquerealizaunaacciónen representacióndeotro,estoes,siunahipotéticamáquinaAsolicitaun recursoaunaC,loharámedianteunapeticiónaB;Centoncesnosabráque lapeticiónprocedióoriginalmentedeA.Estasituaciónestratégicadepunto intermediosueleseraprovechadaparasoportarunaseriede funcionalidades:proporcionarcaché,controldeacceso,registrodeltráfico, prohibirciertotipodetráficoetc. R.A.:eseltérminoqueseusaparadefinirunavisióndirectaoindirectade unentornofísicodelmundoreal,cuyoselementossecombinancon elementosvirtualesparalacreacióndeunarealidadmixtaentiemporeal. SDK:esgeneralmenteunconjuntodeherramientasdedesarrollode softwarequelepermitealprogramadorcrearaplicacionesparaunsistema concreto
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 109 Streaming:esladistribucióndemultimediaatravésdeunaredde computadorasdemaneraqueelusuarioconsumeelproductoalmismo tiempoquesedescarga
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 110 8 Bibliografía [1] ColaboradoresdeCinu.Personascondiscapacidad[enlínea].NacionesUnidas, centrodeinformación[fechaconsulta:28deagostodel2012].Disponibleen: <http://www.cinu.org.mx/temas/desarrollo/dessocial/integracion/p_dis.htm> [2] ElINE.NotaprensaEncuestadeDiscapacidad,Autonomíapersonaly situacionesdeDependencia(EDAD)año2008[enlínea].INE,InstitutoNacionalde Estadística,2012[fechaconsulta:4deseptiembredel2012].Disponibleen: <http://www.ine.es/prensa/np524.pdf> [3] Tiposdeparálisis[enlínea].Paralisiscelebral,Tiposdeparálisiscerebral,2012 [fechadeconsulta:24deagostodel2012].Disponibleen: <http://www.paralisiscerebral.com/ique‐es‐la‐paralisis‐cerebral/7‐tipos‐de‐paralisis‐ cerebral.html> [4] EscritoporAeoe(AsociaciónEspañoladelaOvulaciónyelEmbarazo).La espinabífida[enlínea].AsociaciónEspañoladelaOvulaciónyelEmbarazo,2009 [fechadeconsulta25deagostodel2012].Disponibleen: <http://aeoe.blogdiario.com/1260785160/la‐espina‐bifida/> [5] ColaboradoresdeWikipedia.DistrofiamusculardeDuchenne[enlínea]. Wikipedia,Laenciclopedialibre,2012[fechadeconsulta:20deseptiembredel 2012].Disponibleen: <http://es.wikipedia.org/w/index.php?title=Distrofia_muscular_de_Duchenne&oldid =58814649> [6] Vivircondiscapacidades[enlínea].FundaciónHomero,enunmundode contradicciones:Aproblemascomunessolucionescolectivas,2008[fechade consulta30deagostodel2012].Disponibleen: <http://libreopinion.com/members/fundacionhomero/lasdiscapacidades.html> [7] TecnologíaAsistiva[enlínea][fechadeconsulta21deseptiembredel2012] Disponibleen:<http://www.aedin.org/tecnologia‐asistiva> [8] ColaboradoresdeWikipedia.RealidadAumentada[enlínea].Wikipedia,La enciclopedialibre,2012[fechadeconsulta:18deagostodel2012].Disponibleen: <http://es.wikipedia.org/wiki/Realidad_aumentada>
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 111 [9] CarmenMorenoOrtega.RealidadAumentada,¿quéesyparaquésirve?[en línea].Viadeoblog,2011[fechadeconsulta:05deoctubrede2012].Disponibleen: <http://blog.viadeo.com/es/2011/11/17/realidad‐aumentada‐ejemplos‐que‐e/> [10] ColaboradoresdeWikipedia.RealidadAumentada,Software.Wikipedia,La enciclopedialibre,2012(fechadeconsulta2deseptiembredel2012).Disponibleen: <http://es.wikipedia.org/w/index.php?title=Realidad_aumentada&oldid=59631870# Software> [11] Layar‐Características[enlínea].Layar,2012[fechadeconsulta:10defebrero del2012].Disponibleen:<http://www.layar.com/features/> [12] ComponentesdelproyectoWikitude.Documentación[enlínea].Wikitude, 2012[fechadeconsulta:10defebrerodel2012].Disponibleen: <http://devzone.wikitude.com/web/forum/documentation> [13] ComunidaddedesarrolladoresdeMixare.UsodeMixare[enlínea].Mixare, 2012[fechadeconsulta:12defebrerodel2012].Disponibleen: <http://www.mixare.org/usage/> [14] SuzyDeffeys.Descripción[enlínea].AndAR,AndroidAugmentedReality,2012 [fechaconsulta:12defebrero2012].Disponibleen: <http://code.google.com/p/andar/> [15] SergioBellón,JorgeCreixeryAngelSerrano.Presentación[enlínea].Look! FrameworkdeRealidadAumentadaparaAndroid,2012[fechaconsulta12de febrero2012].Disponibleen:<http://www.lookar.net/presentacion/> [16] RobertoCalvoyRaúlRomán.ARViewerSDK[enlínea].LibreGeoSocial: AugmentedRealityFLOSS,2011[fechaconsulta:15defebrerodel2012].Disponible en:<http://www.libregeosocial.org/node/24> [17] Colaboradordelblogdeandroid‐soconpseudónimoburn15.QuéesAndroid? Historiaycaracterísticasdelsistemaoperativo[enlínea].Android‐so,blogsobre Android,2011[fechaconsulta:4deagostodel2012].Disponibleen:<http://android‐ so.com/que‐es‐android‐historia‐y‐caracteristicas‐del‐sistema‐operativo> [18] AuroraRodriguez,colaboradoradeAndroideity.ArquitecturadeAndroid[en línea].Androideity,2011.[fechadeconsulta:03deoctubredel2012].Disponibleen: http://androideity.com/2011/07/04/arquitectura‐de‐android/ [19] ColaboradoresdeWikipedia.Android[enlínea].Wikipedia,Laenciclopedia libre,2012[fechadeconsulta:6deoctubredel2012].Disponibleen <http://es.wikipedia.org/w/index.php?title=Android&oldid=60272666>.
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 112 [20] ColaboradoresdeWikipedia.DesarrollodeProgramasparaAndroid[enlínea]. Wikipedia,Laenciclopedialibre,2012[fechadeconsulta:20deseptiembredel 2012].Disponibleen: <http://es.wikipedia.org/w/index.php?title=Desarrollo_de_Programas_para_Android &oldid=57994319>. [21] ColaboradordeTarracotadroid,Tomas.AndroidNDK[enlínea].Tarracotadroid, comunidaddeUsuariosAndroiddeTarragona,2011[fechaconsulta01deoctubre del2012].Disponibleen:< http://www.tarracodroid.com/index.php/tutoriales/dificultad‐media/49‐android‐ ndk> [22] ColaboradordeJavaHispano,RobertoMontero.Modelosdenegocioenel mercadodeaplicacionesAndroid[enlínea].JavaHispano,tulenguaje,tucomunidad, 2012[fechaconsulta:10deagostodel2012].Disponibleen: <http://www.javahispano.org/android/2012/3/17/modelos‐de‐negocio‐en‐el‐ mercado‐de‐aplicaciones‐android.html> [23] StaffLayar,Olga.APIs&WebServices[enlínea].Layar,ForoDevelopers,2012 [fechaconsulta:06deoctubredel2012].Disponibleen: http://devsupport.layar.com/entries/20057863‐is‐there‐a‐layar‐player‐sdk‐for‐ android [24] Definicióndeusabilidad‐Quées,SignificadoyConcepto[enlínea]. Definición.DE,2012[fechaconsulta:12denoviembredel2012].Disponibleen: <http://definicion.de/usabilidad/> [25] MaríaMedina.CiclodevidadeunaActivity[enlínea].Telekita,diariodeun proyectoAndroid,2012[fechaconsulta:5deseptiembredel2012].Disponibleen: <http://telekita.wordpress.com/2012/02/03/ciclo‐de‐vida‐de‐una‐activity/> [26] EquipodesarrollodeActionBarSherlock.UsosdeActionBarSherlock[enlínea]. ActionBarSherlock,2012[fechadeconsulta:8dejuniodel2012].Disponibleen: <http://actionbarsherlock.com/>
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 119 ID 6 Nombre MostrarOpciones Configuración DescripciónElusuariolanzalasopcionesdeconfiguraciónparaelegiruna ActoresUsuarioanónimo,usuarioregistrado IncluyeMostraropcionesconfiguración Nivelde prioridad Secundario Datosde entrada Ninguno. PrecondicionesElusuariodebedeestarenlavistadeR.A. FlujoNormal1. ElusuarioseencuentraenlavistadeR.A. 2. Seleccionaelbotóndeconfiguración. Flujo Alternativo Nohay Post‐ condiciones Aparecenenpantallalasopcionesdisponiblesparaelegiryeditar losparámetrosdefiltrado. ExcepcionesNo MóduloCapasComponente Elementos
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 120 ID7NombreDefinirfiltros DescripciónElusuariodeterminalosfiltrosdeelementosqueseránutilizados enelprocesodeobtencióndeinformacióndelservidor. ActoresUsuarioanónimo,usuarioregistrado IncluyeMostraropcionesconfiguración Nivelde prioridad Prioritario Datosde entrada Lecturadelvaloractualdelosparámetros. PrecondicionesElusuariodebedehaberaccedidoalasopcionesdeconfiguración. FlujoNormal 1. Elusuarioaccedealasopcionesdeconfiguración 2. Elusuarioaccedealaopcióndeelementos 3. Esusuariomodificamarcaodesmarcatantoscomosea necesario. Flujo Alternativo Nohay Post‐ condiciones Encasofavorableelusuariorecibeporpantallalainformación representadadelosnuevospuntos. ExcepcionesNo MóduloCapasComponente Elementos
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 121 ID 8 Nombre Consultarinformación PuntoR.A. Descripción LavistadeR.A.muestralacapaconloselementoencuestión: PuntodeInterés(PDI),obstáculo,incidenciaoinformacióntécnica. Elusuarioseleccionaunodeellosylaaplicaciónmuestrauna ventanasobrelavistaconlosdetallesdelelemento:título,tipo, accesibilidad;ylasopcionesaconsultar:fotografías,comentarios, lecturatexto. ActoresUsuarioanónimo,usuarioregistrado IncluyeMostrarvistadeRA Nivelde prioridad Prioritario DatosentradaIdentificadordelelemento Precondiciones Laaplicaciónmuestralacapacorrespondienteconalmenosun elemento. FlujoNormal 1. Elusuarioseleccionaelelementosobrelavistacuando apareceensucampodevisiónaumentada 2. Laaplicaciónbuscaelelementoentrelosdescargados 3. Laaplicaciónmuestraunacuadroconelresumendelos detallesdelelemento: Títuloy/odescripción Tipodeelemento Accesibilidad 4. Sielusuariodeseaampliaresainformación,pulsasobrelos botonescorrespondientespara: Consultarfotografíasdisponiblesenotraventana Consultarcomentariosdisponiblesenotraventana Reproducirporvoztodoeltextoqueaparece. Flujo Alternativo Silosdatosrecibidosestáncorruptosonosereciben: 2. Mostrarmensajealusuario. Post‐ condiciones UnnuevocuadroaparecesobrelavistadeRAconlainformación delelementoseleccionada. ExcepcionesLaaplicaciónnopuedemostrarlainformación
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 122 ID9NombreLeercontext‐to‐speech Descripción LavistadeR.A.muestraladescripcióndeunodelospuntosyla aplicaciónreproduceporelaltavoztodoeltextoquehayenla descripción. ActoresUsuarioanónimo,usuarioregistrado IncluyeMostrarvistadeRAydescripcióndelpunto. Nivelde prioridad Secundario DatosentradaIdentificadordelelemento Precondiciones Laaplicaciónmuestralacapacorrespondienteconalmenosun elementoyladescripcióndeunodelospuntos. FlujoNormal 1. Elusuariohaseleccionaunelementosobrelavistacuandoha aparecidoensucampodevisiónaumentada 2. Laaplicaciónhamostradoenpantallaladescripcióndel elemento 3. Elusuarioseleccionaelbotóndereproducir 4. SecargaelText‐to‐speechquereproduceeltexto. Flujo Alternativo Sinosepuedereproducireltextoapareceunmensajedealerta conelerror. Post‐ condiciones Sereproduceporelaltavozeltexto ExcepcionesLaaplicaciónnopuedereproducirlainformación
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 123 ID10NombreConsultarimágenespunto DescripciónLavistadeR.A.muestraladescripcióndeunodelospuntosya continuaciónsecargaotraventanaconlasimágenes ActoresUsuarioanónimo,usuarioregistrado IncluyeMostrarvistadeRAydescripcióndelpunto Nivelde prioridad Secundario DatosentradaNinguno Precondiciones Laaplicaciónmuestralacapacorrespondienteconalmenosun elementoyladescripcióndeunodelospuntos FlujoNormal 1. Elusuariohaseleccionaunelementosobrelavistacuandoha aparecidoensucampodevisiónaumentada 2. Laaplicaciónhamostradoenpantallaladescripcióndel elemento 3. Elusuarioseleccionaelbotóndeimágenes 4. Secargaotrapantalladondeapareceránlasimágenes 5. Seconsultasilasimágeneshansidodescargadaspreviamente ysieslaprimeravezsedescargan Flujo Alternativo Sinohayimágenesonosepuedendescargarapareceunmensaje deerror Post‐ condiciones Apareceunanuevapantallaconunagaleríadelasimágenes disponibles ExcepcionesLaaplicaciónnopuededescargarlasimágenes
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 124 ID 11 Nombre ConsultarComentarios punto DescripciónLavistadeR.A.muestraladescripcióndeunodelospuntosya continuaciónsecargaotraventanaconlascomentarios ActoresUsuarioanónimo,usuarioregistrado IncluyeMostrarvistadeRAydescripcióndelpunto Nivelde prioridad Secundario DatosentradaNinguno Precondiciones Laaplicaciónmuestralacapacorrespondienteconalmenosun elementoyladescripcióndeunodelospuntos FlujoNormal 1. Elusuariohaseleccionaunelementosobrelavistacuandoha aparecidoensucampodevisiónaumentada 2. Laaplicaciónhamostradoenpantallaladescripcióndel elemento 3. Elusuarioseleccionaelbotóndecomentarios 4. Secargaotrapantalladondeapareceránlascomentarios 5. Sedescarganloscomentariosrelacionadosalpuntodel servidor Flujo Alternativo Sinohaycomentariosonosepuedendescargarapareceun mensajedeerror Post‐ condiciones Apareceunanuevapantallaconunagaleríadelascomentarios disponibles ExcepcionesLaaplicaciónnopuededescargarloscomentarios
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 125 ID 12 Nombre LeerComentarioscon text‐to‐speech Descripción LavistadeR.A.muestraladescripcióndeunodelospuntos,a continuaciónsehacargadootraventanaconunagaleríade comentariosysereproduceelcomentarioactualporelaltavoz ActoresUsuarioanónimo,usuarioregistrado Incluye MostrarvistadeRA,descripcióndelpuntoylagaleríade comentarios Nivelde prioridad Secundario DatosentradaTextocomentariosactual. Precondiciones Laaplicaciónmuestralacapacorrespondienteconalmenosun elementoyladescripcióndeunodelospuntos FlujoNormal 1. Elusuariohaseleccionadounelementosobrelavistacuando haaparecidoensucampodevisiónaumentada 2. Laaplicaciónhamostradoenpantallaladescripcióndel elemento 3. Elusuarioseleccionaelbotóndecomentarios 4. Secargaotrapantalladondeapareceránlascomentarios 5. Sedescarganloscomentariosrelacionadosalpuntodel servidor 6. Elusuarioseleccionaelbotóndereproduccióndetexto 7. Seleetodoeltextodelcomentario Flujo Alternativo Sinosepuedenreproducirapareceunmensajedeerror Post‐ condiciones Apareceunanuevapantallaconunagaleríadelascomentarios disponibles ExcepcionesLaaplicaciónnopuedeleerloscomentarios
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 126 10 ApéndiceB 10.1 CiclodevidadelasaplicacionesAndroid ElciclodevidadeunaAPPenAndroidincorporadiferentesestadosquedeben conocerseparaunmejoraprovechamientodelsistema.Paraellolainformación obtenidadeTeletika[25]ayudaasumejorentendimiento. Figura45:Ciclodevidadeunaaplicación
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 127 10.1.1 Estadosenelciclodevida Activa(Running):estálaprimeraenlapiladeejecución,elusuariovela actividadypuedeinteractuarconella. Pausada(Paused):hapasadoasegundoplanoenlapiladeejecución,peroaun siguedisponibleparafuturasllamadas.Enestecaso,elsistemaeselúnicoquepuede terminarestaactividadsisusrecursosquedanlimitadosyotrasactividadeslos requieren. Parada(Stopped):hapasadoasegundoplanoyotraactividadseestá ejecutandoenprimerplano,denuevoelsistemapuedeeliminarlaencasodeversus recursoslimitados. Destruida(Destroyed):yanoestádisponibleenlapiladeejecución,sus recursoshansidoliberadosyenelcasodeserllamadadenuevodeberáempezarun nuevociclodevida. 10.1.2 Métodosutilizadosenelciclodevida onCreate():sellamaalcrearlaactividadyenélsepreparalainterfazgráficade lapantalla.Trasestafunción,elprocesosobreelqueseejecutalaActividadnopuede serdestruidoporelsistema.ElsiguientemétodoquesellamaesonStart(). onRestart():sellamacuandounaactividadquesehabíaparadovuelveaestar activa,justoantesdequecomiencedenuevo.TrasellasellamaaonStart()ysu procesonopuedeserdestruidonidurantenitrassuejecución. onStart():seejecutajustoantesdequelaaplicaciónseavisiblealusuario.El siguientemétododeciclodevidallamadoseráonStop()uonResume(),dependiendo delasituación. onResume():seejecutaenelmomentoenquelaactividadseencuentraenla partesuperiordelapila,justoantesdequeelusuariopuedainteractuarconella.El siguientemétodoseráonPause().
AplicaciónAndroidconRealidadAumentadayGeolocalización JoseMªMartinezLechón 128 onPause():sellamacuandolaactividadvaaserpasadaaunsegundoplanode ejecuciónyalmacenadaenlaPila,portantosellamacuandosellamealonRestart()de otra.Enestemétodosedebeaprovecharparaliberartodoaquelloqueconsume recursos(paramúsica,detenerprocesos…)oguardardatosdemanerapersistente.No podrácontenertareaslentasyaquehastaquenotermineestemétodonopodrá ejecutarseelonResume()delanuevaactividad.ElmétodosiguienteseráonResume()u onStop(). onStop():seejecutacuandolaactividadsehaceinvisiblealusuario.Puedeser porqueotraactividadesteenprimerplanoyentonceselsiguientemétodoserá onRestart()oporquelaactividadhayasidodestruida,llamadoacontinuacióna onDestroy(). onDestroy():sellamaantesdedestruirlaactividad.Duranteladestrucciónde laactividadseperderántodoslosdatosasociadosaellaporloqueenestemétodo podráserutilizadoparacontrolarlapersistenciadedatos.Sellamarácuandose ejecutaelmétododefinalizaciónfinish()sobrelaactividadoporqueelsistemaelimina laactividadparaconseguirmásrecursos.