Full text
1
2
ESCUELATÉCNICASUPERIORDEINGENIERÍAINFORMÁTICA INGENIERÍADELSOFTWARE SOFTWAREPARAPACIENTEDEENFERMEDADPULMONAR OBSTRUCTIVACRÓNICA SOFTWAREFORCHRONICOBSTRUCTIVEPULMONARY DISEASEPATIENTS Realizadopor DiegoNarbonaVílchez Tutorizadopor JoséMaríaÁlvarezPalomo Departamento deLenguajesyCienciasdelaComputación UNIVERSIDADDEMÁLAGA MÁLAGA, julio2016 Fechadefensa: ElSecretariodelTribunal 3
4
Resumen: DesarrollodeunaaplicaciónparaAndroidconlaintencióndemejorarlaadherenciadel pacientealtratamientodeEPOC(EnfermedadPulmonarObstructivaCrónica)quesu médicoleasigne,asícomosuseguimientoporpartedelosallegadosalpaciente.La aplicacióncuentacondosáreas: ● Eláreadelpersonalsanitariolacualpermitelapersonalizacióndeltratamiento delpaciente,asícomolaintroducciónyconsultasdelosanálisisyespirometrías deéste. ● Eláreadelpacienteenlacualpuedeconsultarmedianteuncódigodecoloresen unsemáforoeltratamientoquelehasidoasignado,posibilidaddellamaral112, llamaralcuidador,consultarlamedicaciónderescate,leerconsejossobre ejerciciosarealizar,consejossobreladieta,consultarestadodecitasy visualizacióndetutorialesdeusodelosinhaladoresquetengaasignados. Durantetodoelprocesodelacreacióndelaaplicaciónsehaseguidounametodología iterativayademássehacontadoconunclienterealquehaexpresadosusnecesidadesy delascualessehaextraídolosdocumentosderequisitosnecesariosparala implementacióndefuncionalidadesquecontienelaaplicación.Laaplicaciónhasido desarrolladaapartirdefuentesdeinformaciónproporcionadasporpersonalsanitario especializado. Palabrasclaves: APP,Android,EPOC,Enfermedad,Pulmonar,Obstructiva,Crónica,Iterativa, Especializado,Salud Summary: ThedevelopmentofanapplicationforAndroidwhichaimstohelppatientsfollowthe treatmentforChronicobstructivepulmonarydisease(COPD)prescribedbytheirdoctor aswellasallowingtheirnextofkinthepossibilityofmonitoringtheirevolution.The applicationhastwoareas: ● Thedoctors’areawhichallowsthemtocustomizethepatient’streatment,aswellas introducingandconsultingtheanalysisandspirometries. ● Thepatient’sareainwhichtheyareabletoconsult,usingatrafficlightcolourcode, thetreatmenttheyhavebeenassigned,aswellasthepossibilityofcallingthe emergencyservices,callingtheirassistant,checkingtheemergencymedication required,readingtheadviceaboutphysicalexercise,checkingadviceaboutdiet, consultingfutureappointmentsandviewinginhalatortutorials. Duringthecreationofthisapplicationarecurrentmethodhasbeenusedandwehavetaken intoaccounttheneedsexpressedbyarealclientfromwhomwehaveobtainedthe documentswiththenecessaryrequirementstoimplementthefunctionscontainedinthe application.Wehavecreatedtheapplicationbasedoninformationobtainedfromspecialized sanitarystaff. Keywords: APP,Android,COPD,Disease,Pulmonary,Obstructive,Chronic,Recurrent,Specialized, Health 5
Índice Introducción……………………………………………………………………………. 7 Tecnologíasutilizadas………………………………………………………………….. 7 Estructuradelamemoria………………………………………………………………. 10 1. Primeraparte……………………………………………………………………... 11 1.1. Sistemaparaverlosmanualesdeinhaladoresymanualesdefisioterapia.. 11 1.2. Listadodemanualesytratamiento……………………………………….. 13 ■ Consultassqlparaconsultarinhaladoresasociadosaltratamiento, obtencióndelospasosdelosmanuales,obtencióndeltratamiento completodelusuario. 1.3. Creacióndealgunasentidadesdepersistencia……………………………. 17 1.4. Creaciónalarma(Conjunto)......................................................................... 18 ■ Receiversdelasalarmas,parasuactualización. ■ Receiverpararefrescodelasalarmasalreiniciarelmóvil ■ Sonidoenlasalarmas. 1.5. Protecciónporcontraseñacifradadeláreadelpersonalsanitario………... 22 1.6. Interfazmenúprincipalconiconos……………………………………….. 23 1.7. Creación,eliminaciónylistadodecitas………………………………….. 24 1.8. Permisosdelaaplicaciónentiempodeejecución………………………... 26 1.9. Cargaenmemoriademaneraeficientelasimágenesparaunacorrectafluidez deloslistView…………………………………………………………….. 29 1.10. PatrónviewHolderenloslistView………………………………………... 30 1.11. ActivacióndesactivacióndeSMSs……………………………………….. 32 2. Segundaparte……………………………………………………………………… 33 2.1. Creación,consultaymodificacióndeanálisisdelpaciente……………….. 33 2.2. Consejosparaladietadelpaciente…………………………………………34 2.3. OrdenacióncronológicadeloslistView……………………………………35 2.4 Desarrolloiterativo………………………………………………………… 36 3. Conclusiones………………………………………………………………………. 38 6
Introducción: Motivación: LaaplicaciónsurgiócomorespuestaalretopresentadoporlaConsejeríadeSaludyla ConsejeríadeEmpleo,EmpresayComerciodelaJuntadeAndalucía,encolaboracióncon Vodafone,comoayudaaltratamientodeEPOCatravésdeunaaplicaciónmóvil. Objetivos: LaintencióndeestaappesmejorarlaadherenciadelpacientealtratamientodeEPOCquesu médicolehaasignado,asícomosuseguimientoporpartedelosallegadosalpaciente. Características: Durantetodoelprocesodelacreacióndelaaplicaciónsehaseguidounametodología iterativayademássehacontadoconunclienterealquehaexpresadosusnecesidadesy delascualessehaextraídolosdocumentosderequisitosnecesariosparala implementacióndefuncionalidadesquecontienelaaplicación. LaApphasidodesarrolladaapartirdefuentesdeinformaciónproporcionadasporpersonal sanitarioespecializado:todalainformaciónincorporadaestábasadaendatosypautasreales acercadeEPOC. Estaaplicaciónpreservalaprivacidaddelainformaciónregistrada:seaplicalaseguridad lógicaentornoalosdatosqueestánsometidosalaleydeproteccióndedatosvigentes. Tecnologíasusadas: ●Android[1]:EsunsistemaoperativobasadoenelnúcleoLinux.Fuediseñado principalmenteparadispositivosmóvilesconpantallatáctil,comoteléfonos inteligentes. Androidsetratadeunsistemaabierto,multitarea,quepermitealosdesarrolladores accederalasfuncionalidadesprincipalesdeldispositivomedianteaplicaciones, cualquieraplicaciónpuedeserreemplazadalibremente,ademásdesarrollarlaspor terceros,atravésdeherramientasproporcionadasporGoogle,ymediantelos lenguajesdeprogramaciónJavayC. 7
●SQLite[2]:SQLiteesunsistemadegestióndebasesdedatosrelacionalcompatible conACID(Atomicidad,Consistencia,AislamientoyDurabilidad).Unadesus principalescaracterísticasesquelabasededatoscompletaseencuentraenunsolo archivo. ●Java [3]: Java es un lenguaje de programación de propósito general,concurrente, orientado a objetos que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquierdispositivo. ●XML[4]:XML,siglaseninglésdeeXtensibleMarkupLanguage("lenguajede marcasExtensible"),esunlenguajedemarcasdesarrolladoporelWorldWideWeb Consortium(W3C)utilizadoparaalmacenardatosenformalegible.Eslabasedelas interfacesgráficasenelsistemaoperativoAndroid. ●SQLCipher[5]:SQLCipheresunaextensiónopensourcedeSQLitequeproporciona cifradoAES256bitparaarchivosdebasededatos.SQLCipherposeeungran rendimientoasíqueesidealparabasededatosembebidaseidóneoparaentornos móviles. ●GIT[6]:EsunsoftwaredecontroldeversionesdiseñadoporLinusTorvalds, pensandoenlaeficienciaylaconfiabilidaddelmantenimientodeversionesde aplicacionescuandoéstastienenungrannúmerodearchivosdecódigofuente. Entrelascaracterísticasmásrelevantesseencuentran: ●Fuerteapoyoaldesarrollonolineal,porenderapidezenlagestiónderamasy mezcladodediferentesversiones.Gitincluyeherramientasespecíficaspara navegaryvisualizarunhistorialdedesarrollonolineal.Unapresunción fundamentalenGitesqueuncambioseráfusionadomuchomásfrecuentemente deloqueseescribeoriginalmente,conformesepasaentrevariosprogramadores quelorevisan. ●Gestióndistribuida.AligualqueDarcs,BitKeeper,Mercurial,SVK,Bazaary Monotone,Gitledaacadaprogramadorunacopialocaldelhistorialdel desarrolloentero,yloscambiossepropaganentrelosrepositorioslocales.Los cambiosseimportancomoramasadicionalesypuedenserfusionadosenlamisma maneraquesehaceconlaramalocal. 8
●BitBucket[7]:Bitbucketesunserviciodealojamientobasadoenweb,paralos proyectosqueutilizanelsistemadecontroldeversionesMercurialyGit. ●SourceTree[8]:Aplicacióndeescritorioquepermitetrabajardeunamanerarápiday visualconrepositorioslocalesyremotosdeGIT.Agilizalasoperacionesyaqueno hayquememorizarloscomandosdeGIT. ●AndroidStudio[9]:AndroidStudioesunentornodedesarrollointegradoparala plataformaAndroid. Características: ●Renderizaciónentiemporeal ●Consoladedesarrollador:consejosdeoptimización,ayudaparalatraducción, estadísticasdeuso. ●SoporteparaconstrucciónbasadaenGradle. ●RefactorizaciónespecíficadeAndroid. ●HerramientasLintparadetectarproblemasderendimiento,usabilidad, compatibilidaddeversiones,yotrosproblemas. ●PlantillasparacreardiseñoscomunesdeAndroidyotroscomponentes. ●SoporteparaprogramaraplicacionesparaAndroidWear. ●Slack[10]:SlackesunaherramientadecomunicaciónenequipocreadaporStewart Butterfield,EricCostello,CalHenderson,ySergueiMourachov.Slackofrecesalasde chatorganizadasportemas,asícomogruposprivadosymensajesdirectos.Poseeun cuadrodebúsquedaquepermiteaccederatodoelcontenidodelaaplicación.Slack integraunagrancantidaddeserviciosatercerosyrespaldalasintegracioneshechas porlacomunidad.Lasprincipalesincorporacionesincluyenserviciostalescomo GoogleDrive,Dropbox,Heroku,Crashlytics,GitHubyZendesk.Algunasfuentes piensanqueSlackestaninnovadorquereemplazaráaIRCalgúndía. 9
Agrupaciónporhoras: Elsistemaparaagruparporhorasquesehautilizadoeselsiguiente: 1Sehaordenadoporordenhorariolastomas. 2Enellayouttodaslasfilasdelalistacontienenunseparadorquesemuestraoseoculta segúnlasiguientelógica. 3Sieslaprimeraposicióndelalistaapareceelseparadordelahora. 4Sinoeslaprimeraposiciónsecompruebaelelementoanteriordelalista,siesigual,nose añadeelseparador,siesdistintoseañadeelseparador. 16
1.3Creacióndeentidadesdepersistencia Duranteeldesarrollodelaaplicaciónsehamapeadolastablasdelabasededatosenclases javaparafacilitarsuutilizaciónenelcódigo. Enlasimágenesqueseencuentranenelanexo(Páginas41,24)sepuedeobservarla estructurageneraldelabasededatosdelaaplicacióncompleta. Entidades: Treatment:Eltratamientoquetendráasignadoelpaciente,enelseencuentranlastomasque elpacientedeberátomarse.Lasopcionesdeampliaciónfuturassonmuyampliasyaque permitiráalpacientetenervariostratamientossegúnlasenfermedadesquetenga. Take:Latomaqueelpacientedebesuministrarse,tendráasociadoelinhalador,el medicamentoyelprincipioactivoasociadoqueelmédicolehaindicado. Inhaler:Representarálosinhaladoresquelaaplicacióntienealmacenados. ActiveIngredient:Principiosactivos. Medecine:Medicamentos. Medecine_Presentation:Relaciónexistenteentreelmedicamentoyelprincipioactivo,se utilizaparafiltrarlaslistasdesplegablesenlaseleccióndeltratamiento. UserManualStep:Representaunpasoenunmanualdeusuario. Analysis:Representarálosdatosdeunanálisisqueelusuariosehayarealizado. Spirometries:Representarálosdatosdeunaespirometríaqueelusuariosehayarealizado. PatientPersonalData:Almacenarálosdatospersonalesdelusuario. Rescue:Medicaciónderescatequeelpacientedeberásuministrarseencasodecrisis. Appointment:Almacenarálascitasmédicasdelasquedispongaelusuario. 17
1.4Creaciónalarmas: Lacreacióndealarmasenelmomentodelacreacióndelastomasyelcambiodeestadodel semáforohansidorealizadaenconjuntoconmicompañeroSergioSánchezGil. Laaplicacióndisponedeunsistemadealarmasquepermitealusuariorecordarlecuándo debetomarsesumedicación,estaalarmasecreaautomáticamenteenelmomentoqueel médicocrealastomas. Unavezlaalarmasuena,selanzaunaactividadqueenprimerlugarpreguntasiquiere realizarlatomaoposponerla,sideseaposponerla,pulsaráenelbotón“posponer”yel sistemamoveráesamismaalarma15minutosmástarde(hastaunmáximode3veces),si desearealizarlasimplementesepulsasobreelbotón“ok”,sipulsasobreelbotón“ok”se crearálamismaalarmaaldíasiguiente. Unavezmarcadosiqueremosrealizarlatoma,apareceunlistadoconlastomasdel tratamientoqueelpacientesedebetomaralahoraquesonólaalarma,enestalistaapareceel medicamentoquedebedetomarelpacienteasícomoelnúmerodeinhalacionesquedebe realizar,sielpacientepulsasobrelaimagendelinhaladorseráredirigidoalmanual correspondienteaeste,unavezfinalizadalatomasimplementeelpacientedebemarcarel checkboxcorrespondientealastomasqueharealizadoypulsarenfinalizar. 18
Laposibilidaddemarcarmedianteuncheckboxsielpacienteharealizadoonolatomaesde vitalimportanciaparaelseguimientodeltratamiento,yaque,alteraráelestadodelsemáforo deseguimientoqueseencuentraenelmenúprincipal. Elsemáforodispondráde3estados: Verde:Sielpacienteharealizadotodaslastomasquelecorrespondíahoy. Ámbar:Sielpacienteharealizadoalgunastomasquelecorrespondíahoyyademás lefaltanalgunasporrealizar. Rojo:Sielpacientenoharealizadoningunatomaquelecorrespondíahoy. Elestadodelsemáforoesreseteadotodoslosdíasalas23:59,paraello,enelmomentoque secreantodaslasalarmastambiénsecrealaalarmadereseteo. Otradelascaracterísticasquehansidoincluidasenlafuncionalidaddelasalarmasesla inclusióndeunanotificaciónsonoraparaalertaralusuariodequedeberealizarlatomaquele corresponde. Implementación: ElelementoprincipaldelasalarmasenAndroidsonlosreceivers,unBroadcastReceiveres elcomponentequeestádestinadoarecibiryresponderanteeventosglobalesgeneradosporel sistema,comounavisodebateríabaja,unSMSrecibido,unSMSenviado,unallamada,un 19
avisodedelatajeaSD,etc.ytambiénaeventosproducidosporotrasaplicacionescomopor ejemplounaalarmageneradoporunaaplicación. Enestaaplicaciónsehaceusode3receivers. 1erReceiver:AlarmReceiver,estereceiverseráelencargadoderecibirlasalarmasdelas quelaaplicacióngenere. 2doReceiver:ResetTakesReceiver,estereceiverseráelencargadoderecibirlaactividad queresetealastomasalas23:59decadadía. 3erReceiver:AlarmOnBootReceiver,estereceiverseráelencargadoderecibireleventodel sistemaqueindicaqueelmóvilhaterminadodeiniciarse,seutilizapararefrescarelestado detodaslasalarmasunavezsereiniciaelmóvil,hacefaltaañadirunaslíneasenelarchivo androidmanifestparapoderrealizarestafunción. <usespermissionandroid:name="android.alarm.permission.SET_ALARM"/> <usespermission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name=".alarms.AlarmOnBootReceiver" android:enabled="true"> <intentfilter> <actionandroid:name="android.intent.action.BOOT_COMPLETED"/> </intentfilter> </receiver> Androidagrandesrasgosdiferencia2tiposdealarmas,lasalarmasexactasylasalarmas inexactas: ● Lasalarmasexactascomosupropionombreindicasonaránenelmomento exactoqueleindiquemos,estohacequeelsistemaoperativoestésiempre esperandoadichaalarmayestopuedeprovocarproblemasdebateríasise abusa. ● Lasalarmasinexactas,quepuedenonopuedensonarenelmomentoexacto queleindiquemos,estoesdebidoaqueelsistemaoperativointentaráagrupar variasalarmasparaqueseanlanzadasalavezyasíevitarunconsumo innecesariodebatería. 20
Ennuestraaplicaciónesnecesarioutilizarelsistemadealarmasexactasyaquenopodemos dependerdelsistemaparaqueelpacientepuedarealizarelsuministrodemedicaciónquele corresponde. Calendaralarm=Calendar.getInstance (); alarm.set(Calendar.HOUR_OF_DAY ,hora); alarm.set(Calendar.MINUTE ,min); alarm.set(Calendar.SECOND ,0); alarm.add(Calendar.DAY_OF_MONTH ,1); if(Build.VERSION.SDK_INT <Build.VERSION_CODES.KITKAT ){ System.out .println("Alarm"+id+"issetat"+alarm.getTime()); alarmManager.set(AlarmManager.RTC_WAKEUP ,alarm.getTimeInMillis(), pendingIntent); }else{ System.out .println("Alarm"+id+"issetat"+alarm.getTime()); alarmManager.setExact(AlarmManager.RTC_WAKEUP ,alarm.getTimeInMillis(), pendingIntent); } Enesteejemplopodemosobservarlacreacióndeunaalarma,podemosdiferenciardistintas partes: 1Objetocalendar,utilizandoesteobjetopodemosseleccionarlafechaylahoraque queremosquelaalarmasuene,unavezintroducidoslosdatossimplementedeberemosllamar almétodoalarm.getTimeInMillis()quenosdevolverálahoraseñaladaenelcalendarioen milisegundos(lasalarmasfuncionaenmilisegundos). 2(Build.VERSION.SDK_INT <Build.VERSION_CODES.KITKAT )estalíneadelcódigo fuenecesariaintroducirlaporelcambioquerealizógoogleeneltratamientodelasalarmas dependiendodelaAPIenlaqueseejecutalaaplicación,sielsistemausaunaversióninferior aKITKAT,lacreacióndealarmasexactasserealizaráconlafunciónalarmManager.set(... estocrearáunaalarmaexactaenelmomentoqueleseaindicado,perolosdispositivosque utilizanunaversióndelsistemaoperativosuperioroigualaKITKATdebenutilizarel métodoalarmManager.setExact(...yaquesiutilizaranelmétodoanteriorsecrearíauna alarmainexacta. 3pendingIntent,cuandolaalarmasueneseejecutarálaactividadqueseaasignadaaese Intent. 21
1.5Protecciónporcontraseñacifradadeláreadelpersonalsanitario Estaaplicaciónalcontartantoconeláreadelmédicocomoconeláreadelpacientees necesarioprotegerlapartedelmédicoparaevitarmodificacioneseneltratamientode informacióndelicadacomoanálisisyespirometrías. Laprimeravezqueseinstalalaaplicación,éstasolicitaalusuarioqueintroduzcauna contraseñaparaprotegereláreamédica,estacontraseñaesalmacenadaenlasshared preferencesrealizándoleunHASHSHA1previamente. SharedPreferencesprefs= getSharedPreferences("myPrefs", Context.MODE_PRIVATE ); SharedPreferences.Editoreditor=prefs.edit(); Stringpass=SHA1 (ts); editor.putString("contrasena",pass); editor.putBoolean("sms",false); editor.commit(); Comosepuedeobservarsesolicitaqueseintroduzcalamismacontraseñadosvecespara evitarproblemasalintroducirla. 22
1.6Interfazmenúprincipalconiconos Lainterfazdeestaaplicaciónhasidodiseñadoconelobjetivodequefueraamigableparael usuarioyalmismotiempofueraválidaparapersonasquepuedantenerproblemasenlavista, esporelloquesehanutilizadoiconosgrandeconuntextoexplicativodebajo. Todoslosdibujoshansidohechosamanoparaquelainterfazfueralomáscercanaal usuario. 23
1.7Creaciónylistadodecitas Unadelasfuncionalidadesdelaaplicacióneslaposibilidaddealmacenarcitasquetengael pacienteenelfuturo.Cuandosevayaaguardarunacitatenemoslaposibilidaddeseleccionar eldíaquesevaarealizarlacita,lahora,porquienvaaseratendidoelpaciente,la especialidadalaqueperteneceelfacultativoquelevaatender,eltipodepruebasquelevan arealizartantodiagnósticascomodevaloración. Noesposiblecumplimentarunacitasitodosloscamposnoestánrellenosasíelpacientese aseguradequehaintroducidocorrectamentelacita.Cuandolacitaestáguardadaelsistema calculamedianteunobjetocalendareldíadelasemanaquecorrespondelafechaintroducida, parafacilitaralpacientelavisualizacióndelascitas. 24
Sehaintroducidounafuncionalidadvisualquepermitiráintroducirlahoradelacitadeuna maneramuyrápidaeintuitiva. publicstaticclassTimePickerFragmentextendsDialogFragment implementsTimePickerDialog.OnTimeSetListener{ @Override @NonNull publicDialogonCreateDialog(BundlesavedInstanceState){ //Usethecurrenttimeasthedefaultvaluesforthepicker finalCalendarc=Calendar.getInstance (); inthour=c.get(Calendar.HOUR_OF_DAY ); intminute=c.get(Calendar.MINUTE ); returnnewTimePickerDialog(getActivity(),this,hour,minute, DateFormat.is24HourFormat (getActivity())); } 25
1.11ActivacióndesactivacióndeSMSs. Unadelascaracterísticasmásinteresantesdelaaplicacióneslaposibilidaddemantener actualizadoalcuidadorinformal(entiéndasepareja,familiar)delprogresodeltratamientodel paciente,utilizandoelmétododelosmensajesdetexto,enelmomentoquelaalarmasuena pararealizarlatomaquelecorrespondealpacientelaaplicaciónenviaráunmensajedetexto indicandoqueelpacientedeberealizarlatoma. Estafunciónestádesactivadapordefectoypuedeseractivadaydesactivadasiemprequese desee,sepermiteestaposibilidadyaquelosmensajesdetextopuedenacarreargastos económicosyelobjetivodeestaaplicaciónesnoproducirningúngasto. 32
2daIteración 2.1Creación,consultaymodificacióndeanálisisdelpaciente Unadelasfuncionalidadesqueofreceestaaplicaciónalpersonalsanitarioeslaposibilidad dellevarunregistrocronológicodelosanálisisqueseharealizadoelpacienteparacontrolar elestadodesuEPOC. Unafuncionalidadmuyinteresanteyaquepermitiráobservarlaevolucióndelosparámetros relacionadosconlaEPOC. Losdatosquesepuedenalmacenarson:colesterol,tiroides,hemoglobina,triglicéridos, hematocrito,glucosaycreatinina. 33
2.2Consejosparaladietadelpaciente LaaplicacióncontieneungrannúmerodeconsejosquepermitiráalaspersonasconEPOC seguirunadietaadecuadaasuenfermedad.Losconsejosintroducidosenlaaplicaciónhan sidosuministradosporpersonalsanitarioespecializado. 34
2.3OrdenacióncronológicadeloslistView SehaintroducidolaordenacióndelosListViewquecontenganfechasporordencronológico yaquepermitiráobservardemaneramuchomásclaraculascitaspasadasyfuturas. SeharealizadounaimplementacióndelmétodocompareToparaasípoderrealizarunsortal ArrayListquecontienelosobjetosaordenar. publicintcompareTo(Analysisanalysis){ if(Integer.parseInt (this.getAño())>Integer.parseInt (analysis.getAño())){ return1; }elseif(Integer.parseInt (this.getAño())<Integer.parseInt (analysis.getAño())){ return1; }else{ if(Integer.parseInt (this.getMes())>Integer.parseInt (analysis.getMes())){ return1; }elseif(Integer.parseInt (this.getMes())<Integer.parseInt (analysis.getMes())){ return1; }else{ if(Integer.parseInt (this.getDia())>Integer.parseInt (analysis.getDia())){ return1; }elseif(Integer.parseInt (this.getDia())<Integer.parseInt (analysis.getDia())){ return1; }else{ return0; } } } } 35
2.4Desarrolloiterativo Durantetodoeldesarrollodelaaplicaciónseharealizadoundesarrolloiterativoenelcualse hechotantolastareasdeanalistacomodeprogramador,sehanmantenidoreunionesconla clientarealenlascualessehanrealizadolatomaderequisitos,deloscualessehancreado loscasosdeusoyelbocetodelasinterfaces,estasinterfaceshansidomostradasalaclienta paraquedierasuvistobueno.Durantetodoesteprocesoselehanentregadoversiones funcionalesdelaaplicaciónparaquesiguierasudesarrolloypudieradetectarposibleserrores queexistieran. Sehanrealizado5iteraciones,delascualeslas4primeraselequipodeIngdelaSaludtomó elpapeldeanalistayelequipodeIngdeSoftwareelpapeldeprogramador,yenlaúltimael equipodesoftwarehatomadotantoelpapeldeprogramadorcomoeldeanalista Enlasdistintasiteracionessehandesarrolladolassiguientesfuncionalidades: Enlaprimeraiteración,seimplementaronlasfuncionalidadesde: •Consultarmanualdeusuariodeuninhalador. •Consultartratamiento(listadodetomas). •Crearunatoma. •Consultarunatoma. •Borrartomas. •CreaciónBasedeDatos. Enlasegunda: •Visualizacióndelsemáforo. •Alarmadeavisodetoma. •Añadidoacercadedelaaplicación. •Fixesiteraciónanterior. Enlatercera: •FisioterapiaRespiratoria. •ConsultarycreartratamientodeRescateyrecomendaciones. •Llamaralteléfonodeemergencia. •CRUDdatosdelpaciente. •Llamaralteléfonodelcuidador. •Fixesiteraciónanterior. 36
Enlacuarta: •Crearcitaconpersonalsanitario. •Consultarcitas. •Protecciónporcontraseñaáreadelpersonalsanitario. •ActivaciónydesactivacióndeenvíodeSMS. •Actualizacióninterfazgráfica Enlaquinta: •CRUDanálisis. •Consejossobrelasdietas. •Edicióndelastomas. •CRUDespirometría. •Guíaparadejardefumar. 37
2.5Conclusiones Elobjetivoprincipalquepretendíacumplirestaaplicacióneramejorarlaadherenciadel pacientealtratamientodeEPOCquesumédicolehaasignado,asícomosuseguimientopor partedelosallegadosalpaciente. Creemosqueestaaplicaciónhaalcanzadosatisfactoriamenteesteobjetivo,yaquepermitirá alpacientecontrolarsuenfermedaddeunamaneramuchomásefectivagraciasalacantidad defuncionalidadesqueestaaplicaciónleofrece,ademásdeesteobjetivohemosconseguido quelaaplicaciónseacompatibleconlagranmayoríadeteléfonosmóvilesAndroidactuales. LaversiónmínimaquepuedeutilizarestaaplicacióneslaAPI14,asíque,podránutilizarla aplicaciónun97,9%delosdispositivosandroidqueexistenenelmercadoactual. Otradelascaracterísticasquehaalcanzadoestaaplicacióneslaaccesibilidadque proporcionaaaquellaspersonasquetenganalgúntipodeimpedimento,yaseavisualode otrotipo,estoesdebidoaquesehabuscadoentodomomentolautilizacióndefuentesdeun tamañoelevado,imágenesrepresentativasyamigables,tambiénsehanañadidoalos tutorialeslaposibilidaddequeelmóvilreproduzcalostextos,centradoparalaspersonasque tenganproblemasenlavisión. 38
Lasposibilidadesdeampliacióndeestaaplicaciónsonmuyelevadas,yaque,podríaser utilizadaparamejorarlaadherenciaauntratamientodeunpacientedecualquiertipode enfermedad,simplementeharíafaltaintroducirlosmedicamentosqueseannecesariospara esaenfermedadasícomolostutorialesdeusodeestos.Ademáslaestructuradelabasede datospermitiráelusosimultáneodedistintostratamientosyperfilesdeusuario,porloque unafamiliapodríautilizarunsolodispositivo(Ejemplo:unatablet)parallevaracaboel controldeltratamientodetodoslosmiembrosdelafamilia. 39
Bibliografía [1]https://www.android.com/intl/es_es/ [2]https://www.sqlite.org/docs.html [3]https://docs.oracle.com/javase/7/docs/api/ [4]http://www.w3.org/XML/ [5]https://www.zetetic.net/sqlcipher/documentation/ [6]https://gitscm.com/documentation [7]https://confluence.atlassian.com/bitbucket/bitbucketclouddocumentationhome221 448814.html [8]https://www.sourcetreeapp.com [9]https://developer.android.com/studio/index.html [10]https://slack.com [11]https://developer.android.com/training/improvinglayouts/smoothscrolling.html [12]https://developer.android.com/training/displayingbitmaps/loadbitmap.html 40
Anexoconestructuradelabasededatos. 41