Você está na página 1de 51

CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA “PAULA SOUZA”

FACULDADE DE TECNOLOGIA DE RIBEIRÃO PRETO

CURSO SUPERIOR DE TECNOLOGIA EM

ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Cadê Meu Pet? Aplicativo Android para auxiliar na localização de animais achados e
perdidos

Fernando Marchetti

PROF. ORIENTADOR: MSc. Fabrício Gustavo Henrique

RIBEIRÃO PRETO, S.P.

2019
Fernando Marchetti

Cadê Meu Pet? Aplicativo Android para auxiliar na localização de animais achados e
perdidos

Monografia apresentada à Faculdade de Tecnologia de


Ribeirão Preto, como parte dos requisitos para a obtenção do
título de Tecnólogo em Análise Desenvolvimento de
Sistemas.

Orientador: Prof. MSc. Fabrício Gustavo Henrique

RIBEIRÃO PRETO, S.P.

2019
Dedico esta obra aos amantes dos animais e minha mãe que me observa do céu.
AGRADECIMENTOS

A meus pais Edson e Suely por sempre me apoiarem e me incentivarem


A minha esposa Elisa Yoko por me incentivar a realizar a inscrição no vestibular e
pela compreensão da minha ausência devido aos estudos;
A todos aos professores da Fatec Ribeirão Preto, pelo conhecimento passado e tempo
que se dedicaram a nosso desenvolvimento;
A meu orientador, Fabricio pelos incentivos, paciência, auxílio e cobranças para o
desenvolvimento deste aplicativo;
A minha professora Ana Patrícia que em uma conversa comigo me inspirou a realizar
este aplicativo.
RESUMO

Cadê meu Pet, aplicativo Mobile visando auxiliar na localização de animais achados e
perdidos. Ter passado por essa adversidade me mostrou a necessidade de um sistema que
facilite e auxilie a procura de animais perdidos. O aplicativo permite incluir cadastros dos
animais perdidos, assim como os encontrados por outras pessoas em qualquer local.
Utilizando os recursos disponíveis atualmente nos smartfones é possível registrar a
localização via GPS, obter imagens e através das informações fornecidas no cadastro,
compartilhar estes dados possibilitando a consulta desses animais e sua possível localização.
Desenvolvido utilizando o Android Studio sendo uma ferramenta robusta e prática e escolhido
o sistema operacional Android por ser o mais comum entre a população, utilizado também
recursos nativos oferecidos pelo Google como o Firebase que oferece o recurso de Banco de
dados e armazenamento de arquivos no Storage, essenciais para realizar as consultas e
persistência dos dados e imagens.

Palavras-chave: Android. Mobile. GPS. Firebase. Storage


MARCHETTI, Fernando. Cadê meu Pet? Aplicativo Android para auxiliar na localização
de animais achados e perdidos. Trabalho de Graduação (Monografia). Centro Estadual de
Educação Tecnológica “Paula Souza”. Faculdade de Tecnologia de Ribeirão Preto.48p. 2019.

ABSTRACT

Cade Meu Pet. mobile app to help locate lost and found animals. Having gone through this
adversity showed me the need for a system that facilitates and assists in the search for lost
animals. The app allows you to include records of lost animals, as well as those found by
other people anywhere. Using the resources currently available in smartphones it is possible
to record the location via GPS, obtain images and through the information provided in the
registration, users can share these data allowing consultation of these animals and their
possible location. Developed using Android Studio as a robust and practical tool and Android
operating system is the most common among the population, also using native features
offered by Google such as Firebase that offers the database and file storage feature. Storage,
essential for querying and persisting data and images.

Keywords: Android. Mobile. GPS. Firebase. Storage


LISTA DE FIGURAS

Figura 1 Modelo PACT.................................................................................... 17


Figura 2 Requisitos de usuário e de sistema..................................................... 20
Figura 3 Arquivo salvo no formato JSON........................................................ 23
Figura 4 Firebase Console................................................................................. 26
Figura 5 Métodos de autenticação de usuário .................................................. 27
Figura 6 Usuário cadastrado Firebase Authentication...................................... 27
Figura 7 Dados armazenados no Realtime Database........................................ 28
Figura 8 Tela de desenvolvimento do Android Studio..................................... 31
Figura 9 Telas da aplicação............................................................................... 32
Figura 10 Chave SHA1 para acesos ao Firebase................................................ 33
Figura 11 Telas de Login e Cadastro de usuário................................................ 33
Figura 12 Menu Principal................................................................................... 35
Figura 13 Telas de seleção de local e anúncio.................................................... 37
Figura 14 Anúncio selecionado e ligação para o anunciante.............................. 39
Figura 15 Telas de cadastros dos anúncios......................................................... 40
Figura 16 Anúncio no banco de dados................................................................ 42
Figura 17 Tela de GPS........................................................................................ 44
Figura 18 Telas Cadastro do Usuário e Anúncio do usuário.............................. 46
Figura 19 Dicas Uteis.......................................................................................... 47
LISTA DE GRÁFICOS

Gráfico 1 Versões Android............................................................................... 17


Gráfico 2 Cota no Mercado de Sistema operacional......................................... 25
LISTA DE TABELAS

Tabela 1 Versões Android................................................................................ 24


LISTA DE ABREVIATURAS E SIGLAS

ABNT Associação Brasileira de Normas Técnicas


FATEC Faculdade de Tecnologia
JSON JavaScript Object Notation
TIC´s Tecnologias de Informação e Comunicação
IHC Interação Humano Computador
SQL Structured Query Language
NoSQL Banco de dados não SQL
PET Animal de estimação
SKD Kit de desenvolvimento de software
API Interface de Programação de aplicativos
SHA1 Nome de função de criptografia
GPS Sistema de posicionamento Global
FGV Fundação Getúlio Vargas
SUMÁRIO

1 INTRODUÇÂO ........................................................................................................... 14
2 FUNDAMENTOS TEÓRICOS .................................................................................. 16
3 MATERIAIS E MÉTODOS ....................................................................................... 23
4 DESENVOLVIMENTO.............................................................................................. 29
5 RESULTADOS ............................................................................................................ 48
6 CONSIDERAÇÔES FINAIS ...................................................................................... 49
REFERÊNCIAS ..................................................................................................................... 50
APÊNDICES ........................................................................................................................... 52
APÊNDICE A – TERMO DE ORIGINALIDADE ............................................................. 53
14

1 INTRODUÇÂO

Devido aos grandes números de pet’s perdidos, e com isso trazendo grandes
desconfortos aos seus donos, sendo assim foi pensado em desenvolver um app mobile de fácil
acesso, e de rápida utilização, para facilitar o encontro dos pet’s. Tendo em vista que no
mundo atual, todos utilizam os mais diversos tipos de app em seu smartphones garantindo um
alcance maior na quantidade de pessoas que podem utilizá-lo

1.1 Justificativa

Este app terá o nome de “Cadê Meu Pet?”. Um programa desenvolvido para
smartphones Android onde o usuário pode consultar e cadastrar um pet que perdeu ou
encontrou, com isso, compartilhando as informações feitas no cadastro e os filtros no app para
auxiliar no reencontro do pet com seu dono. Para agilizar o seu uso, foi feito com uma
interface simples e com isso a possibilidades de rapidamente realizar um cadastro ou consulta
no Banco de dados dos animais perdidos e achados.
A relação do ser humanos é muito importante, este relacionamento vai muito além de
um simples animal, pois para ambos cria um elo emocional e psicológico. Quando um pet por
algum motivo é perdido, ou acaba fugindo, gera um grande abalo na família a qual ele
pertence, gerado pela incerteza de seu paradeiro e pela preocupação com sua saúde e
segurança.
Utilizando um Smartphone com um sistema que é utilizado por uma grande fração da
população e seus recursos, pode ser criado uma ferramenta intuitiva, de fácil acesso, que visa
facilitar e auxiliar o reencontro desses animais, com a ajuda da comunidade que o usa gerando
uma rede de achados e perdidos, que pode facilmente ser consultada e atualizada, aumentando
as chances de um reencontro.

1.2 Motivação

Algumas sensações, não podem ser facilmente descritas, muitas delas é preciso passar
pela situação para entender, assim como a perda deum pet querido, gera uma enorme
incerteza e infelicidade, que nos leva a várias horas de buscas em vão, nada supera a alegria
de um reencontro e um conforto repentino.
15

Ter passado por essa adversidade me fez perceber que apesar de termos vários
recursos, poucos são usados de forma eficiente, mesmo hoje em dia quando um animal é
perdido recorremos a entrar no carro, passando por ruas desconhecidas na esperança de
encontra-lo e colar fotos em postes torcendo para o telefone tocar e termos uma boa notícia.
Foram duas semanas de dúvidas e preocupação, até recebemos uma ligação, mas pelo menos
nessa teve um final feliz.

1.3 Objetivos

Neste trabalho iremos descrever os métodos, desenvolvimento, testes e conclusões de


um software para dispositivo mobile Android que tem por.

1.3.1 Objetivos Gerais

Facilitar a localizações de animais perdidos, através das informações coletadas nos


cadastros realizados pelos usuários, que possui opções fixas para garantir uma padronização
destes, obtenção de posição via GPS.
Verificamos que atualmente existem poucas ferramentas que oferecem este recurso de
cadastro, consulta e muitas são realizas por sites, o que não oferece um recurso de mobilidade
eficiente quanto o que pode ser feito pelo aplicativo.

1.3.2 Objetivos específicos

Também é possível o usuário escrever uma breve descrição, bem como informar dados
de contato caso desejar, exibir uma lista ordenada por estado e região, bem como filtros
específicos que podem facilitar a consulta de animais que foram perdidos ou encontrados
pelos usuários.
Para facilitar o acesso por todos, a interface foi feita pensando em ser prática e sem
muitas configurações necessárias para que qualquer pessoa possa utilizar.
16

2 FUNDAMENTOS TEÓRICOS

Para realizar o desenvolvimento deste app foi utilizado fundamentos teóricos e


ensinamentos adquiridos em aula para a conclusão do escopo e bibliografia específica.
Tais como Interação Humano Computador, Banco de Dados, Engenharia de Software,
Programação para Dispositivos Moveis foram pesquisados e utilizados neste documento, o
que possibilitou a criação de um app de fácil uso, onde todos podem realizar a consulta ou
cadastro com poucos passos, sem muitas configurações e telas com muitas informações
confusas.
Nos próximos tópicos será realizado uma descrição destes fundamentos e sua
contribuição para o desenvolvimento deste projeto.

2.1 Desenvolvimento para dispositivos moveis

As tecnologias digitais oferecem mudanças exponenciais e tecnologias como mobile e


cloud estão revolucionando todas as indústrias e negócios e quem se especializar na
plataforma mobile terá uma grande vantagem competitiva, Glauber (2015).
Na escolha da plataforma de desenvolvimento do nosso app, optamos para o uso de
um smartphone, por possuir os recursos de precisão e comunicação necessários e devido a sua
aceitabilidade e acessibilidade perante a população. No Brasil, segundo a reportagem da
Época, e pesquisa feita pela (FGV-SP), hoje existem mais de 230 milhões de smartphones
ativos, na mesma pesquisa, destaca que supera o uso de desktops e laptops, que atualmente o
número de usuários chega a 180 milhões (Época 2019).

2.2 Tecnologias de informação e comunicação

Tecnologias de informação e comunicação (TIC.s) podem ser descritas como recursos


tecnológicos utilizados em conjunto para atingir um objetivo comum. São utilizadas nas mais
diversas áreas, como comercial, industrial, educacional (PACIEVITCH, 2006). Permitem que
sistemas computacionais embutidos nos mais diversos dispositivos eletrônicos combinando os
meios de comunicação.
As TIC,s se desenvolvem constantemente nos mais diversos aparelhos eletrônicos e
sua disseminação encontrasse num nível em que hoje em dia é difícil encontrar alguém que
17

não tem um contato com qualquer tipo de tecnologia, independente do grau de instrução,
social, econômico e local (BARBOSA; SILVA, 2010 p.44).
No software descrito neste projeto utilizaremos recursos como a Internet, GPS, Banco
de Dados para realizar a coleta e disseminação de informação para integrar e promover a
relação entre usuários e tecnologia visando um bem comum.

2.3 Interação Humano Computador, Acessibilidade e Usabilidade

Nosso projeto por ser desenvolvido para plataforma mobile, utiliza uma área de estudo
da TI muito importante. A Interação humano computador foca no estudo da integração entre
pessoas e computadores, são incluídos nesse processo a acessibilidade e usabilidade.
“O design de sistemas interativos preocupa-se com o desenvolvimento de sistemas
interativos de alta qualidade, produtos e serviços que combinam com as pessoas e com seus
modos de vida [...]” (BENYON, 2010 p.3).
A acessibilidade consiste na remoção de barreiras que poderiam excluir um grupo de
pessoas de usarem o sistema enquanto a usabilidade consiste na qualidade das interações.
De acordo com Benyon (2010, p.80) “Um sistema deve ser acessível antes de usável”
e ainda o autor descreve alguns conceitos que o desenvolvedor deve ter em mente para que
seja acessível. Na lista abaixo descrevo um breve resumo destes conceitos.
a) Fisicamente o sistema não deve excluir pessoas devido a localização errada de
equipamentos ou de dispositivos de entrada e saída que exigem habilidades
específicas.
b) Conceitualmente o sistema tem que possuir instruções simples e claras sem
comandos obscuros.
c) Economicamente serão excluídas se tiverem que pagar para uma tecnologia
essencial.
d) Culturalmente serão excluídas quando os designers fazem suposições
inadequadas de como as pessoas trabalham e organizam as suas vidas.
e) Socialmente quando a aplicação não está disponível a um grupo de pessoas
devido a localização ou grupo social particular.
18

Sobre a usabilidade Benyon (2010) informa algumas características que o sistema


deve possuir.
a) Eficiente desde que as pessoas sejam capazes de utilizar com esforço
adequado.
b) Eficaz na medida que contém funções e informações apropriadas e
organizadas.
c) Fácil de aprender quando é possível lembrar como utilizá-los mesmo após
um tempo sem uso.
d) Seguro de operar em diversos contextos de sua utilização.
e) Grande utilidade, pois, faz o que as pessoas esperam que seja feito.
Uma maneira de ver a usabilidade é alcançar um equilíbrio entre os quatro fatores
principais de design de sistemas interativos centrados no homem (PACT).
a) Pessoas.
b) Atividades que as pessoas desejam realizar.
c) Contexto onde a interação ocorre.
d) Tecnologias (hardware e software).
A figura 1 abaixo mostra a usabilidade sobre o contexto do PÀCT
Figura 1. PACT

Fonte - Benyon (2010 p.86)

Observamos que segundo o PACT, deve haver o equilibrio da interação entre as


pessoas e as tecnologias que elas estão usando concentrando-se na interface. A outra relação é
a interação entre as pessoas e as tecnologias consideradas como um todo (o sistema pessoas-
tecnologia), as atividades que estão sendo realizadas e os contextos dessas atividades.
19

No software deste projeto, foi projetada uma navegação fácil entre as telas, com
poucas informações a serem digitadas pelo usuário e utilizando opções pré-definidas. As
informações são coletadas e utilizadas de forma padronizada permitindo uma uniformidade na
apresentação dos anúncios e facilitando o seu uso.

2.4 Engenharia de Software

Na área da computação, a Engenharia de Software é utilizada para a especificação,


criação, desenvolvimento e manutenção do software. Seu objetivo é apoiar o engenheiro no
desenvolvimento profissional de software, mais do que a programação em si, pois não trata da
forma como o código de um programa deve ser escrito ou quais linguagens utilizar, mas toda
a documentação e dados de configurações para o software operar corretamente (Sommerville,
2011).
A engenharia de software segundo Bauer (1972, pg.71): “O Estabelecimento e uso de
sólidos princípios de engenharia para que se possa obter economicamente um software que
seja confiável e que funcione eficientemente em máquinas reais”.
(Sommerville, 2011) ainda difere onde um software de desenvolvimento e uso próprio,
o software profissional e de qualidade deve atender a um conjunto específico de
características, abaixo descrevo um breve resumo destas características.
a) Manutenibilidade: O software deve ser escrito de forma que possa evoluir para
atender as necessidades dos clientes.
b) Confiança/proteção: O software não pode causar prejuízos econômicos ou
físicos aos clientes devido ao uma falha ou usuários maliciosos
c) Eficiência: O sistema não deve desperdiçar recursos do sistema, como
memoria, processamento e ter capacidade de resposta aceitável.
d) Aceitabilidade: O software deve ser compreensível, usável pelo usuário a qual
é destinado.

2.4.1 Engenharia de Requisitos

Os requisitos refletem as necessidades dos clientes, neles serão descritos o que um


sistema deve realizar e suas finalidades, informa também suas restrições de uso. Todo
20

processo de analisar, documentar, descobrir esses requisitos e restrições de um software é


chamado de engenharia de requisitos (Sommerville, 2011).
Esses requisitos são coletados e documentados para que posteriormente possa ser
validado o que o sistema fará. Ainda na engenharia de requisitos podemos dividir estes
requisitos deformas distintas para melhorar a comunicação com diferentes tipos de
interessados, Sommerville indica separar em requisito de usuários e de sistema. Os requisitos
de usuários são informadas as funções e restrições de forma abstrata de forma e legível pelo
cliente, em forma de diagramas, tabelas, expondo o ponto de vista e necessidades, sem sugerir
indicar uma solução, são de interesse de gerentes, usuários finais, engenheiros do cliente,
fornecedores.
Os requisitos de sistema por sua vez são mais detalhados, devem ser padronizados,
completos e consistentes, pois serão usados pela equipe de desenvolvimento e poderão até
fazer parte do contrato.
Na figura 2 podemos ver com distinção a diferença entre os tipos de requisitos de
usuário e de sistema e como é feita suas declarações em um exemplo de relatório de um
sistema de relatórios.

Figura 2 Requisitos de usuário e de sistema

Fonte - Sommerville (2011 p.72)


21

Os requisitos de software ainda podem classificados em requisitos funcionais e


requisitos não funcionais. Os requisitos funcionais descrevem o que o sistema deve realizar a
entradas de informações do usuário e como se comportar, eles vão variar de acordo com o tipo
de usuário e software mas podem ser descrito de forma abstrata e geral do sistema ou até
mesmo, ser mais específicos detalhando as funções do sistema de acordo com a entrada e
saída de informação.
Os requisitos não funcionais, não estão diretamente relacionadas as funções do
sistema, mas são necessários para que o sistema atenda o seu propósito e escopo (PLINIO,
2016). Alguns exemplos de requisitos funcionais listados por Sommerville (2011), seria
requisito não funcionais de desempenho, eficiência, confiança, proteção e vários outros que
podem integrar um sistema, pois irão variar de acordo com a necessidade, utilização, regra de
negócio para a empresa a qual está sendo desenvolvido.

2.5 Banco de Dados

Anteriormente a utilização de sistemas computacionais, empresas utilizavam fichas de


papeis onde eram organizadas e arquivadas de forma física. A consulta destas informações era
feita de maneira lenta e muito propicia a erros e limitação de acesso.
Com a evolução e utilização de sistemas computacionais estas informações passaram
a serem arquivadas de forma digital em sistema embutidos com a informação gravas em
disquetes ou discos rígidos, mas ainda sendo uma representação digital destes arquivos físicos
(Furtado, 2013).
Para gerenciar o crescente aumento e necessidade de organização das informações, no
início de 1970 Edgard Frank Codd apresentou seu artigo onde demonstra uma forma de
organizar e extrair grande quantidades de dados, este sendo o modelo relacional, utilizando os
conceitos matemáticos da teoria de conjuntos, onde os arquivos são armazenados em tabelas.
Conforme Heuser (1998, p. 16) “Um modelo de banco de dados é uma descrição dos
tipos de informações que estão armazenadas em um banco de dados”.
Com a popularização da Internet e um grande aumento na quantidade de informação a
ser armazenada, notou-se que a modelo entidade relacional apresentava uma perda de
desempenho, a solução para isso foi a utilização ode bancos de dados não relacionais.
Vale ressaltar que os Bancos de Dados Não Relacionais não foram criados para
substituir os Bancos de Dados relacionais, ambos possuem suas vantagens e desvantagens e
devem ser utilizados de acordo com os interesses das empresas e suas finalidades.
22

2.5.1 Banco de Dados Relacional

Atualmente é amplamente utilizado por prover acesso facilitado e a possibilidade te


um abrangente tratamento das informações nele armazenadas, utilizando SGBDs, executando
comandos SQL organizando manipulando e garantindo a segurança. (Oliveira. S.S).
Destacam-se nestes ramos grandes empresas como a Oracle, Microsoft SQL Server. Dentre
suas vantagens está uma grande capacidade de garantida de consistência de dados e controle
de concorrência.

2.5.2 Banco de Dados Não Relacional

Com a necessidade de gerenciamento de grandes quantidades de dados e a necessidade


de diminuir o custo da escalabilidade, passou-se a utilizar bancos de dados distribuídos que
gerenciam dados semiestruturados de diversas origens evitando assim o uso de grandes
servidores para gerenciamento dos dados. Os Bancos NR foram criados baseados em
classificações de acordo com suas especificações.
Oliveira S.S nos informa algumas classificações destes bancos, abaixo descrevo um
breve resumo das informações por ele apresentadas
a) Banco de Dados de esquema chave/valor. Os arquivos são armazenados e
indexados por chaves, onde por meio desta chave os dados são rapidamente
acessados.
b) Banco de dados Orientados a Colunas: Neste esquema nem todos as linhas
possuem a mesma quantidade de colunas.
c) Banco de dos Orientados a Grafos: Este modelo guarda objetos em vez e
registros e sua busca e realizada através da navegação entre s estes objetos.
d) Banco de Dados Orientados a Documentos: Os arquivos são armazenados em
conjuntos de documentos e estes possuem um conjunto de chaves e o seu
respectivo valor. Possui uma estrutura flexível e é possível adicionar novos
campos aos documentos sem ocasionar erros na estrutura do Banco de dados.
Utiliza o formato JSON para realizar o tratamento dos dados.
23

Na figura 3 abaixo temos uma representação da informação salva em formato JSON.

Figura 3 - Arquivo salvo no formato JSON

Fonte - Oliveira S.S (2014)

A Vantagem de utilizar o arquivo no formato JSON é que o modelo é facilmente


representado e possuem a característica de serem auto descritivos, que corresponde a ideia de
ser entendido apenas visualizando o arquivo. Sua representação é onde para cada valor
apresentado, é atribuído um nome e para cada objeto é atribuído uma chave, representada
“{}” (Corrêa, 2012).

3 MATERIAIS E MÉTODOS

Definido os e apresentado os fundamentos teóricos, neste capítulo demostraremos as


tecnologias usadas que possibilitou a criação do software descrito neste documento.

3.1 Android Studio e Android

Ferramenta padrão e oficial para desenvolver apps para todos os tipos de


equipamentos que utilizam o sistema operacional Android, oferecendo recursos de edição
visual de layout, emulação de sistemas e edição de código inteligente para produtividade.
Como definido em seu próprio site, o “Android é uma pilha de software para uma
variedade de dispositivos. Seu principal objetivo é criar uma plataforma de software aberta
que permite transformar ideias inovadoras em realidade e apresentar um produto bem-
sucedido que aprimora a experiência móvel dos usuários” (Android 2019).
Sua primeira versão foi lançada em 2008 e em sua evolução teve várias versões,
atualmente está sendo disponível na versão 10.
24

Na tabela 1 podemos verificar o nome e versão de algumas versões já lançadas.

Tabela 1 – Versões Android

Versão Codename API Distribuição


2.3.3 - Gingerbread 10 0.3%
2.3.7
4.0.3 - Ice Cream Sandwich 15 0.3%
4.0.4
4.1.x Jelly Bean 16 1.2%
4.2.x 17 1.5%
4.3 18 0.5%
4.4 KitKat 19 6.9%
5.0 Lollipop 21 3.0%
5.1 22 11.5%
6.0 Marshmallow 23 16.9%
7.0 Nougat 24 11.4%
7.1 25 7.8%
8.0 Oreo 26 12.9%
8.1 27 15.4%
9 Pie 28 10.4%
Fonte Android(2019)

No gráfico, podemos verificar a proporção das versões do Android em uso atualmente.

Gráfico 1 Versões Android

Fonte Android(2019)

Tanto o Android como o IOS da Apple, são os sistemas que dominam o mercado, e o
ideal sempre é construir um software para as duas plataformas para atingir quase os 100% de
usuários de smartphones, mas ao definir qual sistema operacional seria utilizado, onde o
25

nosso software iria executar, escolhemos o Android devido ser o sistema mais comum entre
os usuários de smartfones e por ter uma maior familiaridade com o uso do sistema, garantindo
assim um melhor detalhamento desse documento.
No gráfico 2 podemos constatar como os dois sistemas operacionais dominam o
mercado de smartfones ficando o Android com cerca de 69%, IOS 29% e o restante com
outros sistemas.

Gráfico 2 – Participação no Mercado de Sistema operacional móvel

Fonte - netmarketshare.com (2019).

3.2 Firebase

“O Firebase ajuda as equipes de aplicativos para dispositivos móveis e da Web a


alcançar o sucesso” (Firebase, 2019).
Firebase é uma plataforma provida pela Google, abrangente, oferece diversos recursos
e serviços e várias de suas ferramentas permitem a criações de um aplicativo de alta
qualidade, desde ferramentas de autenticação de usuário, monitoramento de atividade,
armazenamento de dados e banco de dados.
Nosso app utiliza três recursos oferecidos pelo Firebase que foram essenciais. Firebase
Authentication responsável pelo gerenciamento de usuários, Firebase Realtime Database
responsável pela persistência dos dados e Firebase Cloud Storage responsável pelo
armazenamento das imagens. O gerenciamento destas ferramentas é realizado diretamente no
site do Firebase pela aplicação, Firebase Console.
26

Na Figura abaixo temos uma imagem da tela do Console do Firebase com acessos
rápidos a serviços e estatísticas.

Imagem 4 – Firebase Console

Fonte – Firebase (2019)

3.2.1 Firebase Authentication

Quando desenvolvemos um app que será usado por vários usuários, é indispensável
uma forma de controlar esses acessos ao sistema. Reconhecendo e confirmando a identidade
do usuário, possibilita salvar os dados em nuvem com segurança e oferece uma experiencia
personalizada (Firebase Authentication, 2019).
Vários serviços de autenticação de usuários estão disponíveis a escolha do
desenvolvedor, como a utilização de provedores federados Google, Facebook, Twitter, assim
como utilização de usuário e senha, número de telefone. Em nosso aplicativo, inicialmente foi
definido que a autenticação por usuário e senha como sendo suficiente para controlar o acesso
de usuários.
Na figura 5 verificamos uma lista de métodos disponíveis para login no Firebase,
assim como os seus status que define quais métodos estão ativos para utilização.
27

Imagem 5 – Métodos de autenticação de usuário

Fonte: Firebase Console(2019)

Na Figura 6 temos uma consulta de usuário que está cadastrado no Firebase


Authentication.

Imagem 6 – Usuário cadastrado Firebase Authentication

Fonte: Firebase Console (2019)

O usuário pode tanto ser cadastrado pelo Firebase console como pela aplicação que o
desenvolvedor está criando. No nosso sistema como será utilizado por vários usuários o
método mais eficiente é realizar pela própria aplicação, processo que será descrito mais à
frente.
28

3.2.2 Firebase Realtime Database

O Realtime Database é um banco de dados NoSQL, hospedado em nuvem onde os


dados são armazenados em formato JSON. Seu acesso é integrado ao Firebase Authentication
permitindo assim o controle dos usuários aos dados. (Realtime DataBase,2019).
Por ser um aplicativo onde os usuários irão trocar informação e criar os anúncios,
essas informações devem estar disponíveis a todos, para isso utilizamos o serviço de Realtime
Database como nosso banco de dados.
Nele os dados são sincronizados e salvos, ficando disponível a todos os usuários
conectados. Sua vantagem por ser na nuvem é que dispensa a criação de estruturas físicas e
gastos com equipamentos em um projeto que ainda está na fase de evolução.
Na figura 7 tem um exemplo de dados salvos no banco de dados de nosso projeto onde
os dados ficam separados por nós.

Figura 7 – Dados armazenados no Realtime Database

Fonte: Realtime Database\Autor (2019)


29

3.2.3 Firebase Cloud Storage

Sua criação teve como objetivo, criar um serviço de armazenamento simples e


econômico para desenvolvedores, sendo possível armazenar imagens, vídeo e áudio gerados
pelo usuário e realizar o seu envio e compartilhamento (Cloud Storage, 2019).
No site do Cloud Storage, nos demonstram três principais características para se
utilizar este serviço.
a) Confiabilidade: Utilizando as SDKs, os uploads são feitos de forma confiável,
independentemente da velocidade da rede. Onde estes são reiniciados do ponde
onde foram interrompidos poupando tempo e largura de banda.
b) Segurança: Para identificação dos usuários o Cloud Store também é integrado
ao Firebase Authentication, fornecendo um acesso seguro e simples para
desenvolvedores.
c) Escalabilidade: Projetado para suportar a escala de exabytes.

Nosso app utiliza essa o Cloud Storage para salvar as imagens que serão inseridas nos
cadastros dos pets e seu gerenciamento assim como Realtime Database é realizado pelo
Firebase Console.

4 DESENVOLVIMENTO

Neste capítulo será feito um relato sobre a construção e recursos utilizados para o
desenvolvimento do nosso software, detalharemos os as telas e suas funcionalidades em
ordem de utilização do software para ficar mais didático, e não a ordem em qual foram
criadas, pois todo desenvolvedor quando está criando muitas vezes pode retornar a outras
etapas do projeto e refaze-las caso tenha surgido uma nova necessidade ou ideia.

4.1 Licitação de Requisitos

Conforme dissertamos no capítulo 2 deste documento, os requisitos refletem a


necessidade do cliente para o software que irá ser desenvolvido e sua documentação é muito
importante (Sommerville 2010). Apesar do software não ter um cliente que realizou um
contrato, a licitação dos requisitos nos auxilia a manter o foco no desenvolvimento e no
escopo para qual o app foi idealizado.
30

Abaixo descrevo alguns dos requisitos que foram anotados para garantir a entrega e
funcionamento deste software.
Requisito de usuário
a. O app deverá ser um sistema mobile onde será possível cadastrar e listar
animais perdidos e encontrados e acessado em qualquer lugar.
Requisito de Sistema
a. Deverá listar estes cadastros e possuir filtros de pesquisa.
b. Permitir que usuário sem cadastro no sistema visualize a lista.
c. O usuário deve se cadastrar no sistema para criar um cadastro.
d. Ser possível cadastrar animais perdidos e achados separadamente.
e. Os dados devem ser salvos em banco de dados
f. O sistema deve usar o GPS para aprimorar a precisão do cadastro
Requisitos Funcionais
a. O app irá listar os cadastros de acordo com a localidade do usuário.
b. Ao realizar o cadastro de usuário deverá garantir que os dados sejam validos.
c. O menu deve permitir o usuário selecionar o tipo de cadastro que deseja criar.
d. Ao cadastrar os anúncios, os dados serão padronizados através de dados
prescritos e todos os dados essenciais devem estar preenchidos.
e. O sistema deve salvar o local onde está sendo feito o anúncio através do GPS
Requisitos não funcionais
a. Requisitos de usabilidade.
a. O app deve ser fácil de utilizar e de rápida aprendizagem
b. Requisito de Confiabilidade
a. O usuário deve sempre ter a acesso ao app.
c. Requisito de Desempenho
a. O sistema deve listar rapidamente a lista de animais.
d. Requisito de portabilidade
a. O app deve ser possível utilizar em qualquer local
e. Requisito segurança
a. O sistema deve garantir a privacidade dos dados dos usuários e
controlar o acesso ao banco de dados
31

4.2 Android Studio

O Android Studio foi essencial para a criação do aplicativo, oferecendo facilidades no


desenvolvimento como pré-visualização da interface, aviso de erros e rápida simulação para
os recursos desenvolvidos.

4.2.1 Interface Gráfica

O Android Studio facilita muito a criação da interface gráfica do app, em seu


repertorio possui vários recursos prontos que o desenvolvedor pode utilizar e alterar de acorde
com sua necessidade e até mesmo experiencia.
Mesmo depois de finalizada a criação do app, o desenvolvedor pode alterar esta
interface, ou por necessidade de adicionar novos recursos, ou remover algo que não seja mais
necessário, ou até mesmo por estética, sem que isso afete o seu projeto, pois tanto o código
fonte da interface, quanto o código fonte da regra de negócio, são feitos em objetos separados.
Na imagem abaixo vemos como é a tela de desenvolvimento padrão do Android
Studio.

Figura 8 Tela de desenvolvimento do Android Studio

Fonte: Android Studio\Autor (2019)

Podemos distinguir quatro colunas na tela, e da esquerda para direita temos a coluna
de consulta do projeto, onde podemos percorrer pelos objetos e recursos criados para serem
32

utilizados no app, na segunda coluna temos os recursos para desenvolvimento da interface,


como botões, caixas de texto, caixas de seleção e vários outros recursos.
Na terceira coluna temos uma representação de como será o resultado dos recursos
gráficos que está selecionado quando o aplicativo estiver rodando em um smartphone e na
quarta coluna, temos as informações do recurso selecionado, como por exemplo um botão ou
caixa de texto e várias parametrizações que podem ser usadas para personalizá-los.
No desenvolvimento do app, foi idealizado em tornar as telas e interações com os
usuários o mais simples possível, através da utilização de botões e caixas de seleção evitando
que o usuário tenha que digitar muitas informações, na figura 9 exibimos um exemplo das
telas de nosso app.

Figura 9 – Telas da aplicação

Fonte: Autor (2019)

4.2.2 Autenticação, login e segurança.

Como nosso app será utilizado por várias pessoas e suas informações serão
armazenadas e recuperada da nuvem, independentemente do local onde ela estiverem, fica
indispensável o uso de métodos para garantir e proteger as informações dos usuários e os
cadastros realizados no sistema, sendo assim, utilizamos as ferramentas e recursos fornecidos
pelo Firebase Authentication para garantir essa segurança.
33

Depois de criado uma conta e um projeto na plataforma do Firebase, é necessário


registrar e vincular o seu app a esse projeto. Para isso no Android Studio, dentro do projeto é
gerado uma chave de segurança que é obrigatória e utilizada para verificar seu app.
Na figura 10 podemos verificar o local onde é exibida a chave SHA1 do seu app.

Figura 10 – Chave SHA1 para acesos ao Firebase

Fonte: Autor (2019)

Ao informar a chave SHA1 no site do Firebase, é gerado um arquivo de configuração


no formato JSON, esse arquivo possui contém identificadores exclusivos que depois de
vinculados ao seu projeto garantem que apenas o seu app terá a acesso aos recursos da
plataforma do Firebase.
No login de nosso app, conforme a imagem possuímos poucas informações a serem
coletadas dos usuários, mas essenciais para realizar as consultas e cadastros.

Figura 11 – Telas de Login e Cadastro de usuário.

Fonte: Autor (2019)


34

Ao utilizamos o Firebase em nosso app, ele oferece recursos para validar a criação de
usuários em nosso app que futuramente possam realizar a criação de cadastros. No código
abaixo temos um exemplo de como esse processo funciona, utilizando o método de login por
e-mail e senha.

private void cadadastrarUsuario(){


FirebaseAutenticacao.createUserWithEmailAndPassword(usuario.getEmail(),usuario.getSenha()
).addOnCompleteListener(CadastrarUsuarioActivity.this, new OnCompleteListener<AuthResult>() {
if(task.isSuccessful()){
Toast.makeText(CadastrarUsuarioActivity.this,"Usuário Cadastrado com Sucesso",
Toast.LENGTH_LONG).show();

Ao digitarmos os dados na tela, utilizamos a função createUserWithEmailAndPassword, e


nela utilizamos os dados digitados na tela de cadastro através das variáveis getEmail e
getSenha, com isso o Firebase valida os dados informados, se estiverem corretos, ele cria um
novo usuário, se estiver errado ele nos retorna uma exceção de erro que podemos recuperar o
seu valor e exibimos a sua mensagem conforme o trecho de código abaixo.
String falhacadastro;
try {
throw task.getException();
} catch (FirebaseAuthWeakPasswordException e) {
falhacadastro = "Digite uma senha mais forte";
e.printStackTrace();
} catch (FirebaseAuthUserCollisionException e) {
falhacadastro = "E-Mail informado já esta cadastado";
e.printStackTrace();
} catch (FirebaseAuthInvalidCredentialsException e) {
falhacadastro = "E-Mail digitado invalido, verifique!";
e.printStackTrace();
} catch (Exception e) {
falhacadastro = "Não foi possível realizar o cadastro, tente novamente mais tarde";
e.printStackTrace();
}
Toast.makeText(CadastrarUsuarioActivity.this,"Falha: " +
falhacadastro,Toast.LENGTH_LONG).show();
}
}
});
35

Vemos que através das funções FirebaseAuthWeakPasswordException,


FirebaseAuthUserCollisionException, FirebaseAuthInvalidCredentialsException verificamos
se o erro foi por causa de uma senha muito pequena, e-mail já cadastrado ou e-mail invalido e
informar ao usuário para corrigir o seu cadastro.
Depois de criado o usuário, caso porventura deslogarmos do app, podemos fazer o
Login, assim como na criação de usuário, o Firebase possui o recurso de fazemos o login,
onde o processo de autenticação é muito semelhante com o de criar cadastro, onde
informamos o e-mail e senha e utilizarmos a função signInWithEmailAndPassword, que caso
ter erro de login nos é retornado a mensagem de erro e motivo idênticas a de criar o cadastro.
Após realizar o cadastro, o sistema direciona o usuário a tela de menu principal por
onde é possível navegar entre as telas através dos botões de menus.
Na figura 12 exibimos o menu principal onde é possível navegar entre as
funcionalidades do app e que iremos descrever mais a frente neste projeto.

Figura 12 – Menu Principal

Fonte: Autor (2019)

4.2.3 Anúncios e Listas de Achados e Perdidos.

Ao executar o app e não estando logado no sistema, será apresentado ao usuário duas
telas onde será selecionar um estado e região, com essas informações o sistema irá exibir a
lista de anúncios que foram feitos baseados nestas informações ordenadas por data de criação
36

do cadastro para os mais recentes serem exibidos primeiros, também é possível utilizar alguns
filtros na tela para refinar os tipos de anúncios exibidos, assim o usuário pode realizar uma
consulta e filtrar os resultados.
Na figura 13 temos a exibição das telas de seleção ode estado e região e da lista de
anúncios que é exibida após a seleção de local.

Figura 13 Telas de seleção de local e anúncio

Fonte: Autor (2019)

No Processo de desenvolvimento das telas de seleção de posição, utilizamos uma


ListView, esse recurso nos permite passar vários textos onde os mesmos são divididos e o
usuário pode selecionar o que deseja, abaixo temos o código simplificado destas seleções.

public void carregaListaUf() {


final String[] uf = getResources().getStringArray(R.array.estados);
ArrayAdapter<String> adaptador = new ArrayAdapter<String>(
getApplicationContext(),
android.R.layout.simple_list_item_1, android.R.id.text1, uf );
listaUf.setAdapter(adaptador);
listaUf.setOnItemClickListener(new AdapterView.OnItemClickListener() {
preferencias.salvarUf(uf[posicao]);
Intent intent = new Intent(ListaUFActivity.this, ListaUFDDDActivity.class);
37

}
});
}
Ao chamarmos a função carregaListaUf() o sistema carrega uma lista de texto na
variável uf, nesta variável será inserido todos os estados de nosso pais, depois essa lista é
carregada no ArrayAdapter que divide o texto em um formato padrão do Android com o nome
de simple_list_item1, que define os espaçamentos, fontes e distancia entre os textos e depois
exibida na tela do usuário através da função listaUfsetAdapter.
A função listaUf.setOnItemClickListener é responsável por retorna em item da lista o
usuário clicou e com isso sabemos o estado que foi selecionado e é enviado para a próxima
tela qual item foi selecionado.
public void recuperaDDD(int numero){
switch (numero) {
case 23:
ddd = new String[]{"47 - Joinville/Blumenau/Itajaí/Balneário Camboriú",
"48 - Florianópolis e Região Metropolitana/Criciúma/Tubarão",
"49 - Chapecó/Lages/Caçador"};
break;
case 24:
ddd = new String[]{"11 - São Paulo/Jundiaí/Itu//Bragança Paulista",
"12 - São José dos Campos/Taubaté/Vale do Paraíba",
"13 - Santos/São Vicente/Baixada Santista/Vale do Ribeira",
"14 - Bauru/Marília/Jaú/Botucatu",
"15 - Sorocaba/Itapetininga/Itapeva",
"16 - Ribeirão Preto/Franca/São Carlos/Araraquara",
"17 - São José do Rio Preto/Catanduva/Barretos/Votuporanga",
"18 - Campinas/Piracicaba/Limeira/Americana",
"19 - Chapecó/Lages/Caçador"};
break;
Na tela de seleção de DDD recuperamos qual estado da lista foi selecionado, e cada
um possui uma numeração diferente, com isso podemos através de um switch recuperar qual
estado foi selecionado e retornar o DD referente ao estado.
38

Na lista de anúncios utilizamos os dados recuperados nessas duas telas para iniciar a
procurar no banco de dados e exibir os anúncios para o usuário que se enquadram nestes dois
parâmetros conforme no código simplificado abaixo.

public void recuperarAnunciosPublicosEstado(){


referenciaAnuncioPublico =
Firebase.getFirebase().child("anuncios_publicos").child(fitroEstado);
referenciaAnuncioPublico.addValueEventListener(new ValueEventListener() {

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


ListaAnimaisPublico.clear();
for (DataSnapshot Ano: dataSnapshot.getChildren()){
for (DataSnapshot Mes: Ano.getChildren()){
for(DataSnapshot anuncios:Mes.getChildren()) {
Animais animais = anuncios.getValue(Animais.class);
ListaAnimaisPublico.add(animais);
}
}
}
Collections.reverse(ListaAnimaisPublico);
adapterAnuncios.notifyDataSetChanged();
}

});
}

Ao acessar a tela de lista de anúncios, o sistema utiliza o estado selecionado na


variável filtroestado, e no trecho, Firebase.getFirebase() .child("anuncios_publicos")
.child(fitroEstado) verificamos que o sistema utilizada um estado especifico como filtro e
recupera no Banco de dados os anúncios específicos para este estado, e na função
onDataChange(@NonNull DataSnapshot dataSnapshot), o sistema percorre o retorno dos
dados do Firebase e salva os dados que se enquadram no filtro em uma lista de dados, onde
depois essa lista é carrega e exibida ao usuário.
Apesar de na lista de anúncios ter algumas informações de exibição, ao se deparar com
um interessante, o usuário pode selecionar o anúncio desejado para que seja exibido todas as
informações que foram fornecidas na hora do cadastro do anúncio.
Na tela do anúncios é exibido as fotos selecionadas e também informações padrões
que são selecionadas pelo usuário ao fazer o anúncio, duas opções interessantes são o botão
de mapas, onde é possível ver onde o pet foi perdido ou avistado bem como o telefone do
anunciante que pode ser feita a ligação caso o mesmo informou o telefone no cadastro,
facilitando a comunicação e o reencontro com o pet.
39

Na figura 14 temos uma exibição da tela de um cadastro feito e selecionado na lista de


anúncios.
Figura 14 Anúncio selecionado e ligação para o anunciante

Fonte Autor (2019)

4.2.4 Cadastro de Anúncio.

Uma das partes principais do nosso software são as etapas de cadastro dos anúncios,
na tela do menu principal possuem dois botões, “Perdi meu pet” onde o usuário que perdeu o
seu pet faz um cadastro para ser visualizado por outras pessoas que utilizam o software e o
botão “Encontrei um pet”, onde o usuário realiza um cadastro sobre um pet que localizou na
rua.
Em ambas as telas os recursos utilizados para criar o anúncio são praticamente os
mesmos, o usuário seleciona uma imagem que foi tirada pelo celular, salva sua posição
através gps, e completa as informações do cadastro utilizando textos padrões definidos na
criação do app para facilitar e padronizar os anúncios, caso o usuário ainda achar que essas
informações não são suficientes, ele pode digitar em uma caixa de texto algumas informações
extras que serão exibidas apenas quando o usuário selecionar um anúncio na lista de anúncios.
Na figura 15 exibimos como são as telas atualmente que realizam o cadastro dos
anúncios.
40

Figura 15 Telas de cadastros dos anúncios

Fonte: Autor (2019)

Uma das partes essenciais do nosso projeto, são nessas telas que serão criados os
anúncios onde as informações coletadas neles estarão disponíveis a todos os usuários de nosso
app.
Para facilitar a criação dos cadastros optamos por limitar o que o usuário irá digitar
com spinners que exibirão uma lista de textos fixos em nosso sistema. Campos como Tipo,
gênero, porte, faixa etária utilizam o mesmo recurso em ambas as telas.

String[] idade = getResources().getStringArray(R.array.Idade);


ArrayAdapter<String> adapterIdade = new
ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,idade);
adapterIdade.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spIdade.setAdapter(adapterIdade);

O funcionamento dos spinners são semelhantes a lista conforme descremos nas telas
de localidade do usuário, o sistema carrega uma lista de palavras que foram feitas de forma
fixa no sistema, como no gênero, definimos macho ou fêmea, no tipo gato ou cachorro.
Essa lista é carregada no anúncio no spinner e quando o usuário clica sopre a opção é
exibida uma pequena lista com esses textos o que nos poupa espaço e facilidade na
visualização do anúncio.
41

Temos também nesta tela, o local onde podermos salvar a foto do pet, ao clicar sobre a
imagem de câmera será exibida a opção se selecionarmos a galeria de nosso telefone através
da função.

public void escolherImagem(int requestCode) {


Intent i = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, requestCode);
}

Conforme no código verificamos a tela de seleção é carregado pela função


Intent.ACTION_PICK e acessa a memória de nosso telefone através da função
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.

Ao selecionarmos a imagem devemos salvar a sua posição, para depois enviar a imagem ao
banco de dados quando formos salvar o anúncio.

Uri imagemSelecionada = data.getData();


FotoP1.setImageURI(imagemSelecionada);
String caminhoImagem = imagemSelecionada.toString();
listaFotos.add(caminhoImagem);

Conforme verificamos no código o sistema utiliza a variável “imagemSelecionada” em


conjunto com a função setImageURI para exibir na tela do anuncio a imagem que
selecionamos, na variável “caminhoImagem” utilizamos para salvar o endereço da imagem, e
depois adicionar esse caminho em uma lista para podermos salvar mais de um caminho o que
representa a possibilidade de salvar mais de uma imagem no nosso banco de dados.
Depois de coletada todas as informações necessárias, é preciso salvá-las no banco de
dados, e para isso precisamos enviá-las único objeto, que chamamos de classe e está
definimos o nome de Animais. Abaixo temos o exemplo de nossa classe onde se verifica
vários dados que estão sendo validados e enviados.

public class Animais extends Usuario implements Serializable {


private String idAnuncio;
private String tipo;
private String nome;
private String idade;
private String genero;
private String porte;
private String descricao;
private String status;
private List<String> fotos;
42

private String latitude;


private String longitude;

Para salvarmos as informações no banco de dados, utilizamos as funções abaixo onde


na função DatabaseReference animaisRef = Firebase.getFirebase() definimos que vamos
utilizar o banco de dados para salvar os dados e nos parâmetros .child("meus_anuncios"); e
animaisRef.child(idUsuario).child(getIdAnuncio()).setValue(this) estamos informando os nós
que serão criados para garantir que os dados de cada usuário sejam independentes.

public void salvar(){ //Meus Anuncios


String idUsuario = Firebase.getIdUsuario();
DatabaseReference animaisRef = Firebase.getFirebase().child("meus_anuncios");
animaisRef.child(idUsuario).child(getIdAnuncio()).setValue(this);
salvarPublico();
}

Na imagem 16 temos um exemplo de um anúncio cadastrado no banco de dados


Figura 16 – Anúncio no banco de dados

Fonte: Autor (2019)


43

Ao mesmo tempo necessitamos também salvar as imagens no banco de dados, mas


conforme definimos na nossa documentação o Realtime Database é responsável pelos dados
enquanto o Cloud Storage é responsável por armazenaras as imagens.

for(int i = 0;i < listaFotos.size();i++){


String urlImagem = listaFotos.get(i);
int tamanhoListaFotos = listaFotos.size();
salvarFotoStorage(urlImagem,tamanhoListaFotos,i);
}

No trecho acima recuperamos a lista que possui o caminho das imagens que
selecionamos e a quantidade de imagens que queremos salvar no banco de dados, e passamos
essas informações na função salvarFotoStorage(urlImagem,tamanhoListaFotos,i); que irá
enviar para o Cloud Storage as nossas imagens.

private void salvarFotoStorage(String urlString, final int quantfotos, int contador){


//Criando Storage
StorageReference imagemAnuncio =
storage.child("imagens").child("anuncios").child(animais.getIdAnuncio()).child("imagem" +
contador);

No trecho acima parecido com a função de salvar os dados do anúncio, utilizamos


uma referência para o Cloud Storage e informamos o caminho que será criado, estes caminhos
também possuem identificadores únicos para diferenciar os anúncios de cada usuário

// Fazendo upload das fotos


UploadTask uploadTask = imagemAnuncio.putFile(Uri.parse(urlString));
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>()
{
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri Firebaseurl = taskSnapshot.getDownloadUrl();
String urlConvertida = Firebaseurl.toString();
listaUrlFotos.add(urlConvertida);
}

No trecho acima iremos enviar as imagens, depois de definir o caminho criamos uma
tarefa, UploadTask que informo ao Cloud que estamos enviando uma imagens e o caminho
que irá ser salva, o banco por sua vez retorna a autorização de salvar e com isso a imagem é
enviada e salva e completamos o cadastro que por sua vez passa a ser visualizado pelo outros
usuários do sistema.
44

4.2.5 GPS

Para facilitar inserir a informação do local de onde se encontra ou foi avistado o pet foi
adicionado no app a utilização de GPS o recurso é oferecido no Android Studio e com isso ao
visualizar o anúncio, um usuário pode marcar uma rota e se dirigir ao local da marcação e
para quem está realizando o cadastro, fica possível inserir o local assim que o sistema
recuperar e salvar a sua posição.
Na tela de cadastros dos pets perdidos e localizados ao clicar sobre o botão de mapas o
sistema irá carregar uma nova tela, onde após recuperar e exibir a posição do usuário o
mesmo utiliza o botão salvar posição que será utilizada para compartilhar o local de onde o
cadastro foi feito.
Na imagem 17 visualizamos a tela do GPS com a posição do usuário recuperada.

Figura 17 Tela de GPS

Fonte: Autor (2019)

No código simplificado abaixo verificamos como funciona o processo de


localização no Android.
45

public void onMapReady(GoogleMap googleMap){


mMap = googleMap;

(ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED ) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 5, locationListener

);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
LatLng meuLocal = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(meuLocal).title("Posição atual"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(meuLocal,15));
}
}
Ao iniciar a tela do GPS, o sistema carrega o maps, mas verifica na função
checkSelfPermission se o usuário deu permissão do sistema processar carregando o mapa e
exibi-lo.
Com a permissão feita o sistema carrega a função locationManager e
onLocationChanged que são responsáveis de comunicar o aparelho com o GPS e recuperar a
latitude e longitude que o usuário se encontra exibindo no mapa sua posição atual e também a
qual utilizamos para salvar no cadastro

4.2.6 Alterar Cadastro de Usuário e Anúncio

Na tela de cadastro de usuário, podemos conferir e alterar algumas informações que


forma feitas quando o usuário se cadastrou, como seu nome, telefone e-mail e região em que
se encontra, assim como na tela de anuncio do usuário o mesmo pode excluir um anúncio que
o mesmo fez caso não seja mais necessário.
46

Figura 18 Telas Cadastro do Usuário e Anúncio do usuário

Fonte: Autor (2019)

No menu do cadastro do usuário ao acessar a tela o sistema consulta os dados que


estão no Realtime Database e são exibidos ao usuário.
referenciaUuario = Firebase.getFirebase().child("usuarios").child(Firebase.getIdUsuario());
referenciaUuario.addValueEventListener(new ValueEventListener()

No código acima temos duas partes a primeira linha informados o local que estão os
dados do usuário no Realtime Database, enquanto na segunda linha criamos um evento para
recuperar essas informações e exibi-las ao usuário.

referenciaUuario.child("nome").setValue(nomealterar);

Na tela de cadastros do usuário, o sistema de consulta é parecido com lista de


anúncios, mas neste caso o sistema procura por anúncios que possuem o mesmo código de
usuário que é único e defino pelo FiraBase quando cada usuário realiza o seu cadastro.
Ao clicar sobre o anuncio o sistema carrega o anúncio e o usuário pode verificar como
ficou seu do anúncio, caso não tenha gostado ele pode retornar a tela anterior e realizar a
exclusão do anúncio.
47

public void removerAnuncio(){


String idUsuario = Firebase.getIdUsuario();
DatabaseReference animaisRef = Firebase.getFirebase().child("meus_anuncios")
.child(idUsuario).child(getIdAnuncio());
animaisRef.removeValue();
removerAnuncioPublico();
}

Conforme no trecho acima verificamos que sistema utiliza a getIdUsuario que é a


identificação única do usuário e a variável getIdAnuncio que é à identificação única do
anuncio selecionado e com isso rodamos as funções animaisRef.removeValue() e
removerAnuncioPublico() que excluem o cadastro do Banco de dados

4.2.7 Dicas Uteis.

No menu de dicas, utilizamos uma ListView em conjunto com uma DialogBox para
exibir umas informações de auxílio ao usuário, essas dicas foram retiradas e traduzidas do site
malibupetcare.com/lost-or-found-pets que tem por objetivo auxiliar o usuário a realizar outras
ações em conjunto com o app para que sua procura seja mais eficiente.
Na figura 19 temos um exemplo das telas exibidas no menu de dicas uteis.

Figura 19 Dicas Uteis

Fonte: Autor (2019)


48

5 RESULTADOS

Após terminado o desenvolvimento de nosso software, realizamos os testes em um


dispositivo Android físico e um smartphone com o sistema Android emulado pelo próprio
Android Studio.
Em ambos os sistemas, foram criados usuários e os mesmo realizando o cadastro de
anúncios utilizando as opções diferentes permitas nas telas de achados e perdidos.
Em todos os casos a criação de cadastro de usuário ocorreu como esperado, quando
realizamos um cadastro e tentamos realizar outro com as mesmas informações o sistema
impede o usuário de realizar esta operação e informa que o usuário já está em uso.
Ao realizar os cadastros de pets perdidos ou achados, assim que completados e salvos,
todos ficam disponíveis para consulta aos outros usuários.
49

6 CONSIDERAÇÔES FINAIS

Atualmente vivemos em uma época onde os recursos de tecnologia integrada nos


dispositivos moveis está muito mais acessível e eficiente. Smartphones atuais possuem um
gama de recursos que podem ser explorados e utilizados de forma eficiente e muito além do
que foram projetados, onde o desenvolvimento e criação de softwares está na capacidade de
estudo, esforço e imaginação do desenvolvedor.
Como feito neste documento, explicamos e demostramos como a utilização das
tecnologias desenvolvidas para dispositivos moveis podem ser utilizadas para o auxílio na
localização de animais achados e perdidos.
Verificamos que o software possui uma limitação em alguns aspectos e até recursos
que seriam interessantes o sistema possuir, como não estar disponível apenas para Android,
ter um indicador de listagem da quantidade de cadastros ativos e até a quantidade de
reencontros entre dono e pet foram realizadas, poder ordenar os anuncio de acordo com o
mais próximo e não por data e também bater fotos em vês de selecionar as existentes, mas o
objetivo principal do software que é a possibilidade de realizar um cadastro de forma rápida e
simples e compartilha-lo com outros usuários e auxiliar o reencontro e localização que é a
principal função do sistema foi alcançada.
O propósito da criação da aplicação móvel se veio devido a uma situação passada pelo
autor e a constatação de uma necessidade onde várias pessoas podem passar por esta mesma
situação e não possuírem os recursos para realizar a divulgação e possibilitar um reencontro.
50

REFERÊNCIAS

ANDROID. Android. 2019. Disponível em: <https://www.android.com/intl/pt-BR_br/>


Acesso em: 09. sep 2019.

BARBOSA, Simone Diniz Junqueira; SILVA, Bruno Santana da. Interação humano
computador. Rio de Janeiro: Elsevier, 2010.

BAUER, Frieddrich L, Software Engineering, In: Information Processing.(1972)

BENYON, David. Interação humano-computador. 2. ed. São Paulo: Pearson Prentice Hall,
2011.

CODD E. F. A Relational Model of Data for Large Shared Data Banks. Communications of
the ACM. v13, n.6, p. 377 - 387. Junho 1970

DEVELOPERS, android. Android Studio. 2012. Disponível em:


<https://developer.android.com/studio> Acesso em: 09. sep 2019.

GLAUBER, Nelson. Dominando o Android do básico ao avançado. 10. ed. São Paulo:
Novatec, 2015.

GONÇAVES, Eduardo Corrêa. JSON Tutorial. 2012. Disponível em:


<https://www.devmedia.com.br/json-tutorial/25275> Acesso em: 09. sep 2019.

GOOGLE, Developers. Disponível em: <https://developer.android.com/studio/index.html>


Acesso em: 04 abr. 2017.

GUSTAVO, Furtado, História dos Bancos de Dados. 2013. Disponível em:


<https://dicasdeprogramacao.com.br/a-historia-dos-bancos-de-dados/> Acesso em: 06 jun.
2019.

JACKIE, 10 Things to Do to Find Your Lost Pet.2010 Disponivel em:


<http://malibupetcare.com/lost-or-found-pets/> Acesso em 07 jul.2019

NEGOCIOS, Época. Brasil tem 230 milhões de smartphones em uso, 2019. Disponível em
<https://epocanegocios.globo.com/Tecnologia/noticia/2019/04/brasil-tem-230-milhoes-de-
smartphones-em-uso.html> Acesso em: 07 jun. 2019

NETAPPLICATIONS, Operating System Market Share/Mobile. Disponivel em: <


https://netmarketshare.com/operating-system-market-share> Acesso em 10 sep. 2019.

OLIVEIRA S.S bancos de dados não-relacionais: um novo paradigma para armazenamento


de dados em sistemas de ensino colaborativo. Revista Eletrônica da Escola de Administração
Pública do Amapá. Macapá, v.2 n.1, p.184-189, dez 2014

PACIEVITCH, Thais. Tecnologia da Informação e Comunicação. Disponível em:


<https://www.infoescola.com/informatica/tecnologia-da-informacao-e-comunicacao>
Acesso em: 06 ago. 2019.
51

SOMMERVILLE, Ian. Engenharia de software. Tradução de Kalinka Oliveira; Ivan Bosnic.


9. ed. São Paulo: Pearson Eduaction, 2011.

VENTURA, Plinio. O que é um requisito não funcional. Disponível em: <


https://www.ateomomento.com.br/o-que-e-um-requisito-nao-funcional/> Acesso em 16 ago.
2019.
52

APÊNDICES
53

APÊNDICE A – TERMO DE ORIGINALIDADE

TERMO DE ORIGINALIDADE

Eu, Fernando Marchetti, RG 40.064.489-7, CPF 324.547.268-40, aluno regularmente


matriculado(a) no Curso Superior de Tecnologia em Análise e Desenvolvimento de
Sistemas, da Faculdade de Tecnologia (FATEC), de Ribeirão Preto/SP, declaro que minha
monografia intitulada Cadê Meu Pet? Aplicativo Android para auxiliar na localização de
animais achados e perdidos é ORIGINAL.
Declaro que recebi orientação sobre as normas da Associação Brasileira de Normas
Técnicas (ABNT), que tenho conhecimento sobre o manual de trabalho de conclusão de curso
da FATEC/RP e que fui orientado sobre a questão do plágio.
Portanto, estou ciente das consequências legais cabíveis em caso de detectado
PLÁGIO (Lei Federal nº 9.610, de 19 de fevereiro de 1998, que altera, atualiza e consolida a
legislação sobre direitos autorais, publicada no D.O.U. de 20 de fevereiro de 1998, Seção I,
pág. 3) e assumo integralmente quaisquer tipos de consequências, em quaisquer âmbitos,
oriundas de minha monografia, objeto desse termo de originalidade.

Ribeirão Preto/SP, 29/10/2019.

Fernando Marchetti

Você também pode gostar