96
Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco Delgado Palacio Tutors: Albert Grau Perisé/Jordi Almirall López

Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco Delgado Palacio Tutors: Albert Grau Perisé/Jordi Almirall López

Page 2: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 1 de 95

Index

1. Introducció al projecte …………………………………………....3

2. Motivació i objectius.………….……………………………………4

3. Planificació del projecte ……………………………..…………….5

4. Presentació de HomeMobile

4.1 Situació actual de la companyia…………………………7

4.2 Necessitat del projecte ……………………………………8

4.3 Objectius del projecte ……………………………………..9

5. Disseny funcional

5.1 Requeriments ………………………………………………11

5.2 Perfil d'usuaris - casos d'ús ……………………………..13

5.3 Model de dades …………………………………………….21

5.4 Arquitectura del projecte …………………………………24

5.5 Disseny del flux de navegació ………………………………….25

6. Implementació del projecte

6.1 Configuració de l'entorn de desenvolupament ... ........26

6.2 Component AndroidManifest.xml ................. ................27

6.3 Components principals-Layouts/Activities ...... ............29

6.4 Integració amb Parse .......................... ............................52

6.5 GoogleMaps API v2 ............................. ............................58

6.6 Altres funcions importants : Fotografia i signa tura .....63

Page 3: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 2 de 95

7. Conclusions i visió de futur ………………………………………70

8. Bibliografia & Webgrafia …………………………………………..72

9. Anex: Manual d'usuari ……………………………………………..74

Page 4: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 3 de 95

1. Introducció al projecte Les noves tecnologies dirigides als dispositius mòbils, han obert portes a una infinitat d’aplicacions per tot tipus d’utilitats i serveis. Des d’un simple entreteniment, fins a potents eines de treball d’enfoc professional. Els dispositius mòbils han anat evolucionant des dels primers telèfons, senzills i sense cap tipus de plataforma intel·ligent o sistema operatiu integrat ; posteriorment van arribar els primers smartphones o telèfons intel·ligents, els quals ja disposaven d’un sistema operatiu, bàsic inicialment. L’arribada del iPhone de Apple va produir una inflexió en aquest món mòbil, el telèfon passava a ser un dispositiu intel·ligent amb un potent sistema operatiu integrat amb infinitat d’aplicacions i funcions, entre elles el poder accedir a Internet, funció que va revolucionar completament les aplicacions d’aquests dispositius. Nous dispositius mòbils iniciaven la seva història dins el context global d’evolució tecnològica constant, i del creixent mercat d’usuaris, ansiosos d’experimentar amb nous dispositius. Les tabletes són un clar exemple d’aquest fet. Dins aquesta ràpida evolució dels dispositius, existeix una altra evolució constant no menys important que integra tot el software extern o integrat dins els dispositius mòbils. El software clau al dispositiu és el que engloba tot el seu sistema operatiu. El sistema operatiu Android, creat per Google específicament per dispositius mòbils, basat en un nucli Linux i per tant OpenSource, ha acabat de convertir-se en la plataforma escollida per la gran majoria d’empreses i particulars i és actualment el sistema operatiu amb més projecció i mercat. Aquest projecte de final de carrera hem permetrà aprofundir en aquest potent i a la vegada entretingut món dels dispositius mòbils en general i de la plataforma Android en particular.

Page 5: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 4 de 95

2. Motivació i objectius del projecte

Amb més de cinc anys treballant professionalment dins de projectes de mobilitat, majoritàriament en l’àmbit de les PDA, amb sistema operatiu Windows Mobile i software basat en programació c++ , veig que el sector inicia el seu particular èxode cap a plataformes més obertes i flexibles. En aquest punt, les tabletes basades en SO Android s’estan convertint en els dispositius estrella de la mobilitat en l’àmbit professional. És clara per tant la meva motivació en la realització d’un projecte Android enfocat en tabletes. Iniciar l’aprenentatge d’aquest entorn, i adquirir el coneixement bàsic necessari per tal de poder portar a terme la implementació d’un projecte en aquesta plataforma. I, amb una visió més de futur professional, tenir una base prou bona i sòlida com per poder participar en projectes en aquest àmbit. Amb aquesta motivació, un dels objectius bàsics del projecte és assolir una aplicació per dispositius mòbils, que integri una visió professional més que una visió enfocada a l’entreteniment. Un altre objectiu, serà que aquesta implementació ens serveixi de base per a una gran aplicació futura, “la llavor” d’un gran projecte, per què no, amb perspectiva comercial i objectius professionals. El projecte escollit l’anomeno HomeMobile, i és una aplicació de mobilitat enfocada per tabletes i per empreses d’assegurances de la llar. Hem centraré en una empresa model, que ens servirà de base per iniciar la nostre nova aplicació. Per què una aplicació enfocada en tabletes?. Principalment degut al meu àmbit professional. Com ja he comentat, he treballat principalment en projectes amb dispositius PDA amb Windows Mobile, però des de fa un any el nous projectes s’enfoquen en tabletes basades en Android. Aquest projecte és un bon moment per aprofundir en aquests dispositius. Això no vol dir que a futur no es pugui adaptar per altres dispositius mòbils com telèfons, però no serà la idea en l’àmbit del projecte. De fet, professionalment estic treballant amb tabletes Samsung Galaxy Note 10.1, i aquest serà el dispositiu “oficial” del projecte.

Page 6: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 5 de 95

Aquest dispositiu ens ofereix una amplia gama de possibilitats.Com a altres objectius bàsics del projecte intentarem integrar algunes d’aquestes funcions a la nostre aplicació. Com a funcions a integrar obligatòriament tindrem: -Funcions bàsiques d’aplicacions de mobilitat, creació i assignació de tasques. -Ús de Google Maps per la localització de tasques. -Integració de la càmera del dispositiu en les utilitats del projecte. -Integració i ús de l’escriptura digital que permet aquest dispositiu.

3. Planificació temporal del projecte El projecte s’ha planificat per tal d’implementar-se al llarg d’un quadrimestre, de febrer a juny, en diferents fases:

Tasques del projecte Tasca Inici Fi Hores Assignació i matriculació 21 febrer 21 febrer 1 Anàlisi Preliminar Pla de treball 1 març 8 març 5 Estudi de viabilitat 8 març 10 març 10 Aprovació Estudi de viabilitat 10 març 10 març 1 Anàlisi de requeriments Document d’anàlisi 11 març 14 març 15 Diagrama casos d’ús 15 març 15 març 6 Aprovació de l’anàlisi 17 març

17 març 1

Disseny funcional

Document del disseny funcional 18 març 24 març 80 Disseny de l’arquitectura i entorn de desenvolupament

18 març 24 març 5

Disseny del model de dades 18 març 24 març 15 Disseny de les pantalles 18 març 24 març 30 Disseny del pla de proves funcionals 18 març 24 març 10 Aprovació del disseny 24 març 24 març 1 Desenvolupament Instal·lació i preparació de l’entorn de desenvolupament.

25 març 1 abril 80

Desenvolupament de les funcionalitats de l’aplicació.

1 abril 20 maig 200

Proves funcionals

Page 7: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 6 de 95

Execució de proves funcionals 25 Abril 25 maig 40 Validació i aprovació de les proves funcionals.

26 maig 27 maig 1

Memòria del projecte I video-presentació 1 abril 9 juny 80 Tancament del projecte 10 juny 10 juny 1 Defensa del projecte-Consultes 24h 11 juny 11 juny 2

Page 8: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 7 de 95

4. Presentació de HomeMobile

4.1 Situació actual de la companyia

Home Insurance és una empresa d’assegurances de la llar, amb més de 50 anys d’història es troba en un moment de renovació tecnològica , per tal d’integrar les noves tecnologies a les seves operacions de negoci. Actualment, l’operativa es porta a terme bàsicament en paper. Cada matí, el responsable assigna unes intervencions als operaris dins una fulla de ruta, i cada intervenció planificada té el seu document on l’operari informa totes les dades de negoci necessàries. En el cas de rebre alguna incidència durant la jornada , el coordinador comunica via telefònica amb l’operari que per ruta i hora pugui estar més a prop del domicili de l’emergència. Una possible desviació de la ruta o de l’horari assignat comporta moltes vegades que no se li assigni la incidència a l’operari que es troba més a la vora.

L’objectiu del nostre projecte, és la creació d’una nova plataforma de mobilitat HomeMobile, com a producte estrella de la companyia Home Insurance. Aquesta nova plataforma permetrà una fàcil assignació d’actuacions i una nova operativa per part dels operaris, basada en una aplicació instal·lada a un dispositiu mòbil on podran informar les dades de la incidència. Aquesta nova aplicació, proporcionarà els operaris una nova forma on-line d’informar les dades de les actuacions, i permetrà el responsable conèixer la situació de cada actuació en tot moment.

L’aplicació també permetrà l’accés als clients de la companyia, i els permetrà tant crear noves incidències om revisar l’historial d’actuacions de la seva pòlissa, entre d’altres coses. Presentem per tant, una plataforma de mobilitat adaptada a les necessitats de la companyia, i integrada a les últimes tecnologies.

Page 9: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 8 de 95

4.2 Necessitat del projecte

Partim de la base d’una companyia amb més de 50 anys d’història i que mai ha modificat les seves operacions. Les empreses competidores del sector s’han anat modernitzant i això les ha permès optimitzar els seus processos tant des del punt de vista tecnològic com de negoci. La necessitat de canvi neix inicialment per tant, a partir de la pròpia competència del sector.

El nombre de clients de la companyia augmenta i cada vegada s’obren més incidències, estadísticament per causa del menor manteniment dels habitatges degut a la crisi econòmica, que genera un deteriorament dels punts claus de conservació de les llars assegurades.

La gestió actual ens presenta diferents problemes que volem resoldre. El primer d’ells és la falta de control i manteniment de totes les dades de negoci. L’operativa en paper fa difícil aquest control ja que moltes vegades es perden els documents de les incidències, es trenquen o es deterioren.

Apart d’això, l’augment del volum de treball ens obliga a millorar la gestió dels operaris disponibles i a tenir un major coneixement on-line de la situació de cada intervenció per tal d’optimitzar les rutes de cada operari. Aquest any han crescut un 7% les queixes dels clients en relació a la puntualitat de la intervenció en relació a l’hora acordada, i es necessita reduir les incidències en aquest punt.

Com dèiem abans, les intervencions urgents requereixen una gran velocitat d’arribada i actuació. Actualment no és fàcil saber quin operari es troba més a prop de la incidència per tal d’assignar-li. Es pretén que la nova plataforma pugui optimitzar aquesta situació. L’aplicació permetrà buscar als coordinadors la incidència assignada més propera, i assignar la nova incidència al mateix operari.

Page 10: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 9 de 95

Una altra necessitat és la de modernitzar la visió de l’empresa per parts dels clients, ja que actualment es reconeguda com antiga i tradicional. Necessitem que la nova aplicació mòbil permeti una major interacció amb els clients i aquests tinguin una imatge modernitzada de la companyia. Diagnòstic del sistema:

a) Deficiències: - Sistema antic, molt manual, difícil control de les operacions

realitzades. - Sistema poc eficient alhora d’assignar les intervencions als operaris. - Difícil gestió de les dades recopilades a les intervencions.

Informació en paper, en els documents de treball que es perden o deterioren.

- Es complicat generar informes de situació a partir de les dades del documents. No hi ha procés manual de gravació de dades.

- Poca interacció amb els clients.

b) Millores: - Possibilitat de conèixer on-line la situació d’una intervenció. - Sistema modern, adaptat a les últimes tecnologies. - Millora la gestió d’intervencions i assignacions als operaris. - Conservació integral de dades de negoci recollides. - Generació d’informes de situació útils per negoci explotant la base

de dades. - Forma moderna i directe d’interacció amb els clients. - Sistema de mapa integrat als dispositius.

4.3 Objectius del projecte

Els objectius del projecte han de ser clars i prou importants com per aconseguir integrar les necessitats exposades i una millora global de la companyia.

Objectius del projecte: O.1 Modernització dels processos de negoci de la companyia a través de la implantació d’una nova aplicació mòbil, fàcil i atractiva, pel treball dels operaris i la comunicació amb els clients.

Page 11: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 10 de 95

O.2 Fidelitzar i millorar el contacte amb els clients utilitzant la nova aplicació a través de funcions bàsiques.

O.3 Optimitzar el procés d’assignació de les actuacions als operaris disponibles.

O.4 Disposar del coneixement on-line de la situació de cada intervenció.

O.5 Augmentar en un 30% el nombre d’intervencions realitzades, tant mensualment com al cap de l’any d’haver implantat la nova plataforma. O.6 Aconseguir un estalvi en costos associats a l’operativa actual, tant en paper com en benzina dels operaris. Intentar quantificar aquests costos. O.7 Disposar d’un repositori persistent de totes les dades recopilades a les actuacions.

O.8 Poder explotar aquestes dades per generar informes útils pels analistes de negoci. O.9 En una segona fase a futur s’ha d’implantar una aplicació web integrada a l’aplicació mòbil per tal de completar la modernització dels processos i no treballar únicament amb l’aplicació mòbil. *Aquesta segona fase s’ha de planificar encara.

Priorització dels objectius del projecte:

Crític Prioritari Secundari O1 X O2 X O3 X O4 X O5 X O6 X O7 X O8 X O9 X-A futur

Page 12: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 11 de 95

5. Disseny funcional

5.1 Requeriments

Requeriments funcionals (RF)

RF1.Tres possibles perfils d’accés a l’aplicació – perfil coordinador, perfil operari i perfil client. Cada usuari accedirà a través d’un formulari de login que validarà que l’usuari existeix.

RF2.Els clients poden crear incidències des de l’aplicació.

RF3.Els clients poden revisar un historial de visites amb informació de la intervenció. Així com actualitzar el seu perfil o eliminar-ho.

RF4.Perfil coordinador: Pot revisar totes les incidències, tant les no assignades com les assignades. També el mapa de la localització de cada incidència.

RF5. Perfil coordinador: Pot concertar i assignar tasques a operaris, així com re concertar i re assignar-les.

RF6.Els operaris visualitzen les tasques que tenen assignades en un llistat vertical amb dades bàsiques.

RF7.Els operaris poden veure el mapa de cada tasca. RF8.Els operaris poden incloure fotografies a la incidència. Aquestes fotografies quedaran emmagatzemades en local en carpetes identificatives de cada client.

RF9.Al seleccionar una incidència, es podrà visualitzar el detall de la incidència. L’opció d’informar formularis permetrà l’operari informar dades de la intervenció. Les dades de la intervenció seran accessibles on-line pels coordinadors.

RF10.Ha d’existir un formulari on el client pugui donar la seva conformitat a la intervenció de l’operari i signar sobre el dispositiu. La imatge de la firma quedarà emmagatzemada en local, en carpetes identificatives de cada client.

RF11.Els estats possibles d’una tasca són: Nova : Estat de creació de la incidència. Assignada en curs: Estat un cop s’ha assignat a un operari. Finalitzada: Un cop l’operari a informat un resultat de l’actuació.

RF12.Els clients es podran enregistrar lliurement. El codi d’usuari ha de ser únic.

RF13.Els empleats-coordinador/operari, només els poden enregistrar usuaris administradors.

Page 13: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 12 de 95

Priorització de requeriments funcionals:

RF1 RF2 RF3 RF4 RF5 RF6 RF7 RF8 RF9 RF10

Crític X X X X X Prioritari X X X X Secundari X

RF11

RF12

RF13

Crític X X Prioritari X Secundari

Requeriments no funcionals (RNF) RNF1.Aplicació mòbil en plataforma Android. RNF2-Servei 24x7 estable i amb alta disponibilidad. RNF3-Escalabilitat per múltiples oficines i operaris. Com a dades volumètriques tenim unes 50 oficines i plantilles de 5-10 operaris per oficina.

RNF4-Aplicació mòbil atractiva, disseny modern i fàcil ús.

RNF5-Base de dades segura i flexible. Possibilitat de treballar amb magatzems de dades al núvol.

RNF6-Velocitats ràpides de navegació, aplicació estable sense penjades ni errors imprevistos. Priorització dels requeriments no funcionals:

RNF1 RNF2 RNF3 RNF4 RNF5 RNF6 Crític X X X Prioritari X X Secundari X

Relació entre els requeriments i objectius:

RF1 RF2 RF3 RF4 RF5 RF6 RF7 RF8 RF9 RF10 RF11 RF12 RF13

O1 X X X X X O2 X X X O3 X X

Page 14: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 13 de 95

O4 X O5 X X X O6 X X O7 X O8

RNF1 RNF2 RNF3 RNF4 RNF5 RNF6

O1 O2 O3 O4 X O5 X X X O6 X O7 X O8 X

5.2 Perfils d’usuari – Contexts d’ús

A partir dels objectius i requeriments, i utilitzant diferents mètodes d’indagació, els perfils d’usuari a implementar són els següents:

Perfil Coordinador Característiques Empleat de la companyia, actualment hi ha

un per oficina, 10 en total. La seva experiència en la tecnologia mòbil és baixa, però tenen coneixements bàsics d’informàtica i ofimàtica.

Interessos i motivacions Demanen una aplicació fàcil, i que amb poques pantalles puguin realitzar la seva feina d’assignació d’actuacions, ja que ells tenen altres tasques més de gestió comercial que han de realitzar diàriament.

Page 15: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 14 de 95

Contexts d’ús - Les operatives es poden realitzar tant en oficines com en desplaçaments en camp.

Codi CU-001 Login Descripció El coordinador accedeix per Usuari/Password a l’aplicació. Visualitza un menú on pot seleccionar veure les incidències ja assignades a un operari o les noves incidències pendents d’assignació.

Codi CU-002 Concertació i assignació d’actuacions Descripció Per les noves incidències, realitza una trucada al client i concerta el dia i hora de la visita. Informa aquesta data en l’actuació i realitza l’assignació a un operari. Si no aconsegueix posar-se en contacte amb el client, deixa la incidència pendent per tornar a trucar.

Codi CU-003 Optimització de les assignacions Descripció Alhora d’assignar l’operari òptim a una incidencia, el coordinador la localitzarà al mapa per saber la seva direcció.Posteriorment buscarà al mapa l’operari que tingui alguna incidencia assignada el mateix dia per la zona de la incidencia.

Tasques funcionals dins l’aplicació

.Login en l’aplicació

.Visualitzar la bossa d’actuacions no assignades.

.Visualitzar la bossa d’actuacions assignades.

.Visualitzar les dades de cada incidencia rebuda.

.Concertar visites amb els clients.

.Assignar actuacions a operaris.

.Visualitzar les incidències al mapa.

Page 16: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 15 de 95

Casos d’ús del perfil Coordinador:

Login

Accés aplicació«extends»

Seleccionar

incidències assignades

Visualitzar

incidència al mapa

Reassignar a

operari

Re concertar la

visita

«extends»

«extends»

«extends»

Seleccionar noves

incidències no assignades

«extends»

«extends»

«extends»

Visualitzar

incidència al mapa

Assignar a operari

Concertar la visita

Page 17: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 16 de 95

Perfil Operari mòbil Característiques Empleat de la companyia, actualment hi

han uns 200 a nivell estatal. La seva experiència en la tecnologia mòbil és baixa ja que sempre ha treballat en paper.

Interessos i motivacions Demanen una aplicación de fácil ús , àgil i ràpida per assolir els objectius diaris d’actuacions dins la seva jornada laboral de 9h a 18h.

Contexts d’ús

Código CU-004 Treball en camp - Posicionament Descripció L’operari rep les actuacions que li assigna el coordinador amb un mínim de 2 dies d’antel.lació. Visualitza les dades de contacte i posició al mapa, i també la data de concertació.

Código CU-005 Treball en camp – Actuació en camp Descripció L’operari accedeix al domicili afectat i realitza l’observació de danys i pren fotografies. Posteriorment l’operari realitza les obres necessàries, informa del resultat en l’aplicació i finalitza l’actuació requerint la conformitat i signatura del client sobre el dispositiu.

Tasques funcionals dins l’aplicació

.Login en l’aplicació

.Visualitzar la bossa d’actuacions assignades.

.Visualitzar les dades de cada actuació.

.Afegir fotografíes de la incidència.

.Visualitzar al mapa la posición del domicili d’actuació.

.Omplenar els informes d’actuació i requerir signatura al client.

.Finalitzar o deixar pendents les actuacións.

Page 18: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 17 de 95

Casos d’ús del perfil Operari:

Login

Accés aplicació«extends»

Seleccionarincidència assignada

Visualitzarincidència al mapa

Informar formularisd'intervenció

Afegir fotografies

«extends»

«extends»

«extends»

Perfil Client Característiques Client de la companyia, que s’ha

descarregat l’aplicació i s’ha registrat com usuari vàlid.

Interessos i motivacions Demanen una aplicació sencilla,rápida i que permeti una comunicació efectiva amb la companyia. Que no s’hagi de tornar a trucar per a generar l’incidència.Estan interessats en un servei 24x7, sense restriccions horàries i amb respostes ràpides per part de la companyia.

Page 19: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 18 de 95

Código CU-006

Escenari client – interacció amb la companyia

Descripció El domicili del client o domicilis col.lindants es veuen afectats per desperfectes generats per múltiples causes, pèrdua o filtracions d’aigua,problemes elèctrics o d’estructura,etc .Sent sempre la causa principal dels desperfectes, el domicili del client, i per tant el client com a responsable final. El client s’ha de descarregar l’aplicació i registrar-se, informant totes les dades requerides. El client entra en l’aplicació i accedeix a l’opció de generar una incidència, informant una explicació descriptiva de la incidencia. Código CU-007 Escenari client – historial d’actuacions Descripció El client pot requerir visualitzar totes les visites i/o obres realitzades per la companyia al seu domicili o domicilis veins afectats per desperfectes. En l’opció del historial podrá revisar aquesta informació.

Tasques funcionals dins l’aplicació

.Login en l’aplicació

.Poder editar i modificar les dades del seu perfil o eliminar-ho.

.Poder crear incidències.

.Revisar l’historial de visites.

.En el cas d’una actuació, el client ha de poder signar la conformitat a l’operació realitzada.

Page 20: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 19 de 95

Casos d’ús del perfil Client:

Registrarse

Informar dades

Informar Usuari

Informar Password

Informar altres

dades<<include>>

Login

Accés aplicació«extends»

Crear incidència

Consulta historial

visites

Editar perfil

Actualitzar dades

Modificar password

Eliminar usuari

Consultar visites

finalitzades

«extends»

«extends»

«extends» Informar detall

incidència

Page 21: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 20 de 95

Perfil Client Característiques Administrador de l’aplicació,empleat tècnic

de la companyia.Hi han 3 administradors en tota la companyia.

Interessos i motivacions Són professionals de la companyia.La seva motivació és aconseguir un rendiment òptim de l’aplicació i poder enregistrar nous operaris o coordinadors.

Código CU-008 Administrador Descripció Un usuari Administrador és l’únic que pot crear usuaris perfil Coordinador o Operari a través de l’opció “Registre Empleats”. Usuari:ADMHOME Password:admin

Tasques funcionals dins l’aplicació

.Enregistrar usuaris de perfil Operari o Coordinador.

Page 22: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 21 de 95

5.3 Model de dades

Per requeriments del projecte, l’emmagatzematge de dades es realitzarà en una base de dades al núvol, en aquest cas utilitzant la web Parse.com que ofereix la possibilitat de crear projectes i un magatzem de dades associat.El núvol ens ofereix un sistema molt senzill i pràctic de conservació de dades, no requereix cap servidor dins el projecte, per tant ens permet un gran estalvi en manteniment i solució d’incidències al servidor dela base de dades.Com a problema principal tenim que necessitem una conexió a Internet per poder treballar. En Parse no tenim les habituals taules SQL, hem de cambiar una mica la tradicional visió de base de dades amb taules,columnes i files,per un conjunt de clases, on cada fila d’aquestes clases són objectes de la mateixa.No existeixen indexs ni claus úniques, ni claus foranes ni res d’allò habitual a les bases de dades relacionals.

El model de dades estarà compost de les següents clases: Classe Usuaris Nom camp Tipus Descripció objectId String id del objecte (fila) Codi_postal String codi postal usuari Direccio String direcció usuari Document String document d’identitat de l’usuari Email String email de contacte de l’usuari Nom String nom i cognoms de l’usuari Password String password d’accés a l’aplicació Perfil String perfil de l’usuari – client,coordinador,operari Poblacio String població de residència de l’usuari Polissa String pòlissa de l’usuari, si es client,en altre cas blanc Telefon String telèfon de contacte de l’usuari Usuari String codi únic d’accés de l’usuari createdAt Date data de creació de l’usuari a la base de dades updatedAt Date data de modificació de l’usuari a la base de dades

Page 23: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 22 de 95

Classe Incidència

Nom camp Tipus Descripció objectId String id del objecte (fila) Assignacio String codi de l’operari que té assignada la incidència Estat String status de la incidència codi String codi de la incidència detall String breu explicació de la incidència dia_concertacio String dia acordat per la visita amb el client hora_concertacio String hora acordada per la visita amb el client usuari String usuari client que ha creat la incidència createdAt Date data de creació de la incidència updatedAt Date data de modificació de la incidència

Classe Resultat Nom camp Tipus Descripció objectId String id del objecte (fila) Acces String situació de l’accés a la vivenda Codi String codi de la incidència Dia String dia de la intervenció HoraFi String hora fi de la intervenció HoraInici String hora inici de la intervenció Observacions String observacions de la intervenció Resultat String resultat final de la intervenció createdAt Date data de creació del resultat updatedAt Date data de modificació del resultat

Classe Defectes Nom camp Tipus Descripció objectId String id del objecte (fila) Codi String codi de la incidència Def1 String resultat del defecte 1 –marcat/desmarcat Def10 String resultat del defecte 10 –marcat/desmarcat Def11 String resultat del defecte 11 –marcat/desmarcat Def2 String resultat del defecte 2 –marcat/desmarcat

Page 24: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 23 de 95

Def3 String resultat del defecte 3 –marcat/desmarcat Def4 String resultat del defecte 4 –marcat/desmarcat Def5 String resultat del defecte 5 –marcat/desmarcat Def6 String resultat del defecte 6 –marcat/desmarcat Def7 String resultat del defecte 7 –marcat/desmarcat Def8 String resultat del defecte 8 –marcat/desmarcat Def9 String resultat del defecte 9 –marcat/desmarcat createdAt Date data de creació dels defectes de la incidència updatedAt Date data de modificació dels defectes de la incidència

Page 25: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 24 de 95

5.4 Arquitectura del projecte

Veiem un sencill diagrama de desplegament que ens donarà una visió clara de l’arquitectura del projecte:

Com mostra el diagrama el dispositiu es conecta a Internet a través d’una conexió 3G , amb una tarjeta SIM amb contracte de dades per exemple o per mitjà d’una xarxa Wifi accesible.En el nostre projecte, cada operari disposarà d’un dispositiu amb una tarjeta SIM personal per conectar per 3G. La comunicació a Internet bàsicament és per conectar amb la base de dades del projecte,detallada en l’apartat anterior, i creada al núvol utilitzant la plataforma de Parse.com. En l’apartat d’implementació dedicat a la base de dades aprofondirem més en el tema.

Page 26: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 25 de 95

5.5 Disseny del flux de l’aplicació

Com a disseny inicial de la nostra aplicació, la definició del flux de pantalles és bàsic per poder del.limitar les diferents funcionalitats, les interficies i per tant , i com veurem a l’apartat d’implementació, tots el layouts necessaris. Partirem d’una pantalla inicial de Login comuna per tots els usuaris. En funció del perfil de l’usuari autenticat s’obrirà una pantalla o una altra , i des de cadascuna d’aquestes pantalles es podran realitzar les diferents funcions definides per cada tipus d’usuari.

Page 27: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 26 de 95

6. Implementació del projecte

6.1 Configuració de l’entorn de

desenvolupament

El projecte s’ha desenvolupat per plataforma Android. S’ha implementat utilitzant el següent software:

� Màquina virtual en VMware Workstation 8.5: • Android Development Tools – ADT v21 • Eclipse Juno v4.2.0

� Com a servidor de base de dades (magatzem de dades) s’ha utilitzar un

projecte al núvol en Parse.com – Projecte HomeMobile. Identificador de projecte indicat a les diferents Activities del projecte. Les llibreries de Parse també es van importar al projecte. Per l’utilització de la API Google Maps v2 es van instal.lar les llibreris de Google Play Services i es va generar una clau pel projecte identificada al Androidmanifest.xml. Els tests de les funcionalitats del projecte s’han realitzat sobre un dispositiu real:

� Tablet Samsung Galaxy Note 10.1 GT-N8000. En treballar, per motius de mobilitat i practicitat, amb una màquina virtual, no s’han realitzat proves en els emuladors proporcionats per la plataforma ADT degut a problemes de rendiment. Per això totes les proves s’han realitzat sobre un dispositiu real. La idea del projecte es que a nivell de companyia, tant coordinadors com operaris treballin únicament amb aquest dispositiu. El clients podrien accedir amb els seus propis dispositius, encara que en aquesta primera versió de la aplicació no he entrat en temes de visibilitat des de diferents dispositius, primerament per la dificultat de provar sense dispositius reals i sense emulador i també per falta de temps. En resum no està ideat per una visió des d’un dispositiu diferent a l’utilitzat.

Page 28: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 27 de 95

El projecte s’ha compilat amb Android 4.0.3 – SDK API 15 I en tot cas, l’emulador hauria de configurar-se en Landscape i en màquina 10.1 in WXGA (Tablet). El projecte s’instal.la executant el fitxer HomeMobile.apk S’ha de tenir present que certes funcionalitats podrien no funcionar en l’emulador, com per exemple funcionalitats amb la cámara de fotos o la funcionalitat de firma sobre el dispositiu. L’accés a les dades a Parse i l’ús de Google Maps v2 no s’ha provat en un emulador.

6.2 Component AndroidManifest.xml

El fitxer AndroidManifest.xml és un component bàsic en tot projecte Android, i en el nostre no podía ser una excepció. En aquest fitxer es defineixen totes les Activities existents, l’aplicació falla i s’atura en intentar accedir a una Activity no definida al AndroidManifest.xml. També s’han de declarar tots els permisos disponibles per l’aplicació, des de l’accés a Internet, ús de la càmera, llibreries de Parse o la clau de Google Maps v2 entre d’altres. Veiem alguns exemples: Permis per accedir a Internet: <uses-permission android:name="android.permission.INTERNET"/> Clau Google Maps v2: <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyBAQbn7H1C8AN2gkTOWFO-Wnfz0NG8IZM4"/>

Page 29: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 28 de 95

També es defineix l’Activity que arrencarà amb l’aplicació, la android.intent.action.MAIN <activity android:name=".MainActivity" android:label="@string/app_name" android:windowSoftInputMode="stateHidden"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> S’inserta el fitxer complet per una possible revisió per part del lector:

AndroidManifest.xml

Page 30: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 29 de 95

6.3 Components principals -

Layouts/Activities En Android, les interficies amb els usuaris es creen utilitzant layouts. En el nostre projecte s’han creat layouts tipus xml. Hem utilitzat tant l’opció gràfica que ofereix l’Eclipse per crear els layouts, com l’opció de codificar el xml directament. La creació de cada layout depen del Disseny de cada pantalla a implementar, i contenen diferents components, des de simples textbox’s per informar una dada fins a complexos llistats de dades (ListViews). Creació de layouts: Seleccionem el projecte dins l’Eclipse, i clickant el botó dret accedim a l’opció New>Layout XML file , com veiem a la següent captura de pantalla:

Page 31: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 30 de 95

Un cop s’ha creat el layout, ja tenim l’opció de desenvolupar-ho utilitzant eines gràfiques o directament codificant el fitxer xml. Tots el layouts implementats al projecte s’ajusten a les necessitats de les diferents pantalles dissenyades de l’aplicació. Una vegada s’ha implementat un layout, hem de crear la seva Activity associada. Les Activities defineixen el comportament de cadascun dels components definits en els diferents layouts. Les Activities del nostre projecte serán implementades en Java v1.6 i es creen a partir de clases java. Creació de les Activities: Seleccionem el projecte dins l’Eclipse, i clickant el botó dret accedim a l’opció New>Class , com veiem a la següent captura de pantalla:

Page 32: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 31 de 95

Totes les Activities implementades al projecte permeten donar el comportament lògic requerit a l’aplicació. Revisem ara un a un els diferents layouts que componen l’aplicació i les seves Activities associades. Nota : A l’annex del document s’afegit un manual d’usuari on també es detallen les pantalles y les seves funcions, però està més pensat com una breu guía per usuaris de camp i no com a descripció detallada de components software.

1. Main Activity Layout – main.xml Pantalla inicial de l’aplicació. Activity: MainActivity.java Activitat inici de l’aplicació. Hi han tres funcions bàsiques: 1- Registre dels clients de la companyia. És lliure. 2- Registre d’empleats. Només autoritzat a fer-ho un usuari Administrador. 3- Login en l’aplicació. Si l'usuari/password són correctes, en funció del perfil, accedirà a un flux de pantalles o un altre. Perfils possibles accés: Client/Coordinador/Operari Components: Tipus camp Nom camp Identificador Android EditText usernameInput R.id.UsernameEditText Descripció: Camp de text per informar el codi d’usuari.

EditText passwordInput R.id.PasswordEditText

Descripció: Camp de text per informar el pasword.

View entrarButton R.id.buttonEntrar

Descripció: Butó per accedir a la aplicació,prèvia validació de l’usuari/password.

View registreClientButton R.id.buttonClient

Descripció: Butó per accedir al formulari de registre de clients.

View registreEmpleatButton R.id.buttonEmpleat

Descripció: Butó per accedir al formulari de registre d’empleats.

View textEntryView R.layout.logindialog

Descripció: Diàleg de validació d’usuari Administrador pel registre d’usuaris empleats. Usuari/password Administrador ADMHOME/admin.

Page 33: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 32 de 95

2. Registre Clients Layout – registreactivity.xml Pantalla formulari de registre de clients. Activity: RegistreActivity.java Formulari per registrar clients. Validacions: Usuari> 7 caràcters Password > 6 caràcters Nom i cognoms informats Document identitat informat

Page 34: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 33 de 95

Pòlissa informada Direcció,codi postal i població informades Telèfon informat E-mail és opcional El codi d'usuari és únic a la base de dades.Com Parse no té un control automàtic d'index únic, es controla per codi buscant si aquest usuari ja existeix a la BBDD. Components: Tipus camp Nom camp Identificador Android TextView usuariTxt R.id.usuariText Descripció: Camp de text per informar el codi d’usuari.

TextView passwordTxt R.id.passwordText

Descripció: Camp de text per informar el pasword.

TextView nomTxt R.id.nomText

Descripció: Camp de text per informar el nom i cognoms.

TextView documentTxt R.id.documentText

Descripció: Camp de text per informar el document d’identitat.

TextView polissaTxt R.id.polissaText

Descripció: Camp de text per informar la pòlissa del client.

TextView direccioTxt R.id.direccioText

Descripció: Camp de text per informar la direcció.

TextView codi_postalTxt R.id.codi_postalText

Descripció: Camp de text per informar el codi postal.

TextView poblacioTxt R.id.poblacioText

Descripció: Camp de text per informar la població.

TextView telefonTxt R.id.telefonText

Descripció: Camp de text per informar el telèfon.

TextView emailTxt R.id.emailText

Descripció: Camp de text per informar l’email.Opcional.

View registreButton R.id.buttonUsuari

Descripció: Butó per registrar l’usuari a la base de dades prèvies validacions de camps obligatoris.

View cancelButton R.id.buttonCancel

Descripció: Butó per cancel·lar el registre.

Page 35: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 34 de 95

3. Registre Empleats Layout – registreempleatsactivity.xml Pantalla formulari de registre d’empleats de la companyia. Activity: RegistreEmpleatActivity.java Formulari per registrar empleats. Validacions: Usuari> 7 caracters Password > 6 caracters Nom i cognoms informats Document identitat informat Oficina informada,codi postal i població informades Telèfon informat E-mail és opcional El perfil:Operari/Coordinador és obligatori El codi d'usuari és únic a la base de dades.Com Parse no té un control automàtic d'index únic, es controla per codi buscant si aquest usuari ja existeix a la BBDD.

Page 36: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 35 de 95

Components: Tipus camp Nom camp Identificador Android TextView usuariTxt R.id.usuariText Descripció: Camp de text per informar el codi d’usuari.

TextView passwordTxt R.id.passwordText

Descripció: Camp de text per informar el pasword.

TextView nomTxt R.id.nomText

Descripció: Camp de text per informar el nom i cognoms.

TextView documentTxt R.id.documentText

Descripció: Camp de text per informar el document d’identitat.

TextView polissaTxt R.id.polissaText

Descripció: Camp de text per informar la pòlissa del client.

TextView direccioTxt R.id.direccioText

Descripció: Camp de text per informar la direcció,en aquest cas de l’oficina.

TextView codi_postalTxt R.id.codi_postalText

Descripció: Camp de text per informar el codi postal.

TextView poblacioTxt R.id.poblacioText

Descripció: Camp de text per informar la població.

TextView telefonTxt R.id.telefonText

Descripció: Camp de text per informar el telèfon.

TextView emailTxt R.id.emailText

Descripció: Camp de text per informar l’email.Opcional.

RadioButton rOperari R.id.radioOperari

Descripció: Opció per indicar que l’usuari és de perfil operari. RadioButton rCoordinador R.id.radioCoordinador

Descripció: Opció per indicar que l’usuari és de perfil coordinador. View registreButton R.id.buttonEmpleat

Descripció: Butó per registrar l’usuari empleat a la base de dades prèvies validacions de camps obligatoris.

View cancelButton R.id.buttonCancel

Descripció: Butó per cancel·lar el registre.

Page 37: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 36 de 95

4. Menú Clients Layout – menuclientesactivity.xml Pantalla menú amb les tres operatives a fer pel client de la companyia registrat. Activity: MenuClientesActivity.java Menú per seleccionar l'acció a realitzar per part del client. 1-Editar perfil per actualitzar dades o password. 2-Crear una incidència. 3-Revisar el registre de incidències ja resoltes. Les noves no es veuen ja que la idea no és que sigui un control de la situació sinó una revisió d'incidències finalitzades. Components: Tipus camp Nom camp Identificador Android View editarButton R.id.button01_editar Descripció: Butó per accedir a l’edició del perfil d’usuari.

View incidenciaButton R.id.button02_incidencia

Descripció: Butó per accedir al formulari per crear incidències.

View visitesButton R.id.button03_visites

Descripció: Butó per accedir a l’històric de visites.

Page 38: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 37 de 95

5. Editar perfil clients Layout – editarperfilactivity.xml Pantalla formulari amb les dades registrades del client i l’opció de modificarles. Activity: EditarPerfilActivity.java Activitat per actualització de dades del client. L'activitat recupera les dades actuals de l'usuari,excepte la password.Pot modificar qualssevol dada o crear una password nova amb confirmació. També podria eliminar el seu usuari si ja no volgués operar amb ella. Components: Tipus camp Nom camp Identificador Android TextView usuariTxt R.id.usuariTxt Descripció: codi de l’usuari editat.

TextView passwordTxt R.id.passwordTxt

Descripció: nova password

TextView passwordConfTxt R.id.passwordConfTxt

Descripció: camp de confirmació de nova password

TextView direccioTxt R.id.direccioTxt

Descripció: direcció actual modificable

TextView codiPostalTxt R.id.codiPostalTxt

Page 39: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 38 de 95

Descripció: codi postal actual modificable

TextView poblacioTxt R.id.poblacioTxt

Descripció: població actual modificable

TextView telefonTxt R.id.telefonTxt

Descripció: telèfon actual modificable

TextView emailTxt R.id.emailTxt

Descripció: email actual modificable

Button actualitzarPerfil R.id.buttonActualitzar

Descripció: Botó per actualitzar les dades del perfil a la base de dades amb els camps modificats. Button eliminarUsuari R.id.buttonEliminar

Descripció: Botó per eliminar l’usuari.

Button cancelButton R.id.buttonCancel

Descripció: Botó per cancel·lar l’edició del perfil.

6. Creació d’incidències Layout – crearincidenciaactivity.xml Pantalla formulari per la creació d’incidències. Activity: CrearIncidenciaActivity.java Activitat per la creació d'incidències per part dels clients. Només s'ha de fer una explicació de la incidència i clickar a crear incidència.Tota la resta de dades de l'usuari es recuperen internament al ja estar registrat.

Page 40: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 39 de 95

Components: Tipus camp Nom camp Identificador Android TextView usuariTxt R.id.usuariText Descripció: codi de l’usuari que crea la incidència.

TextView detallTxt R.id.detallText

Descripció: detall explicatiu de la incidència a la vivenda.

View incidenciaButton R.id.buttonIncidencia

Descripció: inserta la incidència a la base de dades.

View cancelButton R.id.buttonCancel

Descripció: cancel.la la creació de la incidència.

7. Històric de visites Layout – visitesactivity.xml Pantalla llistat de les incidències finalitzades del client. Activity: VisitesActivity.java Aquesta activitat té com a objectiu generar el llistat de incidències del client. La única condició, per ara, és que la incidència ha d'estar finalitzada, amb resultat informat.Seria un llistat històric de incidències.

Page 41: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 40 de 95

Components: Tipus camp Nom camp Identificador Android ListView listView R.id.listVisites

El llistat és un array de classes java. La classe definida per mostrar les dades en aquest llistat, per a cada ocurrència és: public class Visita{ private String codi; private String dia_visita; private String dia_creacio; private String estat; private String detall; private String resultat; private String observacions; private String operari;

//Constructor

public Visita(String codi,String dia_visita,String dia_creacio,String estat,String detall,String resultat,String observacions,String operari) {

this.codi = codi; this.dia_visita = dia_visita; this.dia_creacio = dia_creacio; this.estat = estat; this.detall = detall; this.resultat = resultat; this.observacions = observacions; this.operari = operari; }

//set i get mètodes public String getCodi() { return codi; } public void setCodi(String codi) { this.codi = codi; } public String getDiaVisita() { return dia_visita; } public void setDiaVisita(String dia_visita){this.dia_visita=dia_visita;} public String getDiaCreacio() { return dia_creacio; } public void setDiaCreacio(String dia_creacio){this.dia_creacio=dia_creacio;} public String getEstat() { return estat; } public void setEstat(String estat) { this.estat = estat; } public String getResultat() { return resultat; } public void setResultat(String resultat) { this.resultat = resultat; } public String getDetall() { return detall; } public void setDetall(String detall) { this.detall = detall; } public String getObservacions() { return observacions; } public void setObservacions(String observacions){this.observacions= observacions; } public String getOperari() { return operari; } public void setOperari(String operari) { this.operari = operari; } }

Page 42: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 41 de 95

8. Usuari coordinador Layout – coordinadoractivity.xml Pantalla llistat de les incidències no assignades a operari. Activity: CoordinadorActivity.java Activiy on es mostra el llistat de les incidències no assignades a operari. El Coordinador pot seleccionar una de elles per asignar-la i veure el detall. Components: Tipus camp Nom camp Identificador Android ListView listView R.id.list

Page 43: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 42 de 95

El llistat és un array de classes java. La classe definida per mostrar les dades en aquest llistat, per a cada ocurrència és: public class Incidencia{

private String codi; private String nom; private String estat; private String operari;

//Constructor public Incidencia(String codi,String nom,String estat,String operari) {

this.codi = codi; this.nom = nom; this.estat = estat; this.operari = operari; }

//set i get mètodes

public String getCodi() { return codi; } public void setCodi(String codi) { this.codi = codi; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getEstat() { return estat; } public void setEstat(String estat) { this.estat = estat; } public String getOperari() { return operari; } public void setOperari(String operari) { this.operari = operari; } }

Page 44: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 43 de 95

9. Usuari coordinador Layout – coordinadorassigactivity.xml Pantalla llistat de les incidències assignades a operari. Activity: CoordinadorAssigActivity.java Activiy on es mostra el llistat de les incidències assignades a operari. Té la mateixa estructura que la Activity prèvia. 10. Usuari coordinador Layout – coordinadorincidenciaactivity.xml Pantalla detall de la incidencia seleccionada. Activity: CoordIncidenciaActivity.java Activitat de treball del coordinador, a més de veure les dades i el detall de la incidencia, permet concertar la visita de l'operari, assignar la incidència a un operari i visualitzar-la al mapa per seleccionar l'operari millor localitzat. Components: Tipus camp Nom camp Identificador Android TextView usuariTxt R.id.usuariText Descripció: codi de l’usuari que va crear la incidència.

TextView nomTxt R.id.nomtext

Descripció: nom de l’usuari que va crear la incidència.

TextView documentTxt R.id.documenttext

Descripció: doc.identitat de l’usuari que va crear la incidència.

TextView polissaTxt R.id.polissatext

Descripció: polissa de l’usuari que va crear la incidència.

TextView direccioTxt R.id.direcciotext

Descripció: direcció de l’usuari que va crear la incidència.

TextView codi_postalTxt R.id.codi_postaltext

Descripció: codi postal de l’usuari que va crear la incidència.

TextView poblacioTxt R.id.poblaciotext

Descripció: població de l’usuari que va crear la incidència.

TextView telefonTxt R.id.telefontext

Descripció: telèfon de l’usuari que va crear la incidència.

TextView emailTxt R.id.emailtext

Descripció: email de l’usuari que va crear la incidència.

TextView estatTxt R.id.estattext

Descripció: estat de la incidència.

Page 45: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 44 de 95

TextView detallTxt R.id.detalltext

Descripció: Detall explicatiu de la incidència.

TextView dia_concertacioTxt R.id.dia_concertaciotext

Descripció: dia de concertació de la incidència.

TextView hora_concertacioTxt R.id.hora_concertaciotext

Descripció: hora de concertació de la incidència.

Button datePicker R.id.btn_set_date

Descripció: Botó per modificar el dia de concertació planificat.

Button timePicker R.id.btn_set_time

Descripció: Botó per modificar l’hora de concertació planificat.

Button concertació R.id.buttonConcertar

Descripció: Botó per confirmar el dia/hora de concertació planificat.

Button assignacioList R.id.buttonAssignar

Descripció: Botó per seleccionar l’operari a assignar la incidència.

Button mapa R.id.buttonMap

Descripció: Botó per localitzar la incidència al mapa.

Button buttonCancel R.id.buttonCancel

Descripció: Botó per cancel.lar planificat.

Page 46: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 45 de 95

11. Usuari operari Layout – assignacionsactivity.xml Pantalla amb el llistat d’incidències assignades a l’operari. Activity: AssignacionsActivity.java Activitat on l'operari pot veure el llistat de totes les incidències que té assignades, tant en curs com finalitzades. Seleccionant qualssevol d'elles anirem al detall de la incidència. Components: Tipus camp Nom camp Identificador Android ListView listView R.id.listAssignacions

El llistat és un array de classes java. La classe definida per mostrar les dades en aquest llistat, per a cada ocurrència és: public class Incidencia{ private String codi; private String nom; private String estat; private String direccio; private String codi_postal; private String poblacio; private String telefon; private String email; private String detall; private String dia_concertacio; private String hora_concertacio; //Constructor public Incidencia(String codi,String nom,String estat,String direccio, String codi_postal,String poblacio,String telefon,String email,String detall,String dia_concertacio, String hora_concertacio) { this.codi = codi; this.nom = nom; this.estat = estat; this.direccio = direccio; this.codi_postal = codi_postal; this.poblacio = poblacio; this.telefon = telefon; this.email = email; this.detall = detall; this.dia_concertacio = dia_concertacio;

Page 47: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 46 de 95

this.hora_concertacio = hora_concertacio; } //set i get mètodes public String getCodi() { return codi; } public void setCodi(String codi) { this.codi = codi; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getEstat() { return estat; } public void setEstat(String estat) { this.estat = estat; } public String getDireccio() { return direccio; } public void setDireccio(String direccio) { this.direccio = direccio; } public String getCodi_Postal() { return codi_postal; } public void setCodi_Postal(String codi_postal) { this.codi_postal = codi_postal; } public String getPoblacio() { return poblacio; } public void setPoblacio(String poblacio) { this.poblacio = poblacio; } public String getTelefon() { return telefon; } public void setTelefon(String telefon) { this.telefon = telefon; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDetall() { return detall; } public void setDetall(String detall) { this.detall = detall; } public String getDia_Concertacio() { return dia_concertacio; } public void setDia_Concertacio(String dia_concertacio) { this.dia_concertacio = dia_concertacio; } public String getHora_Concertacio() { return hora_concertacio; } public void setHora_Concertacio(String hora_concertacio) { this.hora_concertacio = hora_concertacio; } }

12. Usuari operari Layout – operarincidenciaactivity.xml Pantalla detall de la incidencia seleccionada per l’operari. Activity: OperarincidenciaActivity.java Activitat on l'operari pot veure el detall de la incidència seleccionada. La concertació de les incidències no és obligatoria,per tant les hores de concertació poden estar o no informades. Dintre aquesta activitat l'operari,a part de veure el detall, pot: 1-Veure la posició de la incidència a GoogleMaps:Incialment s'obre el mapa del món, s'ha de clickar al botó de localització a la part superior dreta i ens posicionarà a la posició de l'operari.La incidència es marca amb una gota gran vermella,si clickem sobre ella veiem el codi d'incidència i la hora de concertació si la té informada.

Page 48: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 47 de 95

2-Fer una fotografia: al clickar sobre aquest botó s'obre automàticament un quadre de fotografia i en 5 segons es fa la foto automàticament, a fi de evitar afegir més botons a la pantalla. La foto queda emmagatzemada en local al directori local del dispositiu sd/Pictures i a la carpeta associada al client de la incidència (Nom carpeta HomeMobilePictures_Codi client). 3-Omplenar formularis de la intervenció Components: Tipus camp Nom camp Identificador Android TextView usuariTxt R.id.usuariText Descripció: codi de l’usuari que va crear la incidència.

TextView nomTxt R.id.nomtext

Descripció: nom de l’usuari que va crear la incidència.

TextView documentTxt R.id.documenttext

Descripció: doc.identitat de l’usuari que va crear la incidència.

TextView polissaTxt R.id.polissatext

Descripció: polissa de l’usuari que va crear la incidència.

TextView direccioTxt R.id.direcciotext

Descripció: direcció de l’usuari que va crear la incidència.

TextView codi_postalTxt R.id.codi_postaltext

Descripció: codi postal de l’usuari que va crear la incidència.

TextView poblacioTxt R.id.poblaciotext

Descripció: població de l’usuari que va crear la incidència.

TextView telefonTxt R.id.telefontext

Descripció: telèfon de l’usuari que va crear la incidència.

TextView emailTxt R.id.emailtext

Descripció: email de l’usuari que va crear la incidència.

TextView estatTxt R.id.estattext

Descripció: estat de la incidència.

TextView detallTxt R.id.detalltext

Descripció: Detall explicatiu de la incidència.

TextView dia_concertacioTxt R.id.dia_concertaciotext

Descripció: dia de concertació de la incidència.

TextView hora_concertacioTxt R.id.hora_concertaciotext

Descripció: hora de concertació de la incidència.

Button reportsIncidencia R.id.buttonReports

Descripció: Botó per accedir als formularis de la intervenció.

Button fotoPreview R.id.buttonFotoPreview

Descripció: Botó per fer una fotografia de la incidència.

Button mapa R.id.buttonMap

Descripció: Botó per localitzar la incidència al mapa.

Button buttonCancel R.id.buttonCancel

Descripció: Botó per cancel.lar planificat.

Page 49: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 48 de 95

13. Usuari operari Layout – reportresultatactivity.xml Pantalla formulari del resultat de la intervenció. Activity: ReportResultatActivity.java Activity tipus formulari on l'operari informa dades de la intervenció a la vivenda del client.Les dades queden emmagatzemades a la taula de Resultats.En guardar aquest formulari es dona per finalitzada la incidència. Components: Tipus camp Nom camp Identificador Android RadioButton radioAcces R.id.radioAcces Descripció: opció de accés correcte a la vivenda.

RadioButton radioAbsencia R.id.radioAbsencia

Descripció: opció d’absència de client a la vivenda.

RadioButton radioNoLocalitzat R.id.radioNoLocalitzat

Descripció: opció de vivenda no localitzada.

RadioButton radioNoAcces R.id.radioNoAcces

Descripció: opció d’accés no permés o presència únicament de menors.

RadioButton radioResCorrecte R.id.radioResCorrecte

Descripció: opció d’intervenció amb resultat correcte.

RadioButton radioResDefectes R.id.radioResDefectes

Page 50: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 49 de 95

Descripció: opció d’intervenció pendent de defectes trobats.

RadioButton radioResImpossible R.id.radioResImpossible

Descripció: opció d’intervenció impossible de finalitzar.

TextView resObservacionsText R.id.resObservacionsText

Descripció: observacions relatives a la intervenció.

Button datePicker R.id.btn_set_date

Descripció: Botó per informar el dia de la intervenció.

Button timePicker R.id.btn_time_inici

Descripció: Botó per informar l’hora d’inici de la intervenció.

Button timePickerFi R.id.btn_time_fi

Descripció: Botó per informar l’hora fi de la intervenció.

Button resultatButton R.id.buttonGuardarResultat

Descripció: Botó per confirmar les opcions marcades i guardarles a la base de dades.La incidència passa a l’estat finalitzada.

Button cancelButton R.id.buttonCancelResultat

Descripció: Botó per cancel.lar l’informar el formulari.

Page 51: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 50 de 95

14. Usuari operari Layout – reportdefectesactivity.xml Pantalla checklist resum dels defectes detectats a la vivenda. Activity: ReportDefectesActivity.java Activity tipus formulari checkbox on l'operari marca els defectes detectats a la vivenda del client. Les dades queden emmagatzemades a la taula Defectes. Components: Tipus camp Nom camp Identificador Android CheckBox checkDef1 R.id.defTuberies1 Descripció: opció de defecte de tuberies a la vivenda.

CheckBox checkDef2 R.id.defTuberies2

Descripció: opció de defecte de tuberies a la vivenda.

CheckBox checkDef3 R.id.defTuberies3

Descripció: opció de defecte de tuberies a la vivenda.

CheckBox checkDef4 R.id.defElectric1

Descripció: opció de defectes elèctrics a la vivenda.

CheckBox checkDef5 R.id.defElectric2

Descripció: opció de defectes elèctrics a la vivenda.

CheckBox checkDef6 R.id.defConservacio1

Descripció: opció de defectes de conservació general de la vivenda.

CheckBox checkDef7 R.id.defConservacio2

Descripció: opció de defectes de conservació general de la vivenda.

CheckBox checkDef8 R.id.defConservacio3

Descripció: opció de defectes de conservació general de la vivenda.

CheckBox checkDef9 R.id.defAltres1

Descripció: opció d’altres defectes.

CheckBox checkDef10 R.id.defAltres2

Descripció: opció d’altres defectes.

CheckBox checkDef11 R.id.defAltres3

Descripció: opció d’altres defectes.

Button defectesButton R.id.buttonDefectes

Descripció: Botó per confirmar les opcions marcades i guardarles a la base de dades.

Button cancelButton R.id.buttonCancel

Descripció: Botó per cancel.lar l’informar el formulari.

Page 52: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 51 de 95

15. Usuari operari – signatura Pantalla de signatura de conformitat del client. No té layout específic , es treballa sobra la mateixa pantalla creada a l’Activity amb la clase Canvas. A l’apartat específic de la signatura s’entrarà més a fons en aquesta funció. Activity: ReportConformitatActivity.java Activitat que permet el client signar la conformitat a la intervenció sobre la pantalla sencera del dispositiu. L'operari pot netejar la pantalla si ha cap error, guardar la signatura en el dispositiu dins la carpeta del client //sd/Pictures/HomeMobilePictures_CodiClient o cancel.lar. En aquesta Activity s'utlitza un menú tipus items (settings) per deixar tota la pantalla lliure per signar. Pantalla blava amb escritura blanca.

Page 53: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 52 de 95

6.4 Integració amb Parse

Com ja s’ha comentat previament, el projecte utilitza l’emmagatzematge de dades al núvol de l’empresa Parse. Per això s’ha creat i registrat un usuari per tal de donar d’alta el projecte HomeMobile.

Abans de començar a treballar amb Parse dins la nostre aplicación hem d’incloure al projecte les llibreries de Parse necessàries per una correcte integració. Es segueix l’operativa indicada per Parse per tal d’integrar les seves llibreries al projecte en l’Eclipse. Com veiem a la següent captura de pantalla, el fitxer Parse-1.2.3.jar inclou tots els paquets , i dintre d’aquests totes les clases java per la correcte integració de l’aplicació Android amb Parse.

Page 54: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 53 de 95

Un cop tenim les llibreries correctes i hem creat el projecte, hem d’indicar a les Activities que puguin utilizar l’accés a Parse, tant per recuperar dades com per insertar-hi, els id del projecte utilitzant el codi que ens ha indicat Parse. Parse.initialize(this, "xWkxeEpyiLVMABoNwJJvVx8GOZUb5rWGL0p4ebrl", "MuRrp1Sc6GVtjuCdGs3U5fGhy2YEKmGisfPoYWAH");

Page 55: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 54 de 95

Veiem un exemple en l’Activity MainActivity.java: public class MainActivity extends Activity implements OnClickListener{

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Parse.initialize(this, "xWkxeEpyiLVMABoNwJJvVx8GOZUb5rWGL0p4ebrl", "MuRrp1Sc6GVtjuCdGs3U5fGhy2YEKmGisfPoYWAH"); PushService.setDefaultPushCallback(this, MainActivity.class); ParseInstallation.getCurrentInstallation().saveInBackground(); setContentView(R.layout.main); […..] Si ens fixem en aquest codi veiem la instrucció PushService.setDefaultPushCallback(this, MainActivity.class); Aquest servei Push és una opció que ofereix Parse per tal d’aconseguir una comunicació automática entre la base de dades i l’aplicació a través de comunicacions Push. Un tipus de comunicació Client-Servidor, iniciada pel Servidor. Al moment d’actualitzar-se la base de dades, no cal que el client forçi la comunicació per recuperar les noves dades, és el propi Parse el que envía el refresc de dades al client. Malauradament, aquesta funció no la he pogut incloure en aquests versió de l’aplicació però sense dubte s’integrarà en futures versions ja que veiem que és una funció de molta utilitat per una aplicación de mobilitat on interactúen múltiples usuaris i dispositius. Tornant al codi de l’aplicació que interactua amb Parse, podem tenir dues situacions bàsiques de comunicació: Creació de clases i objectes – Inserció a la base de dades Es crea un objecte ParseObject de la clase que definim com a paràmetre i sobre aquest objecte insertem els atributs i els seus valors corresponents.

Page 56: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 55 de 95

Veiem un exemple: ParseObject Incidencies = new ParseObject("Incidencies"); Incidencies.put("codi",codi); Incidencies.put("usuari",codi_usuari); Incidencies.put("detall",detall); Incidencies.put("Estat", estatInicial); Incidencies.put("Assignacio","0000000"); Incidencies.put("dia_concertacio"," "); Incidencies.put("hora_concertacio"," "); Incidencies.saveInBackground();

En aquest cas es crea l’objecte Incidencies sobre la mateixa classe Incidencies, i posteriorment amb instruccions put s’afegeixen els atributs nom/valor de l’objecte. Finalment , la funcio saveInBackground() guarda les dades a la base de dades del projecte identificat amb els id declarats a l’inici de l’Activity com ja s’ha explicat. Recuperació d’informació de la base de dades La recuperació de les dades amb múltiples comparadors i selectors definits a Parse. Simplement es defineix una ParseQuery sobre una clase existent i es realitzen les seleccions dessitjades sobre aquesta query. Viem un exemple: ParseQuery query = new ParseQuery("Usuaris"); query.whereEqualTo("Usuari", usuari); query.getFirstInBackground(new GetCallback() { public void done(ParseObject object, ParseException e) { if (object == null) { Log.d("usuari", "Incorrecte " + e.getMessage()); Toast.makeText(getApplicationContext(),"Usuari incorrecte. ",Toast.LENGTH_SHORT).show(); } else { String direccio = object.getString("Direccio"); String codi_postal = object.getString("Codi_postal"); String poblacio = object.getString("Poblacio"); String telefon = object.getString("Telefon"); String email = object.getString("Email"); TextView direccioTxt = (TextView)findViewById(R.id.direccioTxt); direccioTxt.setText(direccio);

Page 57: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 56 de 95

TextView codiPostalTxt = (TextView)findViewById(R.id.codiPostalTxt); codiPostalTxt.setText(codi_postal); TextView poblacioTxt = (TextView)findViewById(R.id.poblacioTxt); poblacioTxt.setText(poblacio); TextView telefonTxt = (TextView)findViewById(R.id.telefonTxt); telefonTxt.setText(telefon); TextView emailTxt = (TextView)findViewById(R.id.emailTxt); emailTxt.setText(email); } } });

En aquest cas es crea la ParseQuery anomenada query sobre la classe “Usuaris”. El selector utilizar recuperarà els objectes que tinguin l’atribut Usuari igual al valor de la variable usuari que li passem. Si no es troben objectes, ParseObject=null, es pot mostrar un missatge informatiu que indiqui que no s’han trobat dades o que la dada informada no es troba a la base de dades i que per tan tés incorrecte. Si troba un o més objectes, el tractament pot ser diferent. En aquest cas en el que simplement validem si l’usuari existeix sabem que només ens farà falta una ocurrencia per validar-ho. En altres situacions on volem recollir tots els objectes seleccionats,com incidències d’un operari per exemple, hem de fer un tractament per recorrer tots els objectes amb un List<ParseObject>. Veiem un exemple, localitzat a la AssignacionsActivity.xml: ParseQuery query = new ParseQuery("Incidencies"); query.whereEqualTo("Assignacio", codi_operari); query.findInBackground(new FindCallback() { public void done(List<ParseObject> parseList, ParseException e) { if (e == null) { setData(parseList); […….] public void setData(List<ParseObject> objects) { incidencies.clear(); for (ParseObject parseList : objects) { String codi = parseList.getString("codi"); String nom = parseList.getString("usuari"); String estat = parseList.getString("Estat"); String direccio = parseList.getString("direccio"); String codi_postal = parseList.getString("codi_postal"); String poblacio = parseList.getString("poblacio");

Page 58: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 57 de 95

String telefon = parseList.getString("telefon"); String email = parseList.getString("email"); String detall = parseList.getString("detall"); String dia_concertacio = parseList.getString("dia_concertacio"); String hora_concertacio = parseList.getString("hora_concertacio"); incidencies.add(new Incidencia(codi,nom,estat,direccio,codi_postal,poblacio,telefon, email,detall,dia_concertacio,hora_concertacio)); } }

La visualització de les dades a Parse es pot fer utilitzant el Data Browser del projecte, on es detallen les diferents classes i totes les files de cadascuna d’elles.

Page 59: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 58 de 95

6.5 Google Maps API v2

L’ús de mapes és una funcionalitat vital en aplicacions de mobilitat. Ens permeten visualitzar sobre el dispositiu un mapa on localitzar el punt que s’hagi definit, en el nostre cas les incidències creades. A més de la seva funció principal, la visualització del mapa dona una visió moderna i elegant de l’aplicació i per tant era un objectiu bàsic per implementar. Els dispositius Android s’integren perfectament amb l’aplicació GoogleMaps, (com sinó sent de la mateixa empresa mare!!!). Per això el projecte ha integrat la última versió disponible de GoogleMaps, la versió 2. Per tal d’aconseguir un correcte funcionament de GoogleMaps v2 sobre la nostre aplicació Android, s’ha hagut de realitzar una operativa básica que detallem a continuació. Primer de tot ens hem de descarregar les llibreries necessàries de Google Play Services i integrarles al nostre projecte en l’Eclipse.

Page 60: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 59 de 95

Per altre part s’ha creat un projecte HomeMobile a Google, aquest projecte ens permetrà generar un id key (keytool) que posteriorment haurem de declarar al fitxer AndroidManifest.xml. A la url “https://code.google.com/apis/console” podem veure els diferents projectes creats la compte de Gmail d’entrada, en el nostre cas tenim únicament el projecte HomeMobile.

A l’opció Services podem seleccionar els serveis que volem integrar al nostre projecte, en el nostre cas hem carregat el Google Maps Android API v2

Page 61: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 60 de 95

Al moment de carregar el servei Google ens obre un diàleg on hem d’informar el nom del paquet del projecte, en el nostre cas com.uoc.pfc.homemobile y generar la keytool. Un cop creada la keytool es mostra a l’opció API Access

Aquesta API key és la que hem de declarar a l’AndroidManifest.xml <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyBAQbn7H1C8AN2gkTOWFO-Wnfz0NG8IZM4"/>

En aquest punt tenim l’entorn preparat per treballar amb les llibreries de l’API de Google Maps v2. Una de les funcions claus per geoposicionar la incidencia al mapa és trobar les posicions GPS de la dirección de la vivenda del client. Això es realitza amb un geocode, que simplement és una crida a una URL específica que montem amb la dirección a posicionar. La crida a aquesta url ens torna una resposta en format JSON d’on podem recuperar les posicions GPS de la dirección. public void geocodeDireccio(GoogleMap mMap , String direccio,String codi,String dia_concertacio,String hora_concertacio) throws UnsupportedEncodingException { direccio= direccio.trim().replace(" ","%20"); URLEncoder.encode(direccio);

Page 62: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 61 de 95

HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address=%22"+direccio+"%22&sensor=false"); HttpClient client = new DefaultHttpClient(); HttpResponse response; StringBuilder stringBuilder = new StringBuilder(); try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); Double lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lng"); Double lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lat"); String lat1 = lat.toString(); String lng1 = lng.toString(); Log.d("latitude",lat1); Log.d("longitude",lng1); addIncidenciatoMap(mMap,lat1,lng1,codi,dia_concertacio,hora_concertacio); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); }}

Page 63: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 62 de 95

Un cop tenim les posicions GPS ja podem identificar el punt al mapa utilitzant un objecte GoogleMaps i un addMarker private void addIncidenciatoMap(GoogleMap mMap,String Lat, String Lng,String codi,String dia_concertacio,String hora_concertacio) { double latInt =Double.parseDouble(Lat); double lngInt =Double.parseDouble(Lng); LatLng pos = new LatLng(latInt,lngInt); mMap.addMarker(new MarkerOptions() .title ("INCIDÈNCIA : "+codi) .position(pos) .snippet("Concertació: "+dia_concertacio+"/"+hora_concertacio) .icon (BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)) ); }

Page 64: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 63 de 95

6.6 Altres funcions importants – Fotografia

i signatura L’ús de la cámara de fotos del dispositiu és una funció molt interesant i atractiva, a la vegada que funcional. Els operaris han de poder fer fotografíes dins de cada incidència i poder emmagatzemar-les en local al dispositiu identificades per client. La opció de poder pujar les fotografíes al núvol era una altre opció però es va descartar per falta de temps, és una de les funcions que s’integraran en futures versions. La possibilitat de poder pujar les fotos i poder visualitzar-les des de l’aplicació web ràpidament és una funcionalitat que agrada els coordinadors. Per tal d’integrar la fotografía al layout de l’operari hem optat per utilizar un FrameLayout o superficie sobre la interface. Sobre aquesta superficie podem treballar i realizar moltes operacions sobre ella. Una d’aquestes operacions és obrir un visualitzador de la càmera per fer fotografíes. Entrem en detall d’aquesta complexe operació. Primerament, un cop l’operari a clickat en el botó de la fotografía, s’obre un objecte Camera i es configuren els paràmetres de visualització d’aquest objecte. Seguidament es crea un objecte preview de la clase TomarFotoActivity.És aquesta classe la que controla la generació i conservació de la fotografía. Viem el codi:

1- Generació del preview sobre la superficie de la pantalla definida com a SurfaceView, prèvia conexió i configuración de la càmera.

Button fotoPreview = (Button) findViewById(R.id.buttonFotoPreview); fotoPreview.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mCamera = Camera.open(); Camera.Parameters p = mCamera.getParameters(); p.setPictureSize(120, 60); p.setColorEffect(android.hardware.Camera.Parameters.EFFECT_NONE); p.setJpegQuality(40); p.setPreviewFpsRange(5, 10); p.setPreviewSize(400, 60); mCamera.setParameters(p);

Page 65: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 64 de 95

TomarFotoActivity preview = new TomarFotoActivity(getApplicationContext(),mCamera,usuari,codiIncidencia); ((FrameLayout) findViewById(R.id.preview)).addView(preview); }

2- La classe TomarFotoActivity controla el moment de realitzar la fotografía, en aquest cas als 5 segons , i la posterior conservació de la imatge al dispositiu.Per fer la fotografía es crea un thread que gestiona aquesta espera de temps de 5 segons.

public void surfaceCreated(SurfaceHolder surfaceHolder) { final Handler mHandler = new Handler(); try{ mCamera.setPreviewDisplay(surfaceHolder); mCamera.startPreview(); //Esperem 5 segons per donar temps a posicionar el preview de la càmara thread= new Thread(){ @Override public void run(){ try { synchronized(this){ wait(5000); } } catch(InterruptedException ex){ } mCamera.takePicture(mShutter,null, null, mPicture); final Runnable mensajeFinal = new Runnable(){ public void run(){ Toast.makeText(getContext(),"Fotografia guardada",Toast.LENGTH_SHORT).show(); } }; mHandler.post(mensajeFinal); } }; thread.start();

Page 66: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 65 de 95

} catch (IOException e) { e.printStackTrace(); mCamera.stopPreview(); mCamera.release(); mCamera = null; } }

3- La classe TomarFotoActivity utilitza diferents mètodes per emmagatzemar la fotografia al dispositiu.

//Mètode de tractament de la imatge de la fotografia

final PictureCallback mPicture = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); if (pictureFile == null){ return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); } catch (FileNotFoundException e) { } catch (IOException e) { } } };

//Creació del fitxer a emmagatzemar private File getOutputMediaFile(int type){ //La foto la volem emmagatzemar a la carpeta escpecífica del client dins el

//dispositiu de l'operari.Queden en local

//per a que posteriorment,a la oficina,cada operari les passi a un servidor //comú.

File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "HomeMobilePictures_"+usuari);

Page 67: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 66 de 95

//Si la carpeta del client no existeix es crea if (! mediaStorageDir.exists()){ if (! mediaStorageDir.mkdirs()){ return null; } }

// Formategem el nom del fitxer i es graba String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE){ mediaFile = new File(mediaStorageDir.getPath() + File.separator + usuari+"_"+codiIncidencia+"_"+timeStamp +".jpg"); } else { return null; } return mediaFile; }});

L’ús de dibuixos sobre el dispositu és una funcionalitat que ens ofereix el nostre Samsung Galaxy Note 10.1. Sabem que és una funcionalitat limitada a pocs dispositius, però no per això haviem de no tenir-la en compte. És per això que la nostre aplicació a cercat la manera de trobar una funcionalitat important que requereixi de la realització de traçats sobre la pantalla. Hem cregut que la signatura digital del client era la millor opció per intregar el dibuix a la nostre aplicació. Per aquesta implementació hem generat la classe conformitatView, que defineix el panel de dibuix amb un objecte tipus Canvas amb mapa de bits Canvas canvas = new Canvas(); canvas.setBitmap(img);

El codi de la classe detalla perfectament cadascuna de les funcions que es realitzen: //Classe tipus View que definirà el nostre objecte de treball sobre la pantalla

public class conformitatView extends View { Bitmap _bitmap; Canvas _canvas; final Paint _paint; int lastX; int lastY; public conformitatView(Context c) {

Page 68: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 67 de 95

super(c);

// definim el color de la escriptura

this._paint = new Paint(); this._paint.setColor(Color.WHITE); this.lastX = -1; } public void Reset() { // TODO: clear image }

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { Bitmap img = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(); canvas.setBitmap(img); if (this._bitmap != null) { canvas.drawBitmap(img, 0, 0, null); } this._bitmap = img; this._canvas = canvas; this._canvas.drawColor(Color.BLUE); }

//Es crea la pantalla Canvas tipus mapa de bits per fer la signatura

@Override protected void onDraw(Canvas canvas) { if (this._bitmap != null) { canvas.drawBitmap(this._bitmap, 0, 0, null); canvas.save(); } } //Es guarda la imatge de la signatura al directori que li

indiquem,associat al client i a la incidència en tractament public void savePicture(String usuari,String codiIncidencia){ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "HomeMobilePictures_"+usuari); //Si la carpeta del client no existeix es crea try { if (! mediaStorageDir.exists()){ mediaStorageDir.mkdirs(); } } catch (Exception e) {

Page 69: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 68 de 95

// TODO Auto-generated catch block e.printStackTrace(); } OutputStream fos; try { fos = new FileOutputStream(new File("/mnt/sdcard/Pictures/HomeMobilePictures_"+usuari+"/"+codiIncidencia+"_signatura.jpg")); this._bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finish(); } //Mètode de dibuix public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); int X = (int) event.getX(); int Y = (int) event.getY(); switch (action) { case MotionEvent.ACTION_UP: // reset location this.lastX = -1; break; case MotionEvent.ACTION_DOWN: if (this.lastX != -1) { if ((int) event.getX() != this.lastX) { this._canvas.drawLine(this.lastX, this.lastY, X, Y, this._paint); } } this.lastX = (int) event.getX(); this.lastY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: if (this.lastX != -1) { this._canvas.drawLine(this.lastX, this.lastY, X, Y, this._paint); } this.lastX = (int) event.getX(); this.lastY = (int) event.getY(); break; }

Page 70: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 69 de 95

// Aquesta funció assegura que el dibuix es va refrescant correctament invalidate(); return true; } }

Page 71: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 70 de 95

7. Conclusió i visió de futur

Com a conclusió intentaré donar unes petites pincellades finals de l’aprés al projecte i voldria acabar amb una breu visió final del que m’agradaria implementar en futures versions de l’aplicació. La reflexió final és que estem davant d’un projecte complex, amb moltes i variades funcions i molts components integrats per aconseguir un funcionament el més correcte possible, dintre de les limitacions que existeixen en projectes amb un disseny i una implementació rápida com aquest. Hem aprofondit en la plataforma Android, coneixent les seves fortalesses i també les seves limitacions, ja que debilitats seria molt arriscat donar alguna en una plataforma tan potent. Des del punt de vista de HomeMobile, el projecte ha estat un gran pas endevant en la modernització de les seves operacions de negoci.S’ha passat de tenir les dades agafades a boli en papers de difícil manteniment a tenir les dades el núvol i poder accedir a elles en qualssevol moment des del dispositiu. El més important però, és que ja s’ha generat la base per a una evolució gradual però constant de l’aplicació.Una primera versió que servirá per fer proves pilots en real i poder detectar millores a implementar o problemes a resoldre.La companyia ha entés que és un pas irreversible i que un cop en el camí ja no hi han marxes enrrera sinó evolucions i millores de l’aplicació. Hi han moltes posibles millores ha implementar ja per la propera versió. Les proves realitzades i les propostes dels usuaris han permés recollir nous requeriments a tenir presents. Un dels més importants és la integració d’una aplicació web pels coordinadors.Aquests usuaris treballen més a l’oficina que a camp i les seves operatives es realitzen bàsicament sobre PC.Demanen l’opció de poder realitzar tasques d’assignació,concertació i localització d’incidències des d’una aplicació web.Des del punt de vista tecnològic no veiem cap problema en aquesta implementació. Una nova millora segura ha de ser l’optimització de l’aplicació pel major nombre de dispositius posibles. Actualment s’ha dissenyat per dispositius Tablet.L’objectiu seria aconseguir una renderització òptima de les pantalles per tal d’aconseguir la millor visió en tots els dispositius.

Page 72: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 71 de 95

Altres millores ja comentades previament són: -funció de pujar les fotografíes al núvol associades a la seva incidència, Parse permet emmagatzemar fitxers de fins a 10MB, i així poder disposar d’elles des del moment de fer-les. -opció del Push en Parse, per obtenir notificacions i actualitzacions de dades via Servidor, en aquest pas Parse sense haver de forçar-ho des del client.Aquesta funció és realment important per evitar que els operaris hagin d’anar refrescant manualment les incidències assignades, i poder rebre les noves assignacions automàticament per exemple. -la possibilitat de pujar a més de fotos, videos, també pot ser d’utilitat en certes situacions de incidències grans o complexes. Com veiem, les evolucions i millores serán constants i en permanent revisió, com no podía ser d’un altra manera en una aplicación amb visió empresarial i de futur.

Page 73: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 72 de 95

8. Bibliografia & Webgrafia

A continuació es detalla la diferent bibliografía i webgrafia utilitzada per la reallització d’aquest projecte per dispositius mòbils sobre Android. Sense tot el coneixement que ens han aportat aquestes referències hagués estat del tot imposible la realització del projecte: BIBLIOGRAFIA Head First Android Development, by Jonathan Simon Copyright © 2011 Jonathan Simon.

Android in Action Third Edition, W. FRANK ABLESON,ROBI SEN,CHRIS KING,C. ENRIQUE ORTIZ ©2012 by Manning Publications Co

Practical Android Projects, Lucas Jordan, Pieter Greyling, Ed.Apress, ©2012 by Lucas Jordan, Pieter Greyling WEBGRAFIA http://www.youtube.com/watch?v=mRnEkP2q4fo http://developer.android.com/guide/topics/ui/layout/listview.html http://developer.android.com/reference/android/widget/ListView.html http://www.vogella.com/articles/AndroidListView/article.html https://www.parse.com/docs/android_guide http://developer.android.com/reference/android/hardware/Camera.html http://developer.android.com/guide/topics/media/camera.html https://developers.google.com/maps/documentation/android/ http://developer.android.com/google/play-services/index.html

Page 74: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 73 de 95

http://www.vogella.com/articles/AndroidGoogleMaps/article.html http://developer.android.com/reference/android/app/Activity.html http://androideity.com/2011/07/10/actividades-activities-en-android/ http://stackoverflow.com/tags/android-activity/info http://www.metafisicainformatica.com/2011/03/02/pasando-informacion-entre-actividades-activity-en-android/ http://html-color-codes.info/codigos-de-colores-hexadecimales/ http://developer.android.com/reference/android/graphics/Canvas.html http://blog.vidasconcurrentes.com/android/dibujando-figuras-en-un-canvas-de-android-parte-i/ http://www.androidda.com/2011/03/usar-canvas-drawing-en-android/ http://androideity.com/2013/02/12/usando-surfaceview-en-android-parte-1/ http://www.androidconnect.com.ar/2011/07/usando-surfaceview.html http://developer.android.com/reference/android/view/SurfaceView.html http://developer.android.com/reference/android/text/style/package-summary.html http://developer.android.com/reference/android/view/package-summary.html http://stackoverflow.com/questions/10931419/android-drawing-on-surfaceview-and-canvas

Page 75: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 74 de 95

9. Anex : Manual d’usuari

1. Manual d’usuari : Execució i MainActivity Un cop s’ha instal.lat la aplicació, la tindrem disponible clickant a la icone HomeMobile.

La primera pantalla que es visualitza en executar l’aplicació és la MainActivity:

Page 76: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 75 de 95

Aquesta pantalla inicial ens permet fer 3 accions posibles: 1-Registrar-se com a client – Butó Registre Client Aquesta és una activity lliure tipus formulari

Page 77: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 76 de 95

El codi de client ha de ser únic en la BBDD i amb un mínim de 7 caracters, la password mínim 6 caracters. Nom i cognoms,Document,Pòlissa,Direcció,Codi Postal,Població i Telèfon són obligatoris, el E-mail és opcional. Quan s’inserta correctament un nou usuari client, automàticament tornem a la MainActivity i rebem un missatge de confirmació.

2-Registrar un empleat – Butó Registre Empleat Aquesta operación només la pot realitzar un usuari Administrador configurat internament a la BBDD. Si clickem el botó obtindrem un dialeg per informar un Usuari/Password (ADMHOME/admin):

Page 78: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 77 de 95

Mentres no informem l’usuari administrador correcte no ens deixarà accedir a

registrar empleats.

Page 79: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 78 de 95

Quan l’informem correctament s’obrirà el formulari següent:

Igual als clients, tots els camps són obligatoris excepte l’e-mail.Molt important diferenciar si l’empleat sera un operari o un coordinador. 3- Login a l’aplicació informat Usuari/Password - Butó Entrar

Es pot accedir amb un usuari de qualssevol dels 3 perfils:

Client/Operari/Coordinador. Si no informem un usuari correcte no podrem

accedir i veurem el misatge a la pantalla

Page 80: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 79 de 95

2. Manual d’usuari : Operativa Client

En accedir amb un usuari Client correcte obtindrem el següent menú:

Page 81: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 80 de 95

Amb les 3 possibles accions a realitzar pel client. 1-Editar el seu perfil per actualitzar o per el.liminar.(les dades mostrades son inventades!!!).

Es carreguen les dades de l’usuari excepte la Password, que es podrá canviar

amb confirmació per repetició. Qualssevol de les altres dades es podran

modificar, o podrem el.liminar l’usuari si el client ja no vol operar amb l’aplicació.

Per veure els canvis haurem de sortir i tornar a carregar les dades, el refresc

automàtic des del Parse no s’ha implementat en aquesta versió de l’aplicació.

2- Crear una incidencia.

Amb el següent formulari, simplement explicant la incidencia la podrem crear. La

resta de dades de l’usuari ja es tenen internament.

Page 82: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 81 de 95

3- Revisar el registre d’incidències finalitzades.

L’usuari pot revisar les dades de les intervencions realitzades i finalitzades a la

seva vivenda.

Page 83: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 82 de 95

3. Manual d’usuari : Operativa Coordinador

El Coordinador accedeix a un menú on pot seleccionar revisar les incidències no

assignades o les ja assignades.

Page 84: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 83 de 95

El llistat de incidències sense assignació, sempre en estat NOVA:

El llistat de incidències ja assignades, en estat ASSIGNADA o FINALITZADA:

Page 85: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 84 de 95

En entrar a una incidencia no assignada, el coordinador pot realitzar diferents

operatives:

Concertació: Amb el Date/Time Pickers pot informar el dia i hora de concertació

de la visita. Posteriorment amb el botó concertar visita es carreguen les dates

informades a la base de dades i ja queden visibles al tornar a entrar a la

incidència.

Page 86: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 85 de 95

Indicar que el dia/hora que es veuen sobre els botons Pickers,en format de 12

hores,és la actual del sistema.Quan es defineixen les de concertació canvien. Al

sortir i tornar a entrar a la incidencia, encara que la concertació està informada

ok, els Pickers tornen a agafar la del sistema per si es vol reconcertar a una altra

hora.

Page 87: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 86 de 95

Un altra funcionalitat que pot realitzar el coordinador es veure la localització de

la incidencia sobre el mapa de GoogleMaps.En clickar sobre el butó Mapa, s’obre

un mapamundi, haurem de clickar sobre el botó de localització a la part superior

dreta per situar-nos sobre la posición del dispositiu (amb el GPS activat).

Page 88: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 87 de 95

La incidencia es localitza al mapa amb una gota gran vermella. Si clickem sobre

ella s’obre un dialeg amb el codi de la incidencia i dia/hora de concertació.

El coordinador, com a funció principal, té la d’assignar les incidències als

operaris,en funció de la disponibilitat o localització.Clickant al butó Assignar a

operari s’obrirà un dialeg amb el operaris disponibles per asignar.

Nota:actualmente hi ha un bug que fa que no s’obri el dialeg a la

primera,cal clickar 2 o 3 vegades , crec que es un problema de la query

al Parse.

Page 89: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 88 de 95

Un cop s’assigna la incidencia es rep un missatge de confirmació.

Page 90: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 89 de 95

4. Manual d’usuari : Operativa Operari

La primera pantalla de l’operari és la seva llista d’assignacions:

Seleccionant una d’elles, s’accedeix a la pantalla de detall de la incidencia.

Page 91: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 90 de 95

L’opció Mapa fa el mateix que pel coordinador.Obrir el GoogleMaps per localitzar

la incidencia.

L’opció dels reports permet a l’operari informar les dades de la

intervenció.Inicialment accedeix a una menú d’informes.

L’informe de Resultat permet informar dades bàsiques i observacions. Es guarden a la taula de RESULTATS:

Page 92: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 91 de 95

L’informe de Defectes permet informar, via checkboxs, els problemes bàsics

detectats a la vivenda, es guarden a la taula de DEFECTES:

Finalment, l’informe de Conformitat obre una pantalla on es declara la

conformitat del client amb la intervenció de l’operari. Si el client està conforme es

clickarà en el butó Signatura, sinó en Cancel.lar

Page 93: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 92 de 95

La pantalla de signatura , de fons blau i lletra blanca permet escriure sobre la

pantalla per signar. Nota: És una funcionalitat possible en el dispositiu

definit pel projecte empresarial Samsung Galaxy Note 10.1, amb llapis

incorporat. No s’ha provat amb altres dispositius ni creiem que funcioni

en l’emulador.

En aquesta pantalla s’ha optat per no incloure butons per tenir tota la pantalla

per signar. S’ha inclós un menú tipus Settings on es pot cancel.lar la firma,

netejar la pantalla o donar el ok a la firma. L’Ok de la firma guarda una copia

(sabem que té poca validesa legal) en el dispositiu. En el directori Pictures es

crea una carpeta anomenada HomeMobilePictures_CodiClient per a cada client i

dins es guarden tots els fitxers associats, com ara la firma.

Page 94: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 93 de 95

Finalment, l’opció de fotografía permet a l’operari fer una foto rápida de la

incidencia i que quedi guardada a la carpeta del client identificada amb el codi

d’incidència.

Al clickar sobre el butó Fer fotografía-Automàtic 5 segons, s’obre una superficie

de captació d’imatges i en 5 segons realitza una fotografía automàticament.Amb

això evitem afegir més botons a la pantalla i permet una bona visualització sobre

la pantalla.

Nota: És una funcionalitat molt enfocada a l’operari amb Tablet, no

sabem el posible comportament en altres dispositius, ni la cámara

funciona en l’emulador.

Page 95: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 94 de 95

Finalment veiem com s’han guardat tant la fotografía com la signatura a la

carpeta local associada al client de la incidència:

Page 96: Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco …openaccess.uoc.edu/webapps/o2/bitstream/10609/23144/6... · Memòria Treball Final de Carrera 27-05-2013 Autor: Francisco

TFC–Desenvolupament d’aplicacions per dispositius mòbils Francisco Delgado Palacio

Página 95 de 95

Si obrim els fitxers des de la galería del Tablet: