universidade tecnolÓgica federal do paranÁ curso de...

60
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS CLEVERSON MACHADO APLICATIVO ANDROID PARA MAPEAMENTO DE ROTAS PERCORRIDAS TRABALHO DE CONCLUSÃO DE CURSO PATO BRANCO 2017

Upload: others

Post on 01-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

CLEVERSON MACHADO

APLICATIVO ANDROID PARA MAPEAMENTO DE ROTAS PERCORRIDAS

TRABALHO DE CONCLUSÃO DE CURSO

PATO BRANCO 2017

Page 2: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

CLEVERSON MACHADO

APLICATIVO ANDROID PARA MAPEAMENTO DE ROTAS PERCORRIDAS

Trabalho de Conclusão de Curso de graduação, apresentado à disciplina de Trabalho de Diplomação, do Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas, da Universidade Tecnológica Federal do Paraná, Câmpus Pato Branco, como requisito parcial para obtenção do título de Tecnólogo. Orientadora: Profa. Beatriz Terezinha Borsoi

PATO BRANCO 2017

Page 3: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

Ministério da Educação Universidade Tecnológica Federal do Paraná

Câmpus Pato Branco Departamento Acadêmico de Informática

Curso de Tecnologia em Análise e Desenvolvimento de Sistemas

TERMO DE APROVAÇÃO

TRABALHO DE CONCLUSÃO DE CURSO

APLICATIVO ANDROID PARA MAPEAMENTO DE ROTAS PERCORRIDAS

por

CLEVERSON MACHADO

Este trabalho de conclusão de curso foi apresentado no dia 19 de junho de 2017,

como requisito parcial para obtenção do título de Tecnólogo em Análise e

Desenvolvimento de Sistemas, pela Universidade Tecnológica Federal do Paraná. O

acadêmico foi arguido pela Banca Examinadora composta pelos professores abaixo

assinados. Após deliberação, a Banca Examinadora considerou o trabalho

aprovado.

Banca examinadora:

Profa Dra Beatriz Terezinha Borsoi Orientadora

Profa Me. Andreia Scariot Beulke

Prof. MSc. Robison Cris Brito

Prof. Dr. Edilson Pontarolo Coordenador do Curso de Tecnologia em Análise e Desenvolvimento de Sistemas

Profª Dra Beatriz Terezinha Borsoi Responsável pela Atividade de Trabalho de

Conclusão de Curso

A Folha de Aprovação assinada encontra-se na Coordenação do Curso.

Page 4: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

AGRADECIMENTOS

A Deus pоr ser essencial еm minha vida, autor dе mеu destino, mеυ guia, socorro presente nа hora dа angústia.

À minha família, especialmente a meu pai, Leonildo e minha mãe Irene pela dedicação de uma vida inteira de ensinamentos e por sempre me incentivarem ao estudo.

À minha Orientadora, professora Beatriz T. Borsoi, primeiramente, pela confiança depositada em mim, ao me acompanhar nessa jornada de desenvolvimento deste trabalho, pelo incentivo, por todo o tempo dedicado e conhecimentos transmitidos, não só nessa etapa, mas em todo o

decorrer do curso. A todos os excelentíssimos professores, com quem tive a oportunidade de conviver e

aprender, que não mediram esforços para transmitirem seus conhecimentos de forma fácil e didática.

À minha namorada Simelli, pessoa com quem compartilho todos os momentos de minha vida, com você me sinto mais vivo a cada dia. Obrigado pelo carinho e incentivo, pela paciência,

pelo ombro amigo e pelo incondicional apoio e compreensão nos momentos em que não pude te dar a devida atenção, para que este projeto pudesse ser finalizado.

Ao Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas, da Universidade Tecnológica Federal do Paraná, Câmpus Pato Branco, е às pessoas cоm quem

convivi nesse espaço ао longo desses anos. Agradeço a todos aqueles qυе, foram ou não aqui citados, mas que dе alguma forma,

estiveram е estão próximos dе mim, me incentivando e fazendo a vida valer cada vеz mais а pena.

Page 5: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

RESUMO

MACHADO, Cleverson. Aplicativo Android para mapeamento de rotas percorridas. 2017. 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas, Universidade Tecnológica Federal do Paraná, Câmpus Pato Branco. Pato Branco, 2017. Os dispositivos móveis possuem um uso bastante amplo, pois suas aplicações são muitas e diversificadas, de entretenimento a ferramenta de trabalho utilizada pelas empresas. Dados estatísticos confirmam o elevado número de pessoas que possuem esses dispositivos. Equipamentos originalmente criados para realizar ligações telefônicas, atualmente eles são utilizados para as mais diversas finalidades de entretenimento e tem se tornado cada vez mais uma ferramenta indispensável em negócios. Os recursos oferecidos por esses equipamentos, planejados, inicialmente, para telefonia móvel, atualmente incluem, entre outros, câmeras, acelerômetro, Global Positioning System (GPS), leitura de impressão digital, sensores e reconhecimento de movimentos. Considerando a quantidade desses dispositivos existentes e os muitos recursos que eles oferecem, propõe-se o desenvolvimento de um aplicativo Android para mapeamento de rotas percorridas pelo usuário. O uso inicialmente pensado é para esportistas e amadores que percorrem caminhos (trilhas, por exemplo) desconhecidos e que possam retornar dessas trilhas com segurança e refazer o trajeto em outras ocasiões (repercorrer). Esse uso não se aplica somente a lugares de difícil identificação, como pântanos, matas e regiões desérticas, mas pode ser usado por turistas em cidades desconhecidas. Contudo, o aplicativo, com os devidos ajustes, pode ser utilizado para diversos fins comerciais e pessoais que requeiram o registro do caminho percorrido, como roteamento de frotas e de entregas. O aplicativo desenvolvido permite definir a granularidade de marcação dos pontos da rota em termos de distância (a cada quantos metros inserir um marcador) ou em tempo (a cada quantos minutos inserir um marcador da rota). Palavras-chave: Aplicação Android. GPS. Dispositivos móveis.

Page 6: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

ABSTRACT

MACHADO, Cleverson. Android device app for mapping traveled routes. 2017. 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas, Universidade Tecnológica Federal do Paraná, Câmpus Pato Branco. Pato Branco, 2017. Mobile devices are widely used. Statistical data confirm the high number of people who have these devices. The mobile applications are also many and diversified. The features offered by these devices, initially planned for mobile telephony, today include, among others, cameras, accelerometer, Global Positioning System (GPS), fingerprint reading, sensors and motion recognition. Considering the number of these devices and the many features they offer, it is proposed to develop an Android application for mapping routes traveled by the user. The initial use is intended for athletes and amateurs who walk unknown paths (trails, for example) and who can safely return from these trails and re-record them. This use does not apply only to places of difficult identification such as marshes, forests and desert regions, but can be used by tourists in unknown cities. However, the application, with the appropriate adjustments, can be applied to various commercial and personal uses that require registration of the path traveled. The application allows the user to specify the granularity of the route points (in distance or time) Keywords: Android application. GPS. Mobile devices.

Page 7: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

LISTA DE FIGURAS Figura 1 – Uso de dispositivos Mobile ................................................................................. 12

Figura 2 – Arquitetura do sistema operacional Android........................................................ 18

Figura 3 – Diagrama de casos de uso.................................................................................... 25

Figura 4 – Diagrama de entidades e relacionamentos do banco de dados.............................. 30

Figura 5 – Tela splash .......................................................................................................... 32

Figura 6 – Página principal .................................................................................................. 33

Figura 7 – Alert Dialog de início de captura de rota ............................................................. 34

Figura 8 – Tela principal com rastreador ativo ..................................................................... 35

Figura 9 – Lista de rotas....................................................................................................... 36

Figura 10 – Exibindo pontos de rota..................................................................................... 37

Figura 11 – rota sendo repercorrida...................................................................................... 38

Figura 12 – Informações de ponto ........................................................................................ 39

Figura 13 – Exclusão de rotas .............................................................................................. 40

Figura 14 – Tela de preferências .......................................................................................... 41

Page 8: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

LISTA DE QUADROS Quadro 1 - Ferramentas e tecnologias utilizadas................................................................... 20

Quadro 2 – Requisitos funcionais......................................................................................... 24

Quadro 3 – Requisitos não funcionais .................................................................................. 25

Quadro 4 – Caso de uso armazenar rota ............................................................................... 26

Quadro 5 – Caso de uso visualizar rota atual ........................................................................ 27

Quadro 6 – Caso de uso exibir lista de rotas ......................................................................... 27

Quadro 7 – Caso de uso excluir dados.................................................................................. 28

Quadro 8 – Caso de uso visualizar configurações................................................................. 28

Quadro 9 – Caso de uso rastrear service ............................................................................... 29

Quadro 10 – Caso de uso repercorrer rota ............................................................................ 30

Quadro 11 – Campos da tabela rota...................................................................................... 30

Quadro 12 – Campos da tabela pontos_rota.......................................................................... 30

Quadro 13 – Descrição da classe rota ................................................................................... 31

Quadro 14 – Descrição da classe pontos_rota....................................................................... 31

Page 9: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

LISTAGEM DE CÓDIGO

Listagem 1 – rotina de captura de dados do banco SqLite..................................................... 42

Listagem 2 – cálculo da distância entre dois pontos de GPS ................................................. 42

Listagem 3 – Verificação de conexão com a rede de dados................................................... 43

Listagem 4 – Permissão de verificação de conexão com a rede............................................. 43

Listagem 5 – Busca de dados de localização com Geocoder API.......................................... 43

Listagem 6 – Update de uma rota na base de dados .............................................................. 44

Listagem 7 – Adapter personalizado .................................................................................... 45

Listagem 8 – Método de captura de opção selecionada......................................................... 46

Listagem 9 – Adição de item em componente Spinner ......................................................... 46

Listagem 10 – Inserção de nova rota .................................................................................... 46

Listagem 11 – Chamada do serviço de captura de pontos GPS ............................................. 47

Listagem 12 – onStartCommand .......................................................................................... 48

Listagem 13 – Início do serviço de captura de dados GPS .................................................... 48

Listagem 14 – Solicitação de permissão de captura de geoposição ....................................... 49

Listagem 15 – Método onLocationchanged() ....................................................................... 49

Listagem 16 – Thread de gravação....................................................................................... 50

Listagem 17 – Método onMapaReady() ............................................................................... 50

Listagem 18 – Inserindo pontos e linhas no mapa................................................................. 51

Listagem 19 – calculo de distância entre pontos ................................................................... 52

Listagem 20 – validação de atualização de mapa.................................................................. 52

Listagem 21 – Exclusão de rotas .......................................................................................... 53

Listagem 22 – Layout de preferências .................................................................................. 54

Listagem 23 – Recuperando dados de preferências............................................................... 55

Page 10: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

LISTA DE SIGLAS API Application Programming Interface

CDMA Code Division Multiple Access

CRM Customer Relationship Management

CSS Cascade Style Sheet

DAO Data Access Object

GPS Global Positioning System

GSM Global System for Mobile communications

HTML Hypertext markup Language

PDA Personal Digital Assistent

RF Requisito Funcional

RNF Requisito Não Funcional

TI Tecnologia de Informação

XML eXtensible Markup Language

Page 11: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

SUMÁRIO

1 INTRODUÇÃO............................................................................................................... 11

1.1 CONSIDERAÇÕES INICIAIS ...................................................................................... 11

1.2 OBJETIVOS.................................................................................................................. 13

1.2.1 Objetivo Geral............................................................................................................. 13

1.2.2 Objetivos Específicos .................................................................................................. 13

1.3 JUSTIFICATIVA .......................................................................................................... 13

1.4 ESTRUTURA DO TRABALHO ................................................................................... 14

2 REFERENCIAL TEÓRICO .......................................................................................... 15

2.1 CONCEITOS................................................................................................................. 15

2.2 CLASSIFICAÇÃO DE APLICAÇÕES MÓVEIS.......................................................... 16

2.3 A PLATAORMA ANDROID ........................................................................................ 17

3 MATERIAIS E MÉTODO ............................................................................................. 20

3.1 MATERIAIS.................................................................................................................. 20

3.2 MÉTODO ...................................................................................................................... 20

4 RESULTADO ................................................................................................................. 23

4.1 ESCOPO DO SISTEMA................................................................................................ 23

4.2 MODELAGEM DO SISTEMA...................................................................................... 24

4.3 APRESENTAÇÃO DO SISTEMA ................................................................................ 31

4.4 IMPLEMENTAÇÃO DO SISTEMA ............................................................................. 41

5 CONCLUSÃO................................................................................................................. 56

REFERÊNCIAS................................................................................................................. 58

Page 12: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

11

1 INTRODUÇÃO

Este capítulo apresenta as considerações iniciais, os objetivos e a justificativa do

trabalho e a apresentação dos capítulos subsequentes.

1.1 CONSIDERAÇÕES INICIAIS

Em 2013, o número de celulares alcançou 6,8 bilhões, representando 96% do total da

população (GLOBAL..., 2014), se considerado apenas um aparelho por habitante, mas esse

não é o caso. É comum que pessoas possuam chip de operadoras distintas em um mesmo

aparelho celular e que uma pessoa possua mais de um aparelho. Estudo realizado pelo Gartner

Group (2015) indicou que o sistema operacional que dominaria em 2015 seria o Android, com

praticamente 50% do mercado. Em 2016 o número superou 1,5 bilhão de smartphones no

mundo (MOBILE TIME, 2017a). Estudo do Emarheter projeta que haverá 2,56 bilhões de

pessoas sendo usuários de smartphones em 2018.

Considerando que atualmente os smartphones estão se tornando mais rápidos, com

telas maiores e processadores múltiplos, eles também estão permitindo realizar atividades

costumeiramente destinadas aos computadores pessoais, seja no campo da educação, dos

negócios ou doméstico (NAGESH; CAICEDO, 2012).

Alguns dos dispositivos móveis (smartphones e tablets, por exemplo) mais populares

incluem (PAVLIĆ; PAVLIĆ; JOVANOVIĆ, 2012): iPhone, iPad, Eee Pad, Blueberry e Slate

PC. Esses mesmos autores destacam que no campo dos smartphones quatro sistemas

operacionais são atualmente dominantes no mercado: Symbian (Nokia), Android (Google),

iOS (Apple) e Windows Mobile (Microsoft).

Pesquisa realizada pela Stat Counter, em março de 2017, apresenta que foi a primeira

vez o sistema operacional Android ultrapassou o Sistema Operacional Windows em tráfego

online (MOBILE TIME, 2017b), indicando o real crescimento do uso de dispositivos móveis

pela população mundial. A Figura 1 apresenta percentuais de utilização de smartphones pela

população mundial.

Page 13: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

12

Figura 1 – Uso de dispositivos Mobile Fonte: Cnova Marktplace (2015, p.s.n.).

As tecnologias móveis tais como os smartphones estão definindo uma nova geração de

consumidores e de aplicações de negócio (TENG; HELPS, 2010). Esses autores destacam

que a partir do surgimento da web, com uso de email para acesso remoto a Customer

Relationship Management (CRM), não há limite para o que pode ser realizado com

dispositivos móveis.

Para os profissionais de Tecnologia de Informação (TI) esse nível sem precedentes de

mobilidade é tanto uma oportunidade como um desafio (TENG; HELPS, 2010). A adoção de

tecnologias móveis pode ser um processo complexo, não somente por causa do grande

número de tipos de dispositivos existentes com um crescente número de sistemas operacionais

(como, por exemplo, BlackBerry OS, Windows Mobile, Symbian OS e iPhone OS), mas,

também, porque desenvolver aplicativos para esses dispositivos envolve diversos sistemas

backend e uma variedade de tecnologias sem fio, como, Code Division Multiple Access

(CDMA), Global System for Mobile communications (GSM), Wi-Fi, WiMax, 3G e 4G

networks.

Os dispositivos móveis também podem ser utilizados para finalidades de

geolocalização. Aplicativos como Google Maps fazem uso de Global Positioning System

(GPS) e os aplicativos que executam nos dispositivos móveis podem utilizar recursos que

permitem obter a localização geográfica atual do usuário, por exemplo. Duas formas básicas

de localização são consideradas atualmente: localização por GPS e triangulação do sinal GSM

(EICHLER; LUKE; REUFENHEUSER, 2009).

O GPS é um sistema de posicionamento que tem como base os sinais enviados por

uma rede de satélites. O receptor GPS calcula o tempo que o sinal, de pelo menos três

satélites, leva para chegar e, a partir desse tempo calcula sua posição com alta precisão, tendo

uma probabilidade de erro de poucos metros (MORIMOTO, 2010). A localização por

triangulação de sinal GSM consiste em fornecer a localização atual do usuário baseado na

Page 14: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

13

intensidade do sinal deste para com as torres próximas a sua localização atual. Quanto mais

torres existirem próximas à localização do usuário, maior será a precisão de sua localização

(MORIMOTO, 2010).

Utilizando recursos como GPS, neste trabalho, é reportando o desenvolvimento de um

aplicativo para dispositivos móveis Android. Esse aplicativo permitirá o registro de rotas

realizadas pelo usuário.

1.2 OBJETIVOS

A seguir são apresentados o objetivo geral e os objetivos específicos alcançados com a

realização deste trabalho.

1.2.1 Objetivo Geral

Desenvolver um aplicativo para dispositivos móveis Android para a marcação de

pontos registrando uma rota realizada pelo usuário.

1.2.2 Objetivos Específicos

• Permitir que o usuário possa refazer uma rota, com a indicação de

distância/proximidade do usuário dessa rota.

• Possibilitar que o usuário possa configurar a distância ou o tempo para marcação

dos pontos da rota.

• Obter a distância da rota por meio do cálculo da distância entre os pontos que

foram marcados e que compõem uma rota.

1.3 JUSTIFICATIVA

A marcação de rotas pode ser vista com duas funcionalidades básicas quando para uso

não vinculado a negócio. Uma delas é a definição de um caminho que possa ser

posteriormente percorrida. Por exemplo: marcar uma rota ou caminho de uma trilha ecológica

e que ela possa ser posteriormente percorrida (usuário retornar ao ponto inicial) com a ajuda

do aplicativo. Outra aplicação básica é realizar a medição da distância entre o início e o final

Page 15: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

14

da rota percorrida. Por exemplo: uma pessoa quer saber a distância que andou a pé, de

bicicleta ou de carro em um determinado trajeto marcado pelo aplicativo.

A definição de rotas pode ser bastante útil para profissionais e amadores que se

deslocam em locais com trilhas ou estradas não definidas, não devidamente marcadas,

desconhecidas ou de acesso e localização difíceis, como matas, pântanos, áreas desérticas ou

mesmo em uma cidade ou local desconhecido. As rotas, definidas quando o caminho foi

realizado, podem ser utilizadas para o retorno. Essas rotas também podem ser utilizadas pela

própria pessoa ou por outras que desejam fazer (repercorrer) o mesmo trajeto.

Em termos de aplicações comerciais são diversos os usos de mapeamento de rotas,

como para empresas de logística, entrega e transportadoras, por exemplo.

1.4 ESTRUTURA DO TRABALHO

O texto a seguir está organizado em capítulos. O Capítulo 2 apresenta a

fundamentação conceitual para o aplicativo desenvolvido que é para dispositivos móveis

Android. No Capítulo 3 são apresentadas as tecnologias, as ferramentas e as principais

atividades realizadas para desenvolver o trabalho. No Capítulo 4 é apresentado o sistema

desenvolvido por meio da modelagem realizada, das telas implementadas e de exemplos de

códigos desenvolvidos. Por fim estão as considerações finais seguidas das referências

utilizadas no texto.

Page 16: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

15

2 REFERENCIAL TEÓRICO

Este Capítulo apresenta o referencial teórico que fundamenta o aplicativo

desenvolvido como resultado da realização deste trabalho. O capítulo apresenta conceitos

sobre aplicações móveis e a plataforma Android. O aplicativo desenvolvido é para

dispositivos móveis Android.

2.1 CONCEITOS

Um aplicativo móvel é um software que pode ser executado em um dispositivo

eletrônico móvel, como os telefones celulares, os Personal Digital Assistent (PDA) e os

smartphones.

As aplicações móveis são caracterizadas como as que fornecem suporte à

interoperabilidade e à mobilidade (CHA; BERND; DU, 2009). Para esses autores

interoperabilidade é a capacidade de uma aplicação executar em diversas plataformas móveis

e mobilidade é a capacidade de a aplicação ser transferida entre redes heterogêneas.

Existem diversas plataformas ou sistemas operacionais para dispositivos móveis,

como Android, iOS, Windows Phone e BlackBerry. Dados de 2012 indicavam o Android com

67% do mercado de dispositivos móveis (JORDÃO, 2012) e dados de 2013 indicam Android

e iOS com 92,3% das vendas de smartphones (JORDÃO, 2013).

Android é o nome do sistema operacional baseado em Linux para celulares

(smartphones), netbooks e tablets (SIGNIFICADOS, 2017). Esse sistema operacional é

projetado para ser utilizado, principalmente, em dispositivos móveis com tela sensível ao

toque (para manipulação de objetos e uso de teclado virtual) como smartphones e tablets. Há,

ainda, a possibilidade de uso das interfaces específicas para televisão (Android TV), veículos

(Android Auto) e relógios (Android Wear). Além disso, pode ser utilizado em consoles de

videogames, câmeras digitais, computadores e dispositivos eletrônicos.

Page 17: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

16

2.2 CLASSIFICAÇÃO DE APLICAÇÕES MÓVEIS

Nagesh e Caicedo (2012) categorizam as aplicações móveis genericamente em três

categorias, embora Lionbridge (2012), as categorizem apenas como nativas e web:

a) Aplicações móveis nativas – essas aplicações são construídas para hardware e

sistema operacional específico, assim, elas podem obter vantagem dos recursos tecnológicos

mais recentes desenvolvidos para os respectivos dispositivos móveis e podem integrar

aplicativos on-board como calendário, agenda e email (LIONBRIDGE, 2012).

b) Aplicações móveis baseadas na web – essas aplicações são acessadas por meio de

um navegador web para dispositivos móveis (LIONBRIDGE, 2012). Como ocorre com as

aplicações web, uma aplicação web móvel é construída com três tecnologias essenciais:

Hypertext Markup Language (HTML) para os textos estáticos e as imagens; Cascade Style

Sheet (CSS) para definir estilos e apresentação e JavaScript para implementar as interações e

as animações.

c) Aplicações móveis híbridas – essas aplicações são desenvolvidas utilizando

bibliotecas de código fonte aberto e também possuem acesso aos recursos nativos dos

dispositivos como câmera, GPS, acelerômetro e sistema de arquivos (NAGESH; CAICEDO,

2012). É possível utilizar tecnologias web para o desenvolvimento de aplicações com acesso

nativo a recursos dos dispositivos (SINGH, 2013).

Já Unhelkar e Murugesan (2010) classificam as aplicações móveis no contexto

empresarial em cinco categorias:

a) m-broadcast - broadcast móvel – aplicações que transmitem diferentes tipos de

conteúdo para um grande grupo de usuários. Facilita divulgação de informação em larga

escala (broadcast) como avisos e promoções.

b) m-information - informação móvel – aplicações que apresentam informações

solicitadas pelo usuário e o fluxo é unidirecional, no sentido da não iteração do usuário com o

aplicativo, ou seja, somente do aplicativo para o usuário Provê informações para usuários de

dispositivos móveis.

c) m-transaction - transação móvel – facilita a execução de transações, gerenciamento

de relacionamento com o consumidor, vendas e marketing. Por meio desses aplicativos os

usuários podem rastrear compras e vendas realizadas.

d) m-oppeation - operação móvel – suportam aspectos operacionais de um negócio que

não envolve interação direta com clientes ou compradores. Essas aplicações facilitam os

Page 18: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

17

aspectos operacionais de negócio da empresa. Elas oferecem acesso às informações, como de

estoque, agenda de produção, de folha de pagamento e balanços.

e) m-collaboration colaboração móvel – mantém colaboração entre empregados e

unidades funcionais em uma empresa. Essas aplicações suportam colaboração dentro e fora da

empresa. Além disso, facilitam a colaboração com outras empresas de interesse ou parceiras

de negócio. Exemplos de aplicações que pertencem a essa categoria são aplicações de redes

sociais que podem auxiliar a criar e gerenciar grupos de pessoas (empregados, clientes,

fornecedores).

Para Unhelkar e Murugesan (2010) as aplicações das três últimas categorias que

necessitam de requisitos e desafios diferentes dos necessários às aplicações das duas primeiras

categorias.

Karadimce e Bogatinoska (2014) ressaltam que considerando as diferenças inerentes

nessas tecnologias, cada abordagem possui benefícios e desvantagens. Para esses autores as

aplicações móveis nativas são construídas para dispositivos móveis específicos e seu

respectivo sistema operacional. As aplicações web móveis são, geralmente, obtidas por

dowload de um servidor web a cada vez que são executadas, embora aplicações construídas

com HTML5 podem ser executadas no dispositivo móvel de forma offline (LIONBRIDGE,

2012). Com as aplicações web móveis, o grau de acesso dos recursos dos dispositivos não é

comparável com as aplicações móveis nativas, mas é melhor que o acesso das aplicações web

móveis (NAGESH; CAICEDO, 2012).

2.3 A PLATAORMA ANDROID

A plataforma Android é caracterizada como uma pilha (camadas) de software

composta por um sistema operacional, middleware e aplicações de base (ANDROID, 2016).

Com um viés centrado em aplicabilidade, Guana et al. (2012) definem Android como é um

sistema operacional visto como um conjunto de serviços de software especialmente

desenvolvidos para dispositivos móveis.

A arquitetura da plataforma Android é composta por cinco camadas com

funcionalidades e comportamentos específicos que são: aplicações, framework, bibliotecas,

runtime e kernel Linux. A base dessa arquitetura é o kernel do Linux, que funciona como uma

Page 19: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

18

camada de abstração entre o hardware e os aplicativos que executam na plataforma (GUANA

et al. 2012).

Na plataforma Android, as aplicações são escritas em Java e executadas em sua

própria máquina virtual, a Dalvik, que por sua vez é executada em seu próprio processo no

Linux, isolando-a de outras aplicações e facilitando o controle de recursos (ANDROID

DEVELOPER, 2012). A Figura 2 apresenta a organização da arquitetura do Android.

Figura 2 – Arquitetura do sistema operacional Android

Fonte: Android Developer (2016, p.s.n.).

A seguir uma breve descrição das camadas da arquitetura do sistema operacional

Android apresentada na Figura 2 (GUANA et al., 2012, MAJI et al., 2010):

a) Applications – camada que contém um conjunto de aplicações como clientes de

emails, aplicativos de mensagens, calendário, navegador de mapa e navegadores de jogos que

estendem as funcionalidades do sistema operacional. Essas aplicações são disponibilizadas

com a distribuição do Android.

b) Application framework – contém elementos que visam o uso de componentes no

Android. Com os elementos desse framework, tais como intents, content providers, views e

managers, é possível construir aplicações para executar no kernel Android e interoperar entre

si e com outras aplicações.

Page 20: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

19

c) Libraries – contém bibliotecas compostas por um conjunto de pacotes C/C++

usados pelo framework de aplicação para gerenciar a renderização da interface, prover

segurança dos aplicativos no dispositivo e a persistência de aplicações, entre outros. Essa

camada inclui bibliotecas C do sistema, gerenciadores de interface, engine gráfica 2D e 3D,

codecs de mídia, a base de dados SQLite e a engine LibWebCore do navegador web.

d) Android Runtime – contém a máquina virtual Dalvik e as bibliotecas básicas

Android que especificam o ambiente de execução da aplicação dentro do sistema operacional.

As bibliotecas básicas provem a maioria das funcionalidades disponíveis em Java. Dalvik

opera como um tradutor entre a aplicação e o sistema operacional. Toda aplicação Android

executa em seu próprio processo, com sua própria instância da máquina virtual Dalvik.

e) Linux kernel – é um kernel Linux customizado usado para prover as

funcionalidades de baixo nível do sistema operacional tais como gerenciamento de memória e

agendamento de processos.

Page 21: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

20

3 MATERIAIS E MÉTODO

A seguir estão os materiais e o método utilizados para a modelagem e a

implementação do sistema obtido resultado deste trabalho.

3.1 MATERIAIS

No Quadro 1 estão as ferramentas e as tecnologias utilizadas na análise e no

desenvolvimento da aplicação mobile.

Ferramenta / Tecnologia

Versão Referência (site) Finalidade

Google Maps API 24.0.2 https://developers.google.com/maps/documentation/android-api/?hl=pt-br

Application Programming

Interface (API) de integração com mapas.

Google Goecoder API V2

1.2.2 https://developers.google.com/maps/documentation/geocoding/intro?hl=pt-br

Captura de descrição de localização atraves de coordenadas.

Android Studio V2.0 https://developer.android.com/studio/index.html?hl=pt-br

Ferramenta de desenvolvimento Android.

Android SDK V2.0 http://developer.android.com/sdk Kit de desenvolvimento de software do Android.

SQLite 3.19 https://www.sqlite.org/ Armazenamento de dados no dispositivo móvel.

Quadro 1 - Ferramentas e tecnologias utilizadas

3.2 MÉTODO

O método consiste nas atividades de levantamento de requisitos, modelagem desses

requisitos e na implementação do aplicativo. A seguir descrita sucintamente a realização

dessas etapas.

Levantamento de requisitos

A ideia da implementação do aplicativo surgiu a partir do desenvolvimento de outra

aplicação para monitoramento de localização. No desenvolvimento dessa aplicação verificou-

se a utilidade de uma ferramenta capaz de gravar caminhos percorridos e possibilitar refazer

esses caminhos com o auxílio de indicação se a rota está ou não sendo seguida.

Page 22: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

21

As funcionalidades foram desenvolvidas a partir da análise de como as pessoas ficam

confusas (como vendedores em uma cidade nova) ao visitar locais desconhecidos e não

saberem exatamente como chegar a determinado local para poder voltar posteriormente, ou

mesmo para saberem como efetuar o retorno para o local de origem.

Outra motivação e circunstância de análise para definição dos requisitos foi a

observação que pessoas acabam se perdendo em trilhas por não saberem o caminho de volta,

ou por ficar caminhando em círculos em locais desconhecidos.

Para o levantamento de requisitos complementares e visando um viés prático para

usuários não empresariais, foram consideradas indicações de funcionalidades que seriam úteis

em uma aplicação desse tipo realizadas pela Profa. Beatriz T. Borsoi e pelo Prof. Robson C.

Brito.

Análise e projeto

A análise e o projeto consistiram na modelagem dos requisitos. A modelagem dos

requisitos é bastante simples em termos de casos de uso e de persistência de dados. O

aplicativo ficará armazenado no dispositivo móvel do usuário e não haverá necessidade de

controle de permissões de acesso ou de restrição de acesso às funcionalidades, até porque

haverá apenas um perfil de acesso. O banco de dados consiste de apenas duas tabelas para

persistência das rotas (os caminhos percorridos).

Implementação

A implementação da aplicação foi dividida em oito etapas:

1) Interface inicial e preferências

A etapa inicial de implementação foi focada no desenvolvimento da interface de

abertura do aplicativo (splash), da interface de menu de opções com uso de Adapter próprio,

na implementação de listas personalizada de itens e de dialogs.

2) Captura de posições GPS e apresentação em mapa

Na segunda etapa, o foco foi o desenvolvimento de rotina de captura de sinal GPS por

meio da API Google Maps com o processamento dos dados recebidos e exibição em tela de

mapa no dispositivo Android. E na interface de mapa foram implementados botões para

facilitar a aplicação de zoom.

3) Desenvolvimento de tabelas SQLite para persistência

A terceira etapa foi voltada para a projeção das tabelas necessárias buscando suprir as

necessidades de persistências da aplicação. Foram projetadas duas tabelas sendo uma delas

com chave estrangeira buscando maior integridade e referenciamento de registros de rotas

salvas.

Page 23: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

22

4) Identificação e persistência de rotas

Nessa etapa foi adaptada a interface do aplicativo para solicitar uma descrição de rota

ao iniciar o rastreamento, também foi desenvolvida a interface Data Access Object (DAO)

para persistência e recuperação de dados da base SQLite.

5) Listagem de rotas salvas

Na quinta etapa foi desenvolvido um novo Adapter para uma nova tela de listagem

para exibir as rotas salvas no SqQLite, disponibilizando opção para o usuário excluir uma rota

ou visualizar a rota percorrida em uma interface de mapa.

6) Serviços de captura de posição GPS e busca de localização

Nessa etapa foi migrada a rotina de captura de localização para função de serviço do

Android, possibilitando iniciá-lo de outras telas. Também foi implementado um serviço que

percorre as posições persistidas na base SQLite e busca a descrição da localização utilizando a

API Google Geocoder.

7) Cálculo de distâncias

Nessa etapa, no serviço de busca de descrição foi incluída uma funcionalidade para

efetuar o cálculo das distâncias percorridas em cada rota, bem como a inclusão desse cálculo

na carga dos pontos da rota para exibição no mapa.

8) Funcionalidade para repercorrer (refazer) uma rota

Nessa última etapa foi implementada opção para o usuário realizar novamente uma

rota, repercorrer, utilizando como referência os pontos capturados quando essa rota foi

percorrida anteriormente. Essa opção está disponível ao visualizar uma rota específica, no

mapa, e pode ser acessada pelo botão ‘Guiar’.

Page 24: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

23

4 RESULTADO

Este capítulo apresenta o resultado da realização deste trabalho.

4.1 ESCOPO DO SISTEMA

O aplicativo desenvolvido tem a finalidade principal de ser um rastreador que

armazenará rotas percorridas pelo usuário, recuperando, posteriormente, posições marcadas

na rota, horário de ocorrência das marcações, locais de marcação (pontos geográficos que

definem a posição no mapa físico com marcador), velocidade aproximada de deslocamento e

distância percorrida. A cada intervalo de pontos marcados pelo usuário, o aplicativo medirá a

distância e, assim, ao final do trajeto será obtida por somatório a distância total, ou somatórias

parciais de acordo com o avanço do deslocamento.

O aplicativo permite ao usuário repercorrer uma rota já realizada, ou seja, o aplicativo

indicará, por meio dos pontos armazenados para a rota marcada no mapa, a direção que o

usuário deverá seguir para realizar o caminho indicado pela rota. A distância parcial, ou seja,

a que é apresentada à medida que o usuário se desloca possibilita orientar o usuário a fazer um

retorno (repercorrer a rota do ponto final para o ponto inicial) ou refazer a rota do ponto

inicial para o ponto final que foi marcado com mais precisão.

O sistema desenvolvido como resultado deste trabalho, permitirá que o usuário grave

todos os caminhos pelos quais passou, auxiliando-a a refazer o caminho ou retornar ao ponto

de partida em segurança, sem o risco de errar o caminho. Como exemplos de utilização dessa

aplicação pode-se citar: caminhadas, trilhas ecológicas, trajetórias em cidades ou bairros

desconhecidos e até com registros de onde o(s) veículo(s) da frota passaram. A solução

proposta considera o contexto apresentado a seguir:

Um usuário pode percorrer mais de um caminho e manter registros separados desses

caminhos para posterior deslocamento de retorno. O aplicativo funciona mesmo sem sinal de

internet (WiFi) e sem estar em conexão com a rede de operadora. Contudo, o dispositivo deve

ter módulo GPS (que é presente na maioria dos dispositivos móveis), também é necessário,

para um melhor desempenho e precisão, que o usuário tenha boa visada do céu para que o

sistema GPS obtenha os sinais dos satélites de triangularização de posição.

Ao abrir a aplicação será efetuada uma varredura na base de dados dos pontos

armazenados que estejam sem informação de descrição bem como a tentativa de conexão com

Page 25: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

24

a base de dados Google Maps, para a recuperação das descrições dos pontos percorridos.

Também será efetuado o recálculo, por meio de uma API, das distâncias de cada rota

armazenada na base de dados local do aplicativo.

Após aberta a aplicação, é apresentado ao usuário um menu de opções com

possibilidade de iniciar ou continuar uma rota, acessar as configurações da aplicação,

visualizar uma lista com as rotas salvas, excluir todos os pontos salvos e visualizar a rota atual

com atualização automática do percurso que se está sendo realizado.

A listagem com as rotas percorridas e armazenadas é exibida no respectivo mapa para

que o usuário possa selecionar uma rota visando verificar os pontos que a compõem, a

distância do trajeto e outros dados armazenados.

As rotas serão armazenadas em base SQLite no próprio dispositivo móvel para que

elas possam ser recuperadas posteriormente. A recuperação se refere à funcionalidade de re-

percorrer uma rota ou de consultar dados que foram armazenados. O usuário também pode

excluir uma rota especifica ou todas as rotas armazenadas.

4.2 MODELAGEM DO SISTEMA

O Quadro 2 apresenta a listagem dos requisitos funcionais identificados para o

sistema. Nesse Quadro RF significa Requisito Funcional.

Identificação Nome Descrição RF01 Armazenar rota É solicitado um nome para a rota e posteriormente

iniciado um serviço de captura de localização gravando em base de dados SQLite.

RF02 Ver rota atual Exibe um mapa com os pontos já capturados e acrescenta novos pontos conforme o avanço no deslocamento.

RF03 Visualizar rotas Exibe um mapa com todos os pontos de cada uma das rotas já percorridas ou de uma rota especifica.

RF04 Excluir dados Exclui fisicamente todas as rotas e respectivos pontos já armazenados.

RF05 Ver configurações Exibe a tela na qual é possível executar várias configurações do aplicativo.

RF06 Rastrear service Serviço iniciado, ao iniciar um rastreamento, ele e responsável pela rotina de captura dos pontos e chamada dos métodos de gravação no banco de dados.

RF07 Repercorrer rota Escolher uma rota registrada e refazer a rota. O aplicativo vai indicando se o usuário está se deslocando fora da rota.

Quadro 2 – Requisitos funcionais

Page 26: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

25

A listagem que está no Quadro 3 apresenta os requisitos não-funcionais identificados

para o sistema como um todo, também denominados de requisitos suplementares. Os

requisitos não funcionais explicitam regras de negócio, requisitos de qualidade, desempenho

dentre outros. Nesse Quadro RNF significa Requisito não Funcional.

Identificação Nome Descrição RNF01 Tela splash Ao iniciar o aplicativo é exibida uma tela do tipo splash.

Nessa tela é iniciado um serviço de atualização de cálculo de distância de rota bem como atualização das descrições dos pontos caso exista conexão com a Internet.

RNF02 Thread GravaDados Thread responsável pela persistência dos dados na base, utilizada para evitar travamento da aplicação.

Quadro 3 – Requisitos não funcionais

O diagrama de casos de uso apresentado na figura 3 contém as funcionalidades

essenciais do sistema realizadas pelos seus usuários e pelo próprio aplicativo em rotinas de

disparo automático.

Figura 3 – Diagrama de casos de uso

No quadro 4 está a descrição do caso de uso Armazenar rota.

Page 27: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

26

Caso de uso: Armazenar rota Descrição:

Inicia processo de captura de coordenadas de localização, e efetua a persistência dos dados em banco de dados. Evento Iniciador:

Click no botão iniciar ou continuar rota. Atores:

Usuário. Pré-condição:

Ter sido inserido um nome para a nova rota ou ter sido selecionado uma rota já existente para continuar.

Sensor GPS do dispositivo estar ativo ou dispositivo com conexão a rede de dados moveis. Sequência de Eventos: 1. Iniciado um serviço que será responsável por gerenciar a captura dos dados. 2. O sistema verifica se já esta sendo feita a captura dos dados. 3. Sistema verifica se o sensor GPS está ativo ou se há conectividade de dados moveis. 5. Sistema inicia a captura de pontos por meio da API do Google Maps no qual é iniciado um método assíncrono que verifica a posição atual. 6. Quando um novo ponto é encontrado, um objeto location é retornado do método de captura. Esse objeto contém vários dados como posição, altitude, velocidade dentre outros. Esses dados são recuperados e uma nova thread é iniciada para persistir os dados, sendo o ciclo de captura repetido. Pós-Condição: Dados do ponto capturado inseridos no banco de dados.

Nome do fluxo alternativo (extensão) Descrição

Linha 2: verificação de sistema ativo 2.1 se já estiver ativo o rastreamento, então o sistema desativa a captura dos dados de GPS e retorna para a tela principal da aplicação.

Linha 3: Verificação de sensor GPS 3.1 se sensor GPS estiver inativo e nenhuma rede móvel conectada, então sistema exibe mensagem informativa e abre tela de configurações do dispositivo para usuário ativar o sistema de GPS. 3.2 se sensor não for ativo, sistema aborta operação e retorna para o menu principal.

Quadro 4 – Caso de uso armazenar rota

O caso de uso Visualizar rota atual é apresentado no quadro 5.

Caso de uso: Visualizar rota atual. Descrição:

Esse caso de uso exibe um mapa com os pontos já percorridos da rota atual ou da rota selecionada, se a captura de novos pontos estiver ativa então a opção de repercorrer a rota e desabilitada no mapa e caso novos pontos sejam capturados o mapa é automaticamente atualizado. Caso o rastreio não esteja ativo, então o usuário terá a opção de repercorrer a rota exibida através de um botão no mapa. Evento Iniciador:

Escolha da opção correspondente à ação visualizar rota atual. Atores:

Usuário Pré-condição:

Existir rota(s) gravada(s) ou que tenha sido selecionada pelo usuário. Sequência de Eventos: 1. Ator seleciona opção para visualizar rota atual.

Page 28: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

27

2. Sistema inicia nova tela com componente de mapa. 3. Sistema recupera da base de dados os pontos referentes a rota a ser exibida. 4. Sistema insere no mapa os marcadores de cada ponto. 5. Sistema insere traçado entre os pontos. 6. Sistema verifica se rastreador está ativo. Pós-Condição: não há.

Nome do fluxo alternativo (extensão) Descrição

Linha 6: Ver rastreador 6.1 Se rastreador estiver ativo então sistema inicia rotina de sincronização e inserção de novos pontos ao mapa.

Quadro 5 – Caso de uso visualizar rota atual

O caso de uso Exibir lista de rotas é apresentado no quadro 6.

Caso de uso: Exibir lista de rotas. Descrição:

Esse caso de uso apresenta a lista de rotas cadastradas, necessárias para que um rastreamento possa ser iniciado ou para que um percurso de rota seja refeito. Evento Iniciador:

Escolha da opção ver lista de rotas no menu principal. Atores:

Usuário Pré-condição:

Existir rota(s) gravada(s). Sequência de Eventos: 1. Ator seleciona opção de visualizar lista de rotas. 2. Sistema busca na base de dados todas as rotas salvas. 3. Sistema exibe mensagem caso nenhuma rota seja encontrada. 4. Sistema inicia nova tela de listagem com a lista das rotas recuperadas. 5. Sistema apresenta opção de excluir uma rota da lista. 6. Sistema apresenta opção de visualizar em um mapa a rota da lista. Pós-Condição: .Operação de visualização ou exclusão de uma rota.

Nome do fluxo alternativo (extensão) Descrição

Linha 6: Ver Mapa 6.1 Ao clicar em ver rota é exibida nova tela com um componente de mapa onde são inseridos todos os pontos da rota selecionada.

Linha 5: Exclusão de registro de rota. 5.1 Se solicita exclusão de registro, o sistema chama o método de exclusão passando via parâmetro o ID da rota selecionada.

Quadro 6 – Caso de uso exibir lista de rotas

O caso de uso Excluir dados é apresentado no quadro 7.

Page 29: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

28

Caso de uso: Excluir dados. Descrição:

Esse caso de uso se refere à operação para excluir todas as rotas cadastradas e salvas na base de dados do aplicativo. Evento Iniciador:

Escolha da opção para excluir dados. Atores:

Usuário Pré-condição:

Existir rota(s) gravada(s). Sequência de Eventos: 1. Ator seleciona opção de excluir todas as rotas. 2. Sistema solicita a confirmação de exclusão da rota. 3. Usuário confirma exclusão. 4. Sistema recupera uma lista das rotas salvas. 5. Sistema percorre essa lista, excluindo os pontos de rotas relacionados a cada rota. 4. Sistema exclui a rota. Pós-Condição: . Rotas excluídas.

Nome do fluxo alternativo (extensão) Descrição

Linha 4: excluir rota. 4.1 Sistema verifica se a rota excluída está sendo gerada no momento da exclusão, e caso esteja, encerra o serviço de captura da rota.

Quadro 7 – Caso de uso excluir dados

O caso de uso Visualizar configurações é apresentado no quadro 8.

Caso de uso: Visualizar configurações. Descrição: Exibição da tela de configurações do aplicativo, onde o usuário pode efetuar parametrizações de como o aplicativo deve se comportar para a captura dos dados de uma rota e exibição da rota no mapa. Evento Iniciador:

Usuário selecionar opção de visualizar configurações no menu principal ou no menu suspenso. Atores:

Usuário Pré-condição:

Não há. Sequência de Eventos: 1. Ator seleciona opção de visualizar configurações. 2. Sistema exibe tela de configurações. 3. Ator seleciona parâmetro a ser ajustado/alterado. 4. Sistema habilita campo para que o valor possa ser alterado. 5. Ator altera e solicita salvamento dos dados. 5. Sistema salva dados de preferência para posterior utilização. Pós-Condição: . Sistema verifica se foi solicitado que rastreador seja ativado e, caso seja afirmativo, dá início ao processo descrito no caso de uso Armazenar rota. Quadro 8 – Caso de uso visualizar configurações

Page 30: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

29

O caso de uso Rastrear service é apresentado no quadro 9.

Caso de uso: Rastrear service. Descrição:

Serviço interno do sistema, responsável pela captura dos pontos de localização e persistência dos pontos recuperados em base de dados. Evento Iniciador:

Caso de uso armazenar rota. Atores:

Sistema. Pré-condição:

Usuário solicitar início de captura de rota. Sequência de Eventos: 1. Sistema Instancia objeto LocationManager. 2. Sistema verifica disponibilidade de captura de dados de GPS. 3. Sistema inicia escuta de serviço de captura de novos pontos. 4. Resposta recebida na escuta. 5. Sistema valida dados retornados na escuta. 6. Sistema gera objeto de ponto de rota. 7. Sistema instancia rotina de persistência dos dados do objeto na base de dados. Pós-Condição: . Sistema bloqueia na escuta enquanto novos dados não sejam retornados. Quadro 9 – Caso de uso rastrear service

O caso de uso Repercorrer rota é apresentado no Quadro 10.

Caso de uso: Repercorrer rota. Descrição:

Quando um mapa é exibido apresentando os pontos de uma rota já percorrida e o rastreamento de novos pontos não esteja em execução, é exibido um botão na tela do mapa com a descrição guiar. Quando essa opção é selecionada, uma nova rotina da captura do ponto atual de localização do usuário é iniciada, e a cada ponto capturado, é inserido no mapa um marcador diferenciado com a posição atual do usuário, bem como é exibido os pontos da rota original para servirem de referência para que o usuário saiba para onde deve se deslocar.

Ao clicar em um dos marcadores são exibidas informações da localização como data e hora, descrição da localização, velocidade e distância percorrida. Evento Iniciador:

Ator seleciona botão Guiar. Atores:

Usuário Pré-condição:

Existir rota já percorrida e não existir nenhuma rota em percurso. Sequência de Eventos: 1. Ator seleciona botão para repercorrer. 2. Sistema captura os pontos da rota armazenados no banco. 3. Sistema renderiza mapa na tela e insere os pontos recuperados da base de dados. 4. Sistema inicia processo assíncrono que captura o ponto atual do usuário de acordo com tempo ou distância de deslocamento configurados pelo usuário em tela de preferência, e apresenta no mapa o ponto exato para visualização do usuário. 5. Ator seleciona ponto de localização e informações sobre o ponto são exibidas. Pós-Condição: Ator solicitar parada do processo.

Page 31: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

30

Nome do fluxo alternativo (extensão) Descrição

Linha 4: processo assíncrono 4.1 Sistema executa esse processo indeterminadas vezes até que o Ator solicite a parada por clique.no botão parar.

Quadro 10 – Caso de uso repercorrer rota

A figura 4 apresenta o diagrama de entidades e relacionamentos que representam o

banco de dados da aplicação. O atributo “id” e “id_Rota” da tabela pontos-Rota é necessário

para o tratamento de relacionamento entre a tabela de rotas e a tabela de pontos de rota.

Figura 4 – Diagrama de entidades e relacionamentos do banco de dados

No quadro 11 estão os campos da tabela de rota. Uma rota possuirá pontos

relacionados a ela (quadro 12) que serão utilizados para sua exibição no mapa, bem como um

nome e uma distância total do ponto inicial ao final.

Campo Tipo Nulo Chave primária Chave estrangeira id Numérico Não Sim Não

rota Texto Não Não Não

distancia Texto Sim Não Não

Quadro 11 – Campos da tabela rota

O Quadro 12 apresenta os campos da tabela de pontos_rota.

Campo Tipo Nulo Chave primária Chave estrangeira id Numérico Não Sim Não

Id_rota Numérico Não Não Sim

Latitude Numérico Não Não Não

longitude Numérico Não Não Não

Altitude Numérico Não Não Não

precisao Numérico Não Não Não

velocidade Numérico Não Não Não

dataHora Texto Não Não Não

localização Texto Sim Não Não

Quadro 12 – Campos da tabela pontos_rota

Page 32: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

31

As tabelas apresentadas na figura 3 representam, também, as classes de persistência. A

seguir são apresentadas as classes rota e pontos-rota que se referem às classes persistentes do

sistema.

O Quadro 13 apresenta a classe Rota.

Identificação: Rota Descrição: Registros de Rotas e distancia total das mesmas

Requisitos: RF01 Atributos: id (número): identificador único, auto incremento para vincular os

registros de pontos da rota. nome (string): nome da rota. distancia (número): Distancia total percorrida da rota.

Quadro 13 – Descrição da classe rota

No Quadro 14 está a apresentação da classe pontos_Rota

Identificação: Pontos_Rota Descrição: Pontos de referências das rotas percorridas, identificadas por um ID de

rota e uma sequência cronológica de gravação auto incremento. Requisitos: RF01 Atributos: id (número): ID identificador único do ponto na tabela, utilizado como

sequenciador dos pontos salvos. id_rota : identificador de qual rota o ponto pertence. latitude (numérico): latitude da localização. longitude(numérico): longitude da localização. altitude(numérico): altitude da localização. precisão(numérico): valor de 1 a 10 representando uma escala de quão exato é o ponto capturado com a posição real do usuário. É definido pela intensidade do sinal GPS e da quantidade de satélites usados na triangularização do ponto. velocidade(numérico): velocidade de deslocamento no momento da captura. dataHora(String): data e hora da captura do ponto. localizacao(String) descrição do ponto de localização.

Quadro 14 – Descrição da classe pontos_rota

4.3 APRESENTAÇÃO DO SISTEMA

O leiaute do sistema é composto por 5 telas: a primeira, que é apresentada ao iniciar o

aplicativo, é conhecida como splash (figura 5). Essa é uma tela simples, somente com o logo

do sistema e fica ativa apenas por um segundo. Nesse período de tempo é iniciado um serviço

que atualizará o cálculo das distâncias das rotas gravadas no banco, caso existam. Também

neste serviço são atualizadas as descrições dos pontos de rotas salvos que ainda não possuem

Page 33: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

32

a descrição da localização. Essa descrição é obtida por meio de uma conexão com o servidor

da Google e necessita de conexão com a Internet.

Figura 5 – Tela splash

Após um segundo, a tela splash é automaticamente fechada e a tela principal da

aplicação é exibida. Nessa tela é apresentado menu de opções básicas para utilização da

aplicação. A Figura 6 apresenta a página principal da aplicação.

Page 34: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

33

Figura 6 – Página principal

A tela da página principal é composta por 6 (seis) opções. A primeira delas é a

responsável por iniciar um rastreamento (uma rota) ou continuar uma já existente. Ao

selecioná-la será exibido um componente alert-Dialog no qual serão carregados, em um menu

drop-down, as rotas já salvas, e o usuário poderá selecionar uma rota já existente para

continuar ou iniciar uma nova. Nesse caso, no campo de texto disponível é necessário

informar um nome para a rota e selecionar a opção ‘Criar’. Caso não existam rotas salvas, a

opção continuar é desabilitada. O componente alert-Dialog é exibido na Figura 7.

Page 35: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

34

Figura 7 – Alert Dialog de início de captura de rota

Após selecionada a opção Continuar ou a opção Criar Nova, a tela principal é

reapresentada com o ícone da opção Ativo/Inativo em cor verde, representando que o serviço

de captura de rota está em funcionamento. Também é exibido na barra de status do

dispositivo um ícone representando a atividade do sensor GPS (no caso da captura ser via

sensor). A Figura 8 apresenta como é exibida a tela principal quando o rastreamento se

encontra ativo.

Page 36: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

35

Figura 8 – Tela principal com rastreador ativo

A segunda opção da página inicial exibe, por meio de uma lista ou ListView, todas as

rotas salvas na base de dados (Figura 9), bem como a informação da distância percorrida de

cada rota.

Page 37: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

36

Figura 9 – Lista de rotas

Ao lado de cada rota são disponibilizadas duas opções em forma de botão. O primeiro

botão, com a descrição ‘Ver’, exibe os pontos da rota selecionada em um mapa (Figura 10). O

segundo, com a descrição ‘Excluir’, apresenta uma caixa de mensagem solicitando

confirmação para efetuar a exclusão da rota selecionada.

Page 38: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

37

Figura 10 – Exibindo pontos de rota

Na exibição do mapa após selecionar a opção ‘Ver’, são inseridos os pontos da rota

selecionada e, para facilitar a visualização, cada ponto do mapa é interligado com seu

subjacente e subsequente por uma linha. O mapa também possui dois botões de zoom, um

para aumentar e outro para diminuir o nível de zoom de visualização.

No mapa também existe um terceiro botão com a descrição inicial ‘Guiar’. Esse botão

fica visível somente quando nenhuma rota está sendo capturada. A função desse botão é

possibilitar que o usuário possa repercorrer a rota que está sendo visualizada. Ao ser clicado,

sua descrição muda para ‘Parar’ e um novo processo interno é iniciado. Esse processo executa

em paralelo e captura o ponto que o usuário se encontra. Após a captura, esse ponto é inserido

no mapa com uma coloração diferente dos demais marcadores da rota original. Esse processo

de captura dos pontos e adição no mapa fica em execução até que o usuário saia da aplicação

ou selecione a opção ‘Parar’. A Figura 11 apresenta uma rota sendo repercorrida. Nessa tela

podem ser visualizados os marcadores diferenciados.

Page 39: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

38

Figura 11 – rota sendo repercorrida

Ao ser visualizada uma rota, selecionando-se um marcador, serão exibidas

informações como, data e hora da captura da posição, descrição do endereço, velocidade

aproximada de deslocamento e a distância do ponto de partida até o ponto selecionado. A

Figura 12 apresenta essas informações em um ponto de uma rota.

Page 40: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

39

Figura 12 – Informações de ponto

Na tela principal existem duas opções que exibem o mesmo mapa da Figura 9, ‘Ver

rota atual’ e ‘Ver onde estive’. A opção ‘Ver rota atual’ apresenta a última rota percorrida ou

a rota que está sendo percorrida, sendo que, neste caso, novos pontos que venham a ser

capturados serão automaticamente inseridos ao mapa, possibilitando que o usuário acompanhe

de forma gráfica o deslocamento. Nesse modo não é possível utilizar a opção ‘Guiar’. Já a

opção ‘Ver onde estive’ exibe todos os pontos de rotas percorridas no mapa de uma única vez,

possibilitando visualizar de forma ampla todos os caminhos rastreados. Nessa forma de

visualização também não está disponível a opção ‘Guiar’.

Ainda na tela principal existe uma opção ‘Limpar Dados’, que, quando selecionada,

exibe uma mensagem de confirmação para excluir todas as rotas armazenadas no dispositivo.

Na Figura 13 pode-se visualizar essa mensagem de confirmação.

Page 41: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

40

Figura 13 – Exclusão de rotas

Finalizando as opções da tela de menu inicial está a opção de acesso às configurações

do aplicativo. Quando selecionada, uma tela de preferências é exibida como mostra a Figura

14. Nessa tela são realizados ajustes, como distância de captura de posição entre dois pontos,

tempo mínimo entre cada captura, precisão de captura, zoom de visualização inicial do mapa e

início do serviço de rastreamento.

Page 42: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

41

Figura 14 – Tela de preferências

4.4 IMPLEMENTAÇÃO DO SISTEMA

Como apresentado na seção 4.3, o aplicativo Minhas Rotas conta com 5 (cinco) telas,

sendo uma tela inicial e uma tela principal com link de acesso para as demais telas

operacionais do sistema.

Quando a tela inicial é apresentada, também é iniciado um serviço que realiza uma

varredura nas rotas armazenadas na base de dados. A listagem 1 apresenta a rotina

responsável por capturar os dados na base de dados SQLite.

List<Rota> retorno = null; DbHelper database = new DbHelper(); try { Cursor cursor = database.rawQuery("select * from Rota " + where, null); retorno = new ArrayList<Rota>(); if(cursor.getCount() == 0 ) return retorno; cursor.moveToFirst();

Rota rs = null; while (cursor.isAfterLast() == false) { rs = new Rota(); rs.setID(cursor.getInt(cursor.getColumnIndex("ID")));

Page 43: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

42

rs.setRota(cursor.getString(cursor.getColumnIndex("rota"))); rs.setDistancia(cursor.getDouble(cursor.getColumnIndex("distancia"))); retorno.add(rs);

cursor.moveToNext();

}cursor.close();

}catch (Exception e){ Log.e("erro (BD)","Problema ao recuperar Lista de rotas. \n" + e.getMessage());

e.printStackTrace();

}

Listagem 1 – rotina de captura de dados do banco SqLite

Inicialmente é criado um objeto database do tipo DbHelper. Em seguida é instanciado

um objeto Cursor que receberá os dados resultantes e é, também, iniciado um método

construtor que recebe um parâmetro de contexto proveniente de consulta na base de dados.

Posteriormente esse cursor é percorrido recuperando as rotas e adicionando-as em um list do

tipo Rotas. Esse procedimento de recuperação de rotas do banco SQLite é utilizado em todas

as outras leituras que o aplicativo necessitar fazer e qualquer filtragem necessária será

efetuada pela parametrização contida na variável ‘where’ do procedimento de leitura que está

na Listagem 1.

DbHelper, na listagem 1, é a classe responsável pela manipulação das Data Definition

Language (DDLs) e também é a interface de acesso ao banco de dados. Essa DLL estende

SQLiteOpenHelper que obriga a implementação de dois métodos: onCreate(), método

responsável pela DDL de criação das tabelas do banco de dados e o onUpgrade(), responsável

pelas atualizações da estrutura do banco de dados.

Com os dados das rotas recuperados em uma lista, ela é percorrida recuperando os

pontos de rota relacionados a cada rota em uma leitura semelhante à da listagem 1, porém, na

tabela pontos-Rota. Nessa leitura é passado o parâmetro ‘where’ valorizado com o ID da rota

a ser recuperada.

Após os pontos de rota serem recuperados, é efetuada a leitura deles em ordem de

inserção e por meio do código apresentado na listagem 2 é efetuado o cálculo da distância

entre cada dois pontos da rota, calculando, assim, a distância total da rota percorrida.

private Double calcDistancia(LatLng a, LatLng b){ double distance = 0; Location location = new Location("posicao 1"); location.setLatitude(a.latitude); location.setLongitude(a.longitude); Location location2 = new Location("posicao 2"); location2.setLatitude(b.latitude); location2.setLongitude(b.longitude); distance = location.distanceTo(location2);

return distance; }

Listagem 2 – cálculo da distância entre dois pontos de GPS

Page 44: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

43

O cálculo da distância entre os pontos é realizado com o uso da ferramenta Location

que está disponível na API do Google Maps. Ela recebe dois objetos do tipo LatLng (Latitude,

Longitude) e devolve o valor correspondente entre os dois pontos que é a distância em metros.

Ao ler os pontos da rota para efetuar o cálculo da distância, também é verificado se há

descrição da localização, caso não possua, utilizando a API GeoCoder do Google é buscado

nos servidores do Google Maps a descrição do ponto do mapa (listagem 5). Antes de efetuar

essa busca, é verificado se o dispositivo está conectado à rede de dados móveis por meio do

código apresentado na listagem 3.

ConnectivityManager cm = (ConnectivityManager)

atualizaDescricaoService.this.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo nf = cm.getActiveNetworkInfo();

if ((nf == null) ||(!nf.isConnected())) return; Listagem 3 – Verificação de conexão com a rede de dados

Para efetuar essa consulta é necessário solicitar permissão de acesso às propriedades

do dispositivo pela adição ao arquivo Manifest.xml com o código apresentado na listagem 4.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> Listagem 4 – Permissão de verificação de conexão com a rede

A listagem 5 apresenta o uso da API GeoCoder do Google para buscar nos servidores

do Google Maps a descrição de pontos no mapa.

Geocoder con = new Geocoder(atualizaDescricaoService.this, Locale.getDefault());

try { List<Address> enderecos =

con.getFromLocation(pontosRota.getLatitude(), pontosRota.getLongitude(),

1);

Address local = enderecos.get(0);

if(local.getAddressLine(0) != null) pontosRota.setDescLocalizacao(local.getAddressLine(0) + "\n"); if(local.getAddressLine(1) != null) pontosRota.setDescLocalizacao(pontosRota.getDescLocalizacao() +

local.getAddressLine(1) + "\n"); if(local.getAddressLine(2) != null) pontosRota.setDescLocalizacao(pontosRota.getDescLocalizacao() +

local.getAddressLine(2).toString());

if(local.getAddressLine(3) != null) pontosRota.setDescLocalizacao(pontosRota.getDescLocalizacao() + " - " + local.getAddressLine(3)); break; } catch (Exception e) { Log.e("Service ", "Erro ao buscar dados no GEOCODER \n" + "Latitude " + pontosRota.getLatitude()+ "Longitude " + pontosRota.getLongitude() + "\n"); e.printStackTrace();

}

Listagem 5 – Busca de dados de localização com Geocoder API

Page 45: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

44

Quando todos os pontos da rota foram percorridos, o sistema efetua a persistência dos

dados novamente na base de dados com as distâncias de rota atualizadas e a descrição dos

pontos de rotas atualizados. A listagem 6 apresenta a rotina de gravação dos dados da rota no

banco de dados. A atualização dos pontos de rota ocorre de forma semelhante.

try{ ContentValues contentValues = new ContentValues(); contentValues.put("distancia", rs.getDistancia().toString()); database.update("Rota", contentValues, " ID = ? ", new String[]{"" + rs.getID()});

}catch (Exception e){ Log.e("ERRO (BD)","PROBLEMA AO ATUALIZAR ROTA!! \n" + e.getMessage()); }

Listagem 6 – Update de uma rota na base de dados

O processo descrito no parágrafo anterior ocorre de forma assíncrona por meio da

instanciação de um serviço, que não gera travamento da aplicação enquanto é executado. A

tela inicial executa a chamada desse serviço e em seguida, abre a tela principal da aplicação

em paralelo com a execução do serviço.

A tela principal da aplicação é desenhada utilizando um leiaute do tipo ListView. O

sistema possui modelos de lista pré-definidas, porém esses modelos são interfaces limitadas

em termos de recursos. Por isso a tela principal foi desenhada utilizando métodos

personalizados com a criação de um componente do tipo Adapter, possibilitando maior

flexibilidade na adição de componentes à tela de listagem. O componente Adapter

desenvolvido é apresentado na listagem 7.

public MenuInicialAdapter(Context context, MatrixCursor cursor, Boolean ativo) { this.context = context; this.cursor = cursor; this.ativo = ativo; inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

}

@Override

public int getCount() { return cursor.getCount(); @Override

public Object getItem(int position) { cursor.moveToPosition(position); return cursor; } @Override

public long getItemId(int position) { cursor.moveToPosition(position); return cursor.getInt(0); } @Override

public View getView(final int position, View convertView, ViewGroup parent) {

View elemento_lista = inflater.inflate(R.layout.menu_inicial, null); setView(elemento_lista);

TextView tvOpcao = (TextView)

elemento_lista.findViewById(R.id.tvOpcao);

TextView tvDescricao = (TextView)

elemento_lista.findViewById(R.id.tvDescricao);

Page 46: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

45

ImageView ivIcon = (ImageView)

elemento_lista.findViewById(R.id.ivIcon);

cursor.moveToPosition(position); tvOpcao.setText(cursor.getString(1)); tvDescricao.setText(cursor.getString(2)); if(cursor.getDouble(0) == 1 && ativo) ivIcon.setImageResource(R.drawable.gps_on);

else if (cursor.getDouble(0) == 2 ) ivIcon.setImageResource(R.drawable.lista_rotas);

else if (cursor.getDouble(0) == 3 ) ivIcon.setImageResource(R.drawable.ver_rota);

else if (cursor.getDouble(0) == 4 ) ivIcon.setImageResource(R.drawable.todos_pontos);

else if (cursor.getDouble(0) == 5 ) ivIcon.setImageResource(R.drawable.lixeira);

else if (cursor.getDouble(0) == 6 ) ivIcon.setImageResource(R.drawable.config);

return elemento_lista; }

Listagem 7 – Adapter personalizado

A construção de um Adapter é realizada com o uso de uma classe que estenda

BaseAdapter, que obriga a implementação de quatro métodos e um construtor. Os Métodos

são: getCount() que retorna a quantidade de itens da listagem; getItem() que pode retornar um

índice do item selecionado ou nesse caso um objeto que representa o item selecionado;

getItemId() que retorna um identificador do tipo índice que representa a posição do item

selecionado na lista; e o método principal do Adapter, getView(). É nesse método que o

leiaute de cada item da lista é desenhado e cada componente é inserido na sua devida posição,

com a ajuda de um eXtensible Markup Language (XML) de leiaute. Esse método é chamado

na inserção de cada item da lista.

Ao visualizar a tela principal o usuário tem várias opções. Ao selecionar uma delas, o

sistema identifica, por meio de um método da lista de opções, qual opção foi selecionada.

Esse método pode ser visto na listagem 8.

protected void onListItemClick(ListView l, View v, int position, long id) {

MatrixCursor campos = (MatrixCursor) l.getItemAtPosition(position);

String acao = campos.getString(3);

switch (acao) { case "OnOff": iniciaRastreio();

break; case "viewListaRotas": buscaPreferencias(pref); if(rota.getID().equals(0)){ Toast.makeText(this , "Nenhuma rota foi encontrada!!", Toast.LENGTH_SHORT).show();

return; }

Intent listaRotas = new Intent(this, ListaRotasActivity.class);

Page 47: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

46

startActivityForResult(listaRotas, 1);

break; case "verRota": verPontosMapa(rota); break; case "verTodasRotas": verPontosMapa(null); break; case "limpaRotas": limparDados();

break; case "Config": verConfiguracoes();

break; default: Toast.makeText(this, "Atenção!! \n Opção não configurada!!", Toast.LENGTH_SHORT).show(); }

}

Listagem 8 – Método de captura de opção selecionada

Quando selecionada a primeira opção (Ativo/Inativo) o sistema exibe uma tela do tipo

AlertDialog na qual o usuário poderá selecionar uma rota já existente ou criar uma nova rota.

A rotina de carga das rotas existentes é a mesma apresentada na listagem 1. A listagem 9

apresenta o código responsável por inserir as rotas recuperadas no componente Spinner

inserido no alertDialog.

final Spinner spRotas = (Spinner) myDialog.findViewById(R.id.spRotas); spRotas.setPrompt("ROTAS"); List<Rota> ListaRotas = new ArrayList<Rota>(); List<String> ListaSpinner = new ArrayList<>(); ListaRotas = (List) db.RecuperaRotas(""); if(ListaRotas.size() > 0) for(Rota c : ListaRotas) { ListaSpinner.add(c.getRota());

}

Listagem 9 – Adição de item em componente Spinner

No alertDialog também está disponível um componente do tipo Text, no qual o

usuário poderá inserir um nome para uma nova rota. Ao selecionar o botão ‘Criar’, a nova

rota será inserida no banco de dados por meio da rotina apresentada na listagem 10.

public boolean incereRota(Rota rs) throws Exception{ ContentValues contentValues = new ContentValues(); contentValues.put("rota", rs.getRota()); contentValues.put("distancia", rs.getDistancia()); database.insert("Rota", null, contentValues); return true; }

Listagem 10 – Inserção de nova rota

Após a inserção da rota ou a seleção de uma rota já existente, o sistema inicia um novo

serviço, que será responsável por capturar os dados de posição GPS e persistir no banco de

Page 48: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

47

dados vinculando-os à rota criada ou selecionada. A listagem 11 apresenta a chamada desse

serviço pelo uso de Intent com passagem de parâmetros.

String provider = Settings.Secure.getString(getContentResolver(),

Settings.Secure.LOCATION_PROVIDERS_ALLOWED

);

if ((provider == null) || (provider.length()) == 0){ Toast.makeText(this , "ATENÇÃO !! \n GPS não esta ativo!! \n " + "Ative-o para iniciar a captura dos dados!!", Toast.LENGTH_LONG).show();

//chamada da tela de config. para usuario ativar GPS

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

startActivityForResult(intent, 1);

}

Intent intent = new Intent(PrincipalActivity.this,RastreioService.class); intent.putExtra("status", status); intent.putExtra("idRota", rota.getID()); startService(intent);

}

Listagem 11 – Chamada do serviço de captura de pontos GPS

Pode-se verificar, ainda na listagem 11, a presença de um código responsável por

verificar se o sensor GPS do dispositivo está ativo. Caso não esteja, a tela de configuração do

dispositivo é aberta para que o usuário possa efetuar a sua ativação. Sem esse sensor ativo, a

captura dos dados de posição pelo sinal GPS não é possível. Ao final do código está o Intent

responsável por iniciar o serviço de captura por meio do código startService(intent). Nota-se,

ainda, que antes são passados dois parâmetros para o serviço: um deles é o ID da rota

selecionada o outro é o status do rastreamento. E por meio dessa chamada que o serviço será

iniciado ou parado, de acordo com o valor passado como parâmetro.

Um serviço é uma classe que estende Service e, esse precisa estar declarado no

arquivo Manifest.xml para que ele se comporte como um serviço. Normalmente, o próprio

Android verifica que a classe está sendo estendida e adiciona essa declaração ao manifest.

Ao iniciar o serviço, um método chamado onStartCommand é executado. Esse método

recebe um Intent por parâmetro e é por meio desse Intent que os parâmetros vindos da tela

principal são recuperados. Esse é o método principal de troca de informações entre telas e

serviços ou entre duas telas no Android. A listagem 12 apresenta o método onStartCommand.

public int onStartCommand(Intent intent, int flags, int startId) { try { paraGPS(); } catch (Exception e) { e.printStackTrace();

}

status = intent.getBooleanExtra("status" , false); idRota = intent.getIntExtra("idRota" , 1); if (status){ SharedPreferences.Editor editor = pref.edit();

Page 49: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

48

editor.putInt("idRotaAtual", idRota); editor.commit();

iniciaRastreamento();

else{ locationManager.removeUpdates(locationlistener); locationManager = null; locationlistener = null; stopSelf();

}

return flags; }

Listagem 12 – onStartCommand

Ainda na listagem 12 pode-se verificar a gravação do id da rota em um componente

SharedPreferences. Esse componente trata das preferências do usuário e pode ser acessado de

qualquer tela da aplicação sendo que seus dados não são excluídos caso a aplicação seja

encerrada. Ainda pode-se verificar a validação se o rastreamento será iniciado ou encerrado,

de acordo com o parâmetro recebido anteriormente. Para que a classe possa fazer a captura

dos dados GPS, ela deve estender LocationListener. Essa extensão do método obriga a

implementação de quatro métodos, sendo que apenas um deles foi utilizado no projeto. O

método utilizado é o onLocationChanged(). Na listagem 13 está o método

iniciaRastreamento() que dá início ao processo assíncrono de captura dos dados do GPS.

locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); //PEGO O STATUS DE REDE

isGPSEnabled = locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER);

if(!isGPSEnabled) isNetworkEnabled = locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER);

if (isGPSEnabled || isNetworkEnabled){ locationlistener = this; if (isGPSEnabled) { locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, intervaloBusca, distanciaDesloc, (LocationListener) this); } else if (isNetworkEnabled) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=

PackageManager.PERMISSION_GRANTED &&

ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) !=

PackageManager.PERMISSION_GRANTED) return; locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, intervaloBusca, distanciaDesloc, (LocationListener) this); }

}

Listagem 13 – Início do serviço de captura de dados GPS

Inicialmente é instanciado um objeto do tipo locationManager como apresentado na

listagem 13. Ele é o responsável por todo o processo de gerenciamento e captura dos dados.

Em seguida é recuperado se o sistema GPS está disponível e operante bem como os dados da

Page 50: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

49

disponibilidade de captura de posição via sinal de rede móvel. Em seguida é verificado se um

dos serviços está ativo e disponível, preferencialmente via sinal GPS, e o gatilho de início é

acionado por meio do requestLocationUpdates. Nesse gatilho são informados os parâmetros

de intervalo de tempo de captura mínimo das posições e a distância mínima entre duas

posições capturadas. Para que a captura dos dados seja possível é necessário solicitar

permissão no arquivo de manifest.xml para obter os dados de localização. A listagem 14

apresenta essa solicitação de permissão.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Listagem 14 – Solicitação de permissão de captura de geoposição

Após o disparo da captura dos dados, o sistema aguarda, por meio do método de

escuta onLocationChanged() o retorno de captura de pontos de GPS. Esse método recebe por

parâmetro um objeto Location, que possui os dados da posição capturada, como latitude,

longitude, altitude, velocidade de deslocamento e precisão da captura. Esses dados são

coletados e armazenados em um objeto do tipo pontos_rota. Ainda nessa etapa são executados

os códigos das Listagens 3 e 5 a fim de recuperar os dados descritivos da posição junto ao

servidor do Google. Ao final desse processo, os dados são persistidos na base de dados SqLite

com o uso de um procedimento semelhante ao apresentado na listagem 10, tudo isso por meio

de uma thread paralela, para que o sistema possa voltar e escutar novamente o método

onLocationChanged() e processar novos dados sem que o desempenho da aplicação seja

afetado. A listagem 15 apresenta o método onLocationchanged().

private void ProcessaPosicao(Location location) { if (location == null) return; if (location.getAccuracy() > precisao) return; pontos_Rota rs = new pontos_Rota(); rs.setId_rota(idRota); rs.setLatitude(location.getLatitude());

rs.setLongitude(location.getLongitude());

rs.setAltitude(location.getAltitude());

rs.setVelocidade(0);

rs.setDescLocalizacao(""); rs.setPrecisao((double) location.getAccuracy()); rs.setVelocidade((location.getSpeed()*3600)/1000);

rs.setDescLocalizacao(buscaDescricaoLocalizacao(location.getLatitude()

,location.getLongitude());

}

new gravaPonto().execute(rs); rs = null;

}

Listagem 15 – Método onLocationchanged()

A listagem 16 apresenta a thread de chamada de gravação do ponto de rota.

Page 51: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

50

class gravaPonto extends AsyncTask<pontos_Rota ,Void,String > { @Override

protected String doInBackground(pontos_Rota... params) { db.incerePontos_Rota(params[0]);

return ""; }

}

Listagem 16 – Thread de gravação

Quando o usuário solicita a visualização de uma rota, uma nova tela do aplicativo é

chamada por meio de uma Intent. Essa Intent é semelhante à apresentada na listagem 11 e

passa dois parâmetros para a outra tela: ID da rota e o status de rastreamento. Quando a tela

de apresentação do mapa é aberta, os parâmetros da Intent são recuperados e com o ID da

rota, os seus pontos são carregados do banco de dados com o uso de uma rotina semelhante à

apresentada na listagem 2. Para que o mapa possa ser exibido é preciso que a activity possua

um componente visual do tipo Map e um objeto do tipo GoogleMap, além de implementar

OnMapReadyCallback. Esse, por sua vez, obriga a implementação do método

onMapaReady(), que é o responsável por atribuir o mapa ao componente de tela e atribuir as

configurações do mapa. Na listagem 17 pode-se visualizar o método onMapaReady().

@UiThread

public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener(){

public boolean onMarkerClick(Marker marker){ pos = marker.getPosition(); return false; }

});

mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { @Override

public View getInfoWindow(Marker marker) { return null; }

@Override

public View getInfoContents(Marker marker) { TextView tvTexto = new TextView(RotasActivity.this); tvTexto.setText(Html.fromHtml("<b><font color=\"#ff0000\">" + marker.getTitle() + "</font> </b> <br>" + marker.getSnippet() )); return tvTexto; }

});

}

Listagem 17 – Método onMapaReady()

Após a execução do método onMapaReady, são inseridos no mapa os pontos

recuperados da base de dados. A listagem 18 apresenta a rotina de inserção desses dados no

mapa para visualização.

Page 52: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

51

lastPosition = null; primeiro = null; if (lst.size() == 0) return; ultimo = new LatLng(((pontos_Rota) lst.get(lst.size() -1)).getLatitude(),((pontos_Rota) lst.get(lst.size() -1)).getLongitude());

if (lst != null) { for(pontos_Rota c : lst) { pos = new LatLng(c.getLatitude(), c.getLongitude()); MarkerOptions op = new MarkerOptions().position(pos) .title("Dados do ponto selecionado.") .snippet("<br>Local = " + c.getDescLocalizacao() + "<br>Velocidade : " + c.getVelocidade() + "Km/h."); if(id_Rota > 0) { if(primeiro == null) { op.icon(BitmapDescriptorFactory.fromResource(R.drawable.saida));

primeiro = pos; }

if(pos.equals(ultimo)) op.icon(BitmapDescriptorFactory.fromResource(R.drawable.chegada));

if (lastPosition != null) { distancia += calcDistancia(lastPosition,pos); op.snippet( "Data / Hora : " + c.getDataHora() + "<br>Distância percorrida : "+String.format("%.2f",distancia)+ " Mts."+ "<br>Tempo gasto : "+ calculaTempoGasto(tempoInicial,c.getDataHora()) + "<br>Altitude : " + c.getAltitude() + " Mts." + "<br>Local : " + c.getDescLocalizacao() + "<br>Velocidade : " + c.getVelocidade() + " Km/h."); Polyline line = mMap.addPolyline(new PolylineOptions() .add(lastPosition, pos) .width(5)

.color(Color.BLUE));

}

lastPosition = pos; }

mMap.addMarker( op ); }

if (id_Rota > 0) { Rota rt = new Rota(); rt.setID(id_Rota); rt.setDistancia(distancia); db.atualizarRota(rt); Polyline line = mMap.addPolyline(new PolylineOptions() .add(primeiro, lastPosition) .width(5)

.color(Color.YELLOW));

}

}

if (pos != null) { mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(pos, zoom)); }

else return;

Listagem 18 – Inserindo pontos e linhas no mapa

Na listagem 18 pode-se verificar o uso do metodo calculaTempoInicial(), o qual

recebe dois paramatros do tipo texto contendo a data e a hora inicial e final no formato dd-

MM-yyyy-HH-mm-ss, esse metodo faz o calculo do tempo gasto entre os dois parametros e

retorna o tempo para ser exibido no ponto. A listagem 19 apresenta esse metodo.

Page 53: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

52

public static String calculaTempoGasto(String horaInicial, String horaFinal) {

String retorno = "00:00:00"; try { SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy-HH:mm:ss");

if (horaInicial.equals("")){ horaInicial = horaFinal;

setTempoInicial(horaFinal);

}

Calendar calInicial = Calendar.getInstance();

Calendar calFinal = Calendar.getInstance();

calInicial.setTime(sdf.parse(horaInicial));

calFinal.setTime(sdf.parse(horaFinal));

long segundos = (calFinal.getTimeInMillis() - calInicial.getTimeInMillis()) / 1000;

long horas = segundos / 3600; long minutos = (segundos % 3600) / 60; segundos = (segundos % 3600) % 60;

retorno = String.valueOf(horas) + "Hs, " + String.valueOf(minutos) + "Min, " + String.valueOf(segundos) + "Sec."; } catch (Exception e) { e.printStackTrace();

}

return retorno; }

Listagem 19 – calculo de distância entre pontos

Ainda na listagem 18 pode-se verificar a inserção de componentes do tipo polyline.

Esses componentes são linhas que ligam dois pontos no mapa e ao final pode-se verificar a

chamada para o método moveCamera, responsável por direcionar e centralizar o foco no

último marcador inserido no mapa, aplicando um nível de zoom pré-configurado na tela de

preferências.

Após a inserção dos pontos da rota no mapa, o aplicativo verifica, por meio do outro

parâmetro recebido, se o rastreador está ativo. Significando, assim, que novos pontos serão

capturados para a rota e esta deverá ser atualizada. Se o rastreador estiver ativo, o sistema

remove a opção de repercorrer a rota que está disponível na tela e inicia uma thread

responsável por recuperar os novos pontos e atualizar o mapa. A listagem 20 apresenta essa

validação.

if((id_Rota == 0) || RastreadorAtivo){ btGuiar.setEnabled(false); btGuiar.setVisibility(View.INVISIBLE); }

if (atualizarMapa) atualizaMapa();

Listagem 20 – validação de atualização de mapa

Caso o rastreador não esteja ativo, então o usuário terá disponível na tela um botão

‘Guiar’, que ao ser selecionado iniciará uma rotina de captura de posições GPS, semelhante à

Page 54: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

53

rotina apresentada nas listagens 12 e 13. A rotina irá capturar a posição do usuário e exibir

marcadores diferenciados no mapa para que o usuário possa localizar-se e identificar qual

direção deverá tomar para repercorrer a rota sendo exibida no mapa.

Na tela principal, o usuário também tem uma opção para visualizar a lista de rotas.

Essa lista recupera todas as rotas salvas e apresenta, por meio de um Adapter personalizado,

semelhante ao da tela principal já descrito anteriormente, em uma lista as rotas disponíveis

com um botão ‘Ver’ e outro ‘Excluir’ ao lado de cada rota. Ao selecionar o botão ‘Ver’, o

mapa descrito anteriormente nas listagens 17 e 18 será exibido, caso a opção selecionada seja

a ‘Excluir’, um alertDialog será apresentado, solicitando confirmação de exclusão e, caso seja

confirmado, a rotina de exclusão da rota será executada. E os pontos da rota também são

excluídos por meio de uma rotina semelhante a que exclui o registro da rota. A listagem 21

apresenta o componente AlertDialog e a rotina de exclusão do registro da base de dados e

também da listagem de rotas.

AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Confirma exclusão"); builder.setMessage("Deseja realmente excluir a rota selecionada ??"); builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface arg0, int arg1) { new DeletaRotaBase().execute(((Rota) getItem(position)).getID());

if (((Rota) getItem(position)).getID()> 0){ query += " ID = " + ((Rota) getItem(position)).getID(); }

else query = " ID > 0"; try { deletaPontosRota(query);

database.delete("Rota", query, null) ; }catch (Exception e){ Log.e("ERRO (BD)", "Problema ao deletar rota !! /n" + e.getMessage());

return false; }

rotas.remove(position); Toast.makeText(context , "Exclusao feita com sucesso!! ", Toast.LENGTH_SHORT).show();

atualizarLista(rotas); }

});

builder.setNegativeButton("Não", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface arg0, int arg1) { return; }

});

alerta = builder.create(); alerta.show(); Listagem 21 – Exclusão de rotas

Page 55: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

54

Na tela principal, o usuário também tem disponível uma opção ’Limpar dados’. Essa

opção executa a mesma rotina apresentada na listagem 21, porém sem parâmetro de ID de

rota, excluindo todas as rotas salvas.

Por último, na listagem de opções da tela principal está a opção ‘configurações’ que,

ao ser selecionada, exibe uma nova tela na qual podem ser realizadas algumas configurações

do sistema. A nova tela também é aberta com o uso de um Intent sem parâmetros. A activity

aberta estende PreferenceActivity, que, por definição, salva em SharedPreference todos os

dados que são informados nos campos apresentados usando um arquivo de leiaute. Esse

arquivo de leiaute é diferenciado dos arquivos normais de outras activities. Ele utiliza como

definidor de leiaute um PreferenceScreen e suas opções de configurações podem ser

separadas em categorias por meio das Tags PreferenceCategory. A listagem 22 apresenta o

arquivo de leiaute de preferências.

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<PreferenceCategory

android:title="Preferências do rastreador"

android:key="pref_Maps">

<CheckBoxPreference

android:key="GPS_Status"

android:textIsSelectable="true"

android:title="GPS Ativo/Inativo"

android:checked="false"

/>

<EditTextPreference

android:key="DistanciaIntervaloCaptura"

android:title="Distância de atualização GPS em Mts."

android:inputType="number"

android:defaultValue="10"/>

<EditTextPreference

android:key="PrecisaoGPS"

android:title="Precisão do GPS"

android:inputType="number"

android:defaultValue="10"/>

</PreferenceCategory>

</PreferenceScreen>

Listagem 22 – Layout de preferências

Page 56: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

55

A listagem 23 apresenta como as preferências podem ser recuperadas em outras

actiivities.

SharedPreferences pref =

PreferenceManager.getDefaultSharedPreferences(getBaseContext());

RastreioAtivo = pref.getBoolean("GPS_Status", false); Integer id = pref.getInt("idRotaAtual",0);

Listagem 23 – Recuperando dados de preferências

Page 57: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

56

5 CONCLUSÃO

Com o desenvolvimento do aplicativo, resultado da realização deste trabalho, foi

possível utiliza vários recursos disponíveis na plataforma mobile, como: sensores de

acelerômetro e giroscópio que são muito utilizados na área de jogos, players de mídias;

sensores magnéticos que são utilizados na construção de bússolas, mapas e jogos, dentre

outras aplicabilidades.

Sobre a tecnologia de mapas utilizada na aplicação, o sensor utilizado foi o de GPS.

Esse sensor pode ter várias outras áreas de aplicação, como localizadores de dispositivos

perdidos, rastreamento de pessoas e veículos, captura de áreas e locais. Utilizado para

finalidades como direcionamento de propaganda, registro de localização do cliente em

compras eletrônicas e, até mesmo, a construção de um sistema GPS. Esse sistema é

semelhante ao dos dispositivos GPS disponíveis para cálculos de rotas e auxílio de

deslocamento. Porém, com a vantagem de ser uma ferramenta disponível em um celular, não

necessitando de um dispositivo especifico que desenvolve a função única de roteamento de

GPS para deslocamento e orientação.

Em projetos para dispositivos móveis, um dos maiores desafios está no

desenvolvimento do leiaute das telas de forma que sejam aplicáveis às mais variadas

dimensões e resoluções de dispositivos (computadores, notebooks, tablets, smartphones e

outros) comercializadas.

Outro grande desafio está voltado para o desenvolvimento de lógicas de aplicação de

forma que o dispositivo, ao executar qualquer funcionalidade, não trave ou até mesmo aborte

a aplicação.

Por meio do desenvolvimento deste projeto foi possível adquirir aprendizado no uso

de mapas em aplicações mobile. Além disso, adquiriu-se conhecimento no uso de serviços e

rotinas paralelas na plataforma mobile. Esse é um aprendizado significativo na construção de

componentes de apresentação de dados em tela de forma personalizada, possibilitando

aplicativos com recursos de telas específicos e direcionados a um público alvo específico.

Buscando, assim, facilidade e segurança na utilização da aplicação, o que agrega valor, tanto

para aplicação como para o conhecimento do desenvolvedor.

Com o crescente uso de dispositivos móveis aliado à praticidade de seu uso e com a

disponibilidade dos mais variados tipos de sensores integrados, o mercado de aplicações

mobile é visivelmente crescente e promissor.

Page 58: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

57

Em termos de funcionalidades, o aplicativo desenvolvido atende aos objetivos

propostos. Como implementações futuras, complementares ao que foi desenvolvido, está o

armazenamento de rotas em um servidor web e a possibilidade de busca de rotas nesse

servidor. Assim, rotas que representam trilhas, caminhos, estradas e outros trechos percorridos

podem ser compartilhados entre os usuários do aplicativo.

Page 59: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

58

REFERÊNCIAS

ANDROID DEVELOPER. Android, the world’s most popular mobile platform. 2012. Disponível em: <https://developer.android.com/about/android.html>. Acesso em: 09 jun. 2017.

ANDROID DEVELOPER. Dashboards. 2016. Disponível em: <https://developer.android.com/about/dashboards/index.html>. Acesso em: 09 jun. 2017.

CHA, Sangwhan; BERND, Kurz, J.; DU, Weichang. Toward a unified framework for mobile applications. IEEE Computer Society, p. 209-216, 2009.

CNOVA MARKTPLACE. Crescimento do mercado Mobile no Brasil e no mundo. Disponível em: <http://marketplace.br.cnova.com/artigo/crescimento-do-mercado-mobile-no-brasil-e-no-mundo/>. Acesso em: 08 abr. 2017.

EICHLER, G.; LUKE, K.-H.; REUFENHEUSER, B. Context information as enhancement for mobile solutions and services. 13th International Conference on Intelligence in Next Generation Networks, Bordeaux, v. 1, n. 1, p.1-5, out. 2009.

GIULIANI, Camila; SOARES, Fernanda. 24 horas conectados, sete dias por semana. 2012. Disponível em: <http://impressaodigital126.com.br/?p=6411>. Acesso em: 08 abr. 2017.

GLOBAL ICT DEVELOPMENTS. Report on global mobile-cellular subscriptions by ITU Statistics. Diponível em: <http://www.itu.int/ITUD/ict/statistics/explorer/index.html>. Acesso em: 05 fev. 2017.

GUANA, Victor; ROCHA, Fabio; HINDLE, Abram; STROULIA, Eleni. Do the stars align? multidimensional analysis of android’s layered architecture. In: Conference on Mining Software Repositories, 2012, p. 124-127.

JORDÃO, Fábio. Android e iOS totalizam 92,3% das vendas de smartphones. 2013. Disponível em: <https://www.tecmundo.com.br/pesquisa/39799-android-e-ios-totalizam-92-3-das-vendas-de-smartphones.htm>. Acesso em: 11 abr. 2017.

JORDÃO, Fabio. Mobile web apps vs. mobile native apps: how to make the right choice. 2012. Lionbridge. Disponível em: <www.lionbridge.com/files/2012/.../Lionbridge-WP_MobileApps2.pdf>. Acesso em: 25 abr. 2017.

KARADIMCE, Aleksandar, BOGATINOSKA, Dijana Capeska. Using hybrid mobile applications for adaptive multimedia content delivery. In: MIPRO 2014, 2014, p. 686-691.

LIONBRIDGE, Mobile web apps vs. mobile native apps: how to make the rigt choice. White paper. 2012, p. 2-13. Disponível em: <http://www.lionbridge.com>. Acesso em: 20 mai. 2017.

Page 60: UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO DE ...repositorio.roca.utfpr.edu.br/jspui/bitstream/1/... · 59f. Monografia (Trabalho de Conclusão de Curso) - Curso Superior

59

MAJI, Amiya Kumar; HAO, Kangli; SULTANA, Salmin; BAGCHI, Saurabh. Characterizing failures in mobile OSes: a case study with Android and Symbian. In: The International Symposium on Software Reliability Engineering (ISSRE), p. 249–258, 2010.

MOBILE TIME. 1,5 bilhão de smartphones vendidos no mundo em 2016. 2017a. Em <http://www.mobiletime.com.br/16/02/2017/1-5-bilhao-de-smartphones-vendidos-no-mundo-em-2016/466463/news.aspx>. Acesso em: 20 fev. 2017.

MOBILE TIME. Android passa Windows em tráfego online no mundo. 2017b. Em <http://www.mobiletime.com.br/03/04/2017/android-passa-windows-em-trafego-online-no-mundo/468966/news.aspx>. Acesso em: 06 abr. 2017.

MORIMOTO, E. CARLOS. Receptores GPS e triangulação de sinal. São Paulo, nov. 2010. Seção Dicas. Disponível em: <http://www.hardware.com.br/dicas/gps-triangulacao.html>. Acessado em: 08 mai. 2011.

NAGESH, Anirudh; CAICEDO, Carlos E. Cross-platform mobile application development. In: 10th Annual Conference on Telecommunications and Information Technology. Disponível em: <http://www.academia.edu/4233075/Cross-Platform_Mobile_Application_Development>. Acesso em: 04 mar. 2017.

PAVLIĆ, Daniel; PAVLIĆ, Mile; JOVANOVIĆ, Vladan. Future of internet technologies. In: 35th International Convention of Information Communication Technology, Electronics and Microelectronics (MIPRO 2012), mar 2016, p. 1377-1371.

SIGNIFICADOS. Significado de Android. Disponível em: <https://www.significados.com.br/android/>. Acesso em: 9 abr. 2017.

SINGH, Kapil. Practical Context-aware permission control for hybrid mobile application. research in attacks, intrusions, and defenses. p. 307-327, 2013.

TENG, Chia-Chi; HELPS, Richard. Mobile application development: essential new directions for IT. In: 7th International Conference on Information Technology: New Generations (ITNG), April 2010, p. 471-475.

UNHELKAR, Bhuvan, MURUGESAN, San. The enterprise mobile applications development framework. EEE Computer Society, 2010, p. 33-39.