• Nenhum resultado encontrado

Aplicativo Android para mapeamento de rotas percorridas

N/A
N/A
Protected

Academic year: 2021

Share "Aplicativo Android para mapeamento de rotas percorridas"

Copied!
60
0
0

Texto

(1)

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

(2)

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

(3)

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

(4)

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 а

(5)

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).

(6)

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)

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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.

(13)

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

(14)

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

(15)

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.

(16)

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.

(17)

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

(18)

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

(19)

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.

(20)

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.

(21)

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/m aps/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/m aps/documentation/geocoding/int ro?hl=pt-br Captura de descrição de localização atraves de coordenadas.

Android Studio V2.0 https://developer.android.com/stu dio/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.

(22)

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.

(23)

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’.

(24)

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

(25)

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.

(26)

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

(27)

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:

(28)

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

(29)

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.

(30)

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:

(31)

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

(32)

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

(33)

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.

(34)

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.

(35)

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.

(36)

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.

(37)

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.

(38)

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.

(39)

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.

(40)

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.

(41)

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.

(42)

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();

(43)

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;

}

(44)

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_SERVIC

E);

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();

}

(45)

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)

Referências

Documentos relacionados

Our contributions are: a set of guidelines that provide meaning to the different modelling elements of SysML used during the design of systems; the individual formal semantics for

Safatle que na filosofia política moderna se tem algo que parece onipresente é a ideia de que a política é indissociável das modalidades de produção de um corpo político

ESTE FORMULÁRIO FOI PREPARADO COM AS INFORMAÇÕES NECESSÁRIAS AO ATENDIMENTO DAS DISPOSIÇÕES DO CÓDIGO ANBIMA DE REGULAÇÃO E MELHORES PRÁTICAS PARA OS FUNDOS

As idas e vindas do projeto de lei para a criação dos conselhos escolares da rede municipal de São Leopoldo nos ensinou que é melhor uma lei com falhas e

O estudo de tais formulações possibilita assim, compreender as imbricações entre as influências das práticas sociais que permeiam o universo escolar e no qual são reelaboradas, e,

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

A aplicação precisa de comunicar com os servidores do Bitdefender para determinar o estado de segurança das aplicações que analisa e das páginas web que visita e também para receber

Caso este equipamento apresente alguma não conformidade, encaminhe-o para a Assistência Técnica Autorizada VONDER