8/17/2019 Tcc Andre Lira
1/80
0
UNIVERSIDADE DO ESTADO DO AMAZONAS - UEA
ESCOLA SUPERIOR DE TECNOLOGIA
ENGENHARIA DE COMPUTA¸ C ÃO
ANDR É LIRA MOREIRA
SISTEMA M ÓVEL BASEADO EM ANDROID-NFC
PARA CONEX ÃO AUT ÔNOMA EM HOTSPOTS
Manaus
2013
8/17/2019 Tcc Andre Lira
2/80
ANDR É LIRA MOREIRA
SISTEMA M ÓVEL BASEADO EM ANDROID-NFC PARA CONEX ÃO
AUT ÔNOMA EM HOTSPOTS
Trabalho de Conclus˜ao de Curso apresentado
à banca avaliadora do Curso de Engenharia
de Computa ção, da Escola Superior de
Tecnologia, da Universidade do Estado do
Amazonas, como pré-requisito para obten¸ cão
do t́ıtulo de Engenheiro de Computa¸ cão.
Orientador: Prof. Dr. Carlos Maurı́cio Ser´ odio Figueiredo
Manaus
2013
8/17/2019 Tcc Andre Lira
3/80
ii
Universidade do Estado do Amazonas - UEA
Escola Superior de Tecnologia - EST
Reitor:Cleinaldo de Almeida Costa
Vice-Reitor:
Raimundo de Jesus Teixeira Barradas
Diretor da Escola Superior de Tecnologia:
Me. Cleto Cavalcante de Souza Leal Coordenador do Curso de Engenharia de Computa¸ c˜ ao:Dr. Raimundo Corrêa de Oliveira
Coordenador da Disciplina Projeto Final:Me. Tiago Eugênio de Melo
Banca Avaliadora composta por: Data da Defesa: 27/11/2013.
Prof. Dr. Carlos Mauŕıcio Ser´ odio Figueiredo (Orientador)
Prof. Dr. Raimundo Corrêa de Oliveira Prof. Dr. Jucimar Maia da Silva J´ unior
CIP - Cataloga¸ cão na Publica¸ cão
M835s MOREIRA, André
Sistema Móvel baseado em Android-NFC para conex˜ao aut ônoma em Hots-
pots / Moreira André; [orientado por] Prof. Dr. Carlos Mauŕıcio Ser´ odio Fi-
gueiredo - Manaus: UEA, 2013.
240 p.: il.; 30cm
Inclui Bibliograa
Trabalho de Conclus˜ao de Curso (Gradua¸cão em Engenharia de Computa-
ção. Universidade do Estado do Amazonas, 2013.
CDU: 004.45
8/17/2019 Tcc Andre Lira
4/80
iii
ANDR É LIRA MOREIRA
SISTEMA M ÓVEL BASEADO EM ANDROID-NFC PARA
AUTENTICA¸ C ÃO EM HOTSPOTS
Trabalho de Conclus ão de Curso apre-
sentado à banca avaliadora do Curso de
Engenharia de Computa¸cão, da EscolaSuperior de Tecnologia, da Universidade do
Estado do Amazonas, como pré-requisito
para obten çãoo do t́ıtulo de Engenheiro de
Computa¸cão.
Aprovado em: 27/11/2013BANCA EXAMINADORA
Prof. Carlos Mauŕıcio Ser´ odio Figueiredo, Doutor
UNIVERSIDADE DO ESTADO DO AMAZONAS
Prof. Jucimar Maia da Silva J´ unior, DoutorUNIVERSIDADE DO ESTADO DO AMAZONAS
Prof. Raimundo Corrêa de Oliveira, Doutor
UNIVERSIDADE DO ESTADO DO AMAZONAS
8/17/2019 Tcc Andre Lira
5/80
iv
8/17/2019 Tcc Andre Lira
6/80
v
AgradecimentosAo nal desta importante etapa, torna-se di-
f́ıcil fazer agradecimentos sem poder citar to-
das as pessoas que me inuenciaram ao longo
do desenvolvimento deste projeto, por isso
dedico a concretiza ção deste sonho a todos.
E com um carinho especial, agrade ço a Deus,agrade ço à minha faḿılia por amor e seu
crença em minhas conquistas. A meu irm ão
André Portela, por sua genialidade contagi-
ante, por seu apoio e amizade. À Priscilla Pe-
res, por sua cumplicidade, amizade e amor.
A meu orientador Mauŕıcio e aos demais ami-
gos professores, por sua dedicação ao ensinar,
por sua pacîencia e ajuda em momentos de
crise. Por m ao INdT, ambiente onde ad-
quiri grandes amizades e conhecimentos.
8/17/2019 Tcc Andre Lira
7/80
vi
Resumo
Este projeto tem como objetivo apresentar todos os passos efetuados com no desenvol-
vimento de um sistema m óvel baseado em Android-NFC, capaz de realizar conex˜oes sem
o entre smartphones Android e hotspots Wi-Fi , ao receber seus parâmetros de congura-
ção através de eventos Tap em Tags NFC . Esperando que estas informa¸cões esclareçam à
comunidade desenvolvedora de software do Estado do Amazonas sobre as comodidades e
possibilidades em automa ção providas pela utiliza ção correta da tecnologia NFC . Todas asquest ões referentes a sua modelagem conceitual, arquitetura de sistema e implementa¸ cão
serão abordadas e explicadas.
Palavras Chave: Near Field Communication, Wi-Fi, Ndef, Android OS, Tag NFC,
Hotspot, smartphone
8/17/2019 Tcc Andre Lira
8/80
vii
Abstract
This project has the purpose to present all the steps taken on the creation of an Android-
NFC technology based mobile system, capable of performing wireless connections between
a Android smart-phones device and Wi-Fi hotspots by receiving their conguration pa-
rameters from a Tap event on a NFC TAG . Hopping that these information provides
enlightening to the Amazon software developer community about the commodities and
automation possibilities provided by the use right use of NFC technology. All mattersregarding its conceptual design, system architecture and implementation will be concerned
and therefore explained.
Key-words: Near Field Communication, Wi-Fi, Ndef, Android OS, Tag NFC, Hotspot,
smartphone
8/17/2019 Tcc Andre Lira
9/80
viii
Sumário
Lista de Tabelas xi
Lista de Figuras xii
Lista de C´ odigos xiii
1 Introdu¸ cão 11.1 Contextualiza¸cão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Descri̧cão do Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 Objetivos Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3.2 Objetivos Espećıcos . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Justicativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.5 Estrutura do Documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Referencial te´ orico e trabalhos relacionados 62.1 Decisões Tecnológicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1 Tecnologia Near Field Communication - NFC . . . . . . . . . . . . 72.1.1.1 Denição . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.1.2 Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . 72.1.1.3 Formas de utiliza ção . . . . . . . . . . . . . . . . . . . . . 82.1.1.4 Especicações essenciais . . . . . . . . . . . . . . . . . . . 82.1.1.5 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.1.1.6 Elementos NFC Passivos - Tags . . . . . . . . . . . . . . . 11
2.1.1.6.0.1 Denição . . . . . . . . . . . . . . . . . . . 112.1.1.6.0.2 Composi̧cão . . . . . . . . . . . . . . . . . 122.1.1.6.0.3 Tipos . . . . . . . . . . . . . . . . . . . . . 13
2.1.1.7 Dispositivos Celulares Suportados . . . . . . . . . . . . . . 14
8/17/2019 Tcc Andre Lira
10/80
ix
2.1.1.8 Estimativas futuras . . . . . . . . . . . . . . . . . . . . . . 172.1.2 Ecossistemas Operacionais . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.2.1 Windows Phone 7 . . . . . . . . . . . . . . . . . . . . . . 182.1.2.2 Symbiam OS . . . . . . . . . . . . . . . . . . . . . . . . . 182.1.2.3 Meego OS . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.1.2.4 Android OS . . . . . . . . . . . . . . . . . . . . . . . . . . 182.1.2.5 Windows Phone 8 . . . . . . . . . . . . . . . . . . . . . . 19
2.1.3 NFC Fórum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.1.3.1 História do NFC Forum . . . . . . . . . . . . . . . . . . . 192.1.3.2 Padroniza ção Ndef por NFC fórum . . . . . . . . . . . . . 20
2.2 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2.1 Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.1.1 android.net.wi . . . . . . . . . . . . . . . . . . . . . . . . 212.2.1.2 android.nfc . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2 Eclipse IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.3 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3 Desenvolvimento Técnico 243.1 Especicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.0.1 Denição de solução . . . . . . . . . . . . . . . . . . . . . 24
3.1.0.2 Identica ção de Hotsposts . . . . . . . . . . . . . . . . . . 263.1.0.3 Estrutura¸cão de dados em Tags NFC - Ndef . . . . . . . 283.1.0.4 Ações denidas . . . . . . . . . . . . . . . . . . . . . . . . 283.1.0.5 Arquitetura de solu ção . . . . . . . . . . . . . . . . . . . . 30
3.2 Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.1 Metodologia de desenvolvimento . . . . . . . . . . . . . . . . . . . . 35
3.3 Implementa ção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.3.1 AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . 383.3.2 Etapa NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.2.1 NFC Foreground Dispacher . . . . . . . . . . . . . . . . . 393.3.2.2 Classe NfcDefaultProcessor . . . . . . . . . . . . . . . . . 41
3.3.2.2.0.4 Escrita de Tag NFC . . . . . . . . . . . . 423.3.2.2.0.5 Leitura de Tag NFC . . . . . . . . . . . . 43
3.3.3 Etapa Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.3.4 Etapa de integra ção NFC-WiFi - Criação de uxo completo. . . . . 47
3.3.4.1 NfcWriterActivity . . . . . . . . . . . . . . . . . . . . . . 473.3.4.2 MainActivity . . . . . . . . . . . . . . . . . . . . . . . . . 48
8/17/2019 Tcc Andre Lira
11/80
x
3.4 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4 Testes e Avalia¸ cão 524.1 Material Utilizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524.2 Casos de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2.1 Grava ção de Tag NFC . . . . . . . . . . . . . . . . . . . . . . . . . 534.2.2 Fluxo completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3 Avaliação de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5 Conclus˜ ao 605.1 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Referências Bibliográcas 63
8/17/2019 Tcc Andre Lira
12/80
xi
Lista de Tabelas
2.1 Comparativo de tipos Tag NFC que suportam formata¸cão Ndef em relação
às suas especicações técnicas. [NXP2009] . . . . . . . . . . . . . . . . . . 142.2 Comparativo de tipos Tag NFC que suportam formata¸cão Ndef em relação
às suas aplica ções. [NXP2009] . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1 Product Backlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8/17/2019 Tcc Andre Lira
13/80
xii
Lista de Figuras
2.1 Módulo leitor NFC gerando campo eletromagnético incidente sobre um ele-
mento NFC passivo. [S.A. and M.2010] . . . . . . . . . . . . . . . . . . . . 92.2 Um módulo leitor RFID atuando sobre um elemento RFID passivo possui
as mesmas caracteristicas de funcionamento da tecnologia NFC . [Coshumet al.2013] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Posśıveis Aplica ções da tecnologia NFC segundo [Forum2013]. . . . . . . . 112.4 Tag NFC tipo 1 em relação a seu tamanho. . . . . . . . . . . . . . . . . . 122.5 Raio X de uma Tag NFC composta por circuito ASIC e antena. . . . . . . 122.6 Raio X de um Smartcard NFC por [Coshum et al.2013] . . . . . . . . . . . 132.7 Top 35 de smartphones que disponibilizam tecnologia NFC . [Arena2013] . 162.8 PagueSeguro-NFC desenvolvido pelo Instituto Nokia de Tecnologia -
[UOL2012] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1 Disposi̧cão de redes sem o em uma localidade . . . . . . . . . . . . . . . . 253.2 Proposta de solu ção Utilizando Tags NFC . . . . . . . . . . . . . . . . . . 263.3 Campos identicadores Wi-Fi armazenados em TAG NFC . . . . . . . . . 273.4 Fluxo gerados eventos de leitura de Tags NFC em sistema operacional An-
droid . [Developer2007] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.5 Estrutura de mensagem Ndef. [Developer2007] . . . . . . . . . . . . . . . . 29
3.6 Ideia inicial de funcionamento do aplicativo. . . . . . . . . . . . . . . . . . 313.7 Diagrama de sequência do m ódulo write NFC . . . . . . . . . . . . . . . . 323.8 Diagrama de sequência do m ódulo responsável pela conexão WiFi e . . . . 323.9 Diagrama de navega ção do aplicativo . . . . . . . . . . . . . . . . . . . . . 333.10 Diagrama de classes do projeto. . . . . . . . . . . . . . . . . . . . . . . . . 343.11 Packet NFC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.12 Packet wiController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.13 Tela de gravação de Tag NFC . . . . . . . . . . . . . . . . . . . . . . . . . 48
8/17/2019 Tcc Andre Lira
14/80
xiii
4.1 Teste bem sucedido ao gravar vinte caracteres em uma Tag NFC . . . . . . 544.2 Teste bem sucedido ao gravar cinquenta caracteres em uma Tag NFC . . . 55
4.3 Teste bem sucedido ao gravar trezentos caracteres em uma Tag NFC . . . 564.4 Grava ção dos parâmetros handover Wi-Fi de uma rede válida em uma Tag
NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.5 Desativa ção manual do adaptador de rede seguido por ativa¸ cão autom ática
via Tap em Tag NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.6 Conclusão bem sucedidade da conex ão autom ática entre dispositivo e hotspot 584.7 Eventos Tap NFC em Tags NFC distintas, com parˆametros distintos . . . 59
8/17/2019 Tcc Andre Lira
15/80
xiv
Lista de C´ odigos
3.3.1 Arquivo Android Manifest (xml) . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3.2 Implementa ç˜ ao da interface Foreground Dispatcher . . . . . . . . . . . . . 413.3.3 Instancia¸c˜ ao, habilita ç˜ ao e desativa ç˜ ao do modo Foreground Dispacher . . 42
3.3.4 Implementa ç˜ ao de escrita em formato Ndef em Tag NFC . . . . . . . . . . 43
3.3.5 Criando NdefRecord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.6 Leitura de Tag NFC e extraç˜ ao de records SSID Password. . . . . . . . . 44
3.3.7 Implementa ç˜ ao WiFiController . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3.8 Implementa ç˜ ao WiFiCongurator . . . . . . . . . . . . . . . . . . . . . . . 47
3.4.1 Implementa ç˜ ao e processo de conex˜ ao Wi-Fi via Tag NFC . . . . . . . . . 50
3.4.2 Implementa ç˜ ao de aç˜ ao realizada no layout de grava ç˜ ao de Tags NFC . . . 51
8/17/2019 Tcc Andre Lira
16/80
Caṕıtulo 1
Introdu¸ cão
1.1 Contextualiza¸ cão
Segundo [Forum2013], o ecossistema ambientado pela tecnologia Near Field Communi-
cation -NFC encontra-se plenamente desenvolvido e difuso dentre os paı́ses que comp˜oem
os continentes Europeu, Asi´atico, Oceania e Norte Americano. No entanto, esta n˜ ao é
a realidade do cen ário atual brasileiro, cujos benef́ıcios s˜ao pouco conhecidos, tanto pelos
usuários de smartphones como pela comunidade de desenvolvedores de software embarcado,
resultando em um ecossistema imaturo ainda em fase de desenvolvimento.
A razão para tal deve-se principalmente ao fato de que a partir de sua data de de-
senvolvimento, ano de 2002, a tecnologia NFC foi disponibilizada em poucos modelos de
dispositivos moveis direcionados ao mercado brasileiro conforme pode ser visualizado na
referência [Arena2013]. Além disso, estes eram classicados como smartphones high-end ,
cujo público-alvo destina-se a um mercado especı́co com consumidores de grande poderaquisitivo, segundo [Sharma2011] e [Guy2009], este fato dicultou a populariza¸cão da tec-
nologia entre as massas de baixa renda.
Segundo [Arena2013] e [Agar2004], os smartphones ganharam popularidade, o que era
tendência se tornou uma hegemonia, chegando a ocorrer muitos casos onde os usu´ arios
substituiram seus personal computers - PCs por smartphones. A quantidade de dispositivos
no mercado atual brasileiro passou a ser expressiva e os consumidores se tornaram cada
8/17/2019 Tcc Andre Lira
17/80
vez mais exigentes, gerando grande concorr̂encia entre empresas montadoras de telefonia
celular: Samsung, Apple, Nokia, HTC, Motorola, Sony e etc.
Isso levou ao desenvolvimento de dispositivos celulares com especica ções de hardware
adequadas às necessidades de cada tipo de usu ário consumidor e aos requisitos exigidos
pelos ecossistemas de software utilizados. Estes ecossistemas s ão constitúıdos e suportados
pelas plataformas utilizadas: Android, Windows Phone, IOS, Meego , entre outras.
Segundo [Coshum et al.2013], [Hessel et al.2011] e [Forum2013], parte do ecossistema
NFC está voltado para aplica¸cões embarcadas independentes do ecossistema de telefonia
móvel, agregando valor à tecnologia.
1.2 Descri¸ cão do Problema
Durante a última década, houveram saltos evolutivos signicativos em todas as ´ areas
tecnol ógicas. Abordando como escopo a área de tecnologia de telecomunica ções, pode-se
ressaltar o surgimento e aplica¸cão de diversos componentes de hardware , como processa-
dores dual-core e quad-core , módulos de memória RAM , módulos de conectividade sem
o, displays touchscreen , entre outros que possibilitaram a compila¸ cão de dispositivos detelefonia móvel muito mais potentes e com maior desempenho.
Estas novas possibilidades em hardware necessitaram do suporte de sistemas operacio-
nais embarcados robustos com conceitos inovadores em usabilidade e pasśıveis de conex˜ ao
com a internet , criando innitas possibilidades de servi¸cos ao usuário, podendo-se citar
como principais o acesso a redes sociais, serviços de geo-localização , streaming de v́ıdeos,
chamadas de voz por IP , jogos e entretenimento.
Tão logo o usuário experimentou tais novidades, surgio a necessidade de se permane-
cer online permanentemente, com a maior largura de banda para transfer̂encia de dadosposśıvel. Com a nalidade de sanar tal necessidade, muitos administradores de localidades
- Centros médicos, aeroportos, Shopping centers , ambientes domésticos e corporativos -
decidiram disponibilizar internet aos seus visitantes e/ou colaboradores, de forma gratuita
ou não, por meio de hotspots , que são nada mais que pontos de acesso Wi -Fi .
Para que a conex ão seja conclúıda com sucesso, deve-se executar uma série de passos
de conguração entre o dispositivo m óvel e a rede desejada. Buscando prover comodidade
8/17/2019 Tcc Andre Lira
18/80
e praticidade ao usu ário e uma melhor distribui¸cão do serviço oferecido, eis que surge a ne-
cessidade de automatizar o processo de conex ão entre o smartphone e o hotspot , atenuando
a intera ção do usuário tanto com seu dispositivo quanto com os agentes respons´ aveis por
fornecer as congurações do hotspot alvo. Confome pode ser visto [Forum2013] e [Coshum
et al.2013], pode-se adequar conceitos tecnol ógicos aos requisitos de qualidade de forma
eciente quando utilizando a tecnologia Near Field Communication -NFC como recurso
provedor de automa¸cão, por abranger quantidade signicativas de possibilidades em solu-
ções.
1.3 Objetivos
1.3.1 Objetivos Gerais
Esta monograa tem como objetivo apresentar ` a comunidade acadêmica da Universi-
dade do Estado do Amazonas uma solu¸cão ao problema descrito na se ção anterior, uti-
lizando a tecnologia NFC como base para automatizar processos de conex˜ao entre um
dispositivo móvel e redes Wi -Fi , mostrando a padroniza¸cão criada por NFC Forum - (Ndef
- que permite a utiliza ção da tecnologia NFC de forma simples e portável para diversos
sistemas operacionais.
1.3.2 Objetivos Espećıcos
• Apresentar uma solu¸cão que atenda aos requisitos de automatiza¸ cão utilzando Tags
NFC .
• Utilizar a padronizaç˜ao internacional - Ndef - da tecnologia NFC .
• Utilizar APIs dispońıveis para S.O. Android versão 4.0 ou superior.
• Identicar as etapas efetuadas pelo usu´ario ao iniciar um processo de conexão Wi -Fi
e posśıvel pontos para automatiza¸ cão.
• Desenvolver um protótipo de aplicativo para S.O. Android 4.1 .
8/17/2019 Tcc Andre Lira
19/80
1.4 Justicativa
A tecnologia NFC , vem acompanhando nativamente diversos modelos de Smartphones
produzidos na atualidade. Empresas renomadas no ramo de telecomunica¸ cão móvel, como
Samsung , Nokia , Motorola e Sony , têm investido nesta tecnologia, disponibilizando APIs
de desenvolvimento para seus respectivos ambientes. E conforme mencionado, a tecno-
logia NFC encontra-se pouco difundida no Brasil, porém segundo [Brasil2013], ela vem
gradativamente ganhando notoriedade. Reduzindo a abrangência desta arma¸ cão para umescopo ainda mais focalizado referenciando apenas o desenvolvimento da tecnologia NFC
no Estado do Amazonas, pode ser observado o surgimento de uma tendência por parte dos
institutos de PD, como o Instituto Nokia de Tecnologia - IndT [Developer2012], a desen-
volver projetos, visando proporcionar ao usu´ario de smartphones experiências mostrando
as diversas facilidades previstas pela tecnologia.
No entanto, falta muito para que a tecnologia NFC alcance um alto nı́vel de populariza-
ção entre os usu ários nais de smarthphones no estado do Amazonas, tornado importantedesenvolver uma cultura que vise diminuir esse décit de utiliza¸ cão.
Por se tratar de uma tecnologia Open Source , pode ser implementada gratuitamente
por quaisquer desenvolvedores de software , livre dos custos gerados pela compra de licen ças
de utiliza ção e desenvolvimento ou pagamentos de royalties aos propriet ários de patentes.
É uma tecnologia com grandes possibilidades de crescimento, baixo custo de implanta¸ cão
e de fácil desenvolvimento técnico, além de atuar como fonte de incentivo à inova¸ cão.
A escolha de utilização de Near Field Communication - NFC em Sistema Operacio-
nal Android deve-se principalmente ao fato de ser o ambiente de telefonia m óvel de maiorpopularidade nos dias atuais conforme citado em [Terra2013] e que seus concorrentes: Sym-
bian(Nokia), Meego(Nokia), WindowsPhone(Nokia, Samsung) e IOS(Apple) ) apresentam
problemas como descontinuidade, imaturidade ou ausência de dispositivos portadores de
hardware NFC . Conforme pode ser visto em [Developer2013a] e [Developer2008], o sistema
operacional Android possui uma API de desenvolvimento bem documentada, provida de
diversos exemplos de codicação, permitindo um f ácil esclarecimento de dúvidas e aplica-
8/17/2019 Tcc Andre Lira
20/80
ções de Design Patterns ;
Essa tecnologia em conjunto com o sistema operacional Android permitem a utiliza ção
de linguagem de programa ção Java para o desenvolvimento de aplicativos e n ão mostra
fatores negativos realmente fortes que motivem desenvolvedores de software a não aplicá-los
quando possivel.
1.5 Estrutura do Documento
Esta monograa est´a organizada da seguinte forma: O capı́tulo 2 apresenta conceitual-
mente as tecnologias utilizadas no decorrer do desenvolvimento do projeto, assim como asAPIs e ferramentas utilizadas e trabalhos relacionados; no caṕıtulo 3 é abordada a totali-
dade do desenvolvimento técnico do projeto, incluindo especica¸ cões técnicas, arquitetura
e implementa ção; o caṕıtulo 4 apresenta um descri¸cão dos casos de testes realizados e re-
sultados obtidos. Por m s˜ao apresentadas no caṕıtulo 5 as considera¸ cões nais, onde são
inclúıdos a apresenta¸ cão de resultados e posśıveis trabalhos futuros.
8/17/2019 Tcc Andre Lira
21/80
Caṕıtulo 2
Referencial te´ orico e trabalhos
relacionados
Este caṕıtulo aborda em detalhes as referências te´ oricas tecnológicas e ferramentas uti-
lizadas durante a fase de desenvolvimento do projeto (caṕıtulo 3). Ser˜ ao apresentados
conceitos, especicações e será respondido o porquê de sua utiliza¸cão no projeto tendo em
vista a vasta quantidade de op¸ cões em tecnologias disponı́veis atualmente.
2.1 Decis˜ oes Tecnol´ ogicas
A maior decisão tecnológica neste projeto foi a escolha da tecnologia NFC como solução
base desde o momento de sua concepção, concretizando seu objetivo de apresentar suas po-
tencialidades e utiliza¸cão prática por meio de sua aplica ção na elabora ção uma arquitetura
de solução viável e satisfat ória.Dever á também ser mencionada a escolha da padroniza¸ cão
internacional Ndef para a utiliza ção da tecnologia NFC , e do ecossistema Android como
ambiente operacional para a solu¸cão.
8/17/2019 Tcc Andre Lira
22/80
2.1.1 Tecnologia Near Field Communication - NFC
Conforme será observado no caṕıtulo 3, a tecnologia NFC não será utilizada em suatotalidade neste projeto. Sua utiliza¸ cão foi desenvolvida a partir do conceito de conex ão
entre um elemento NFC ativo e um passivo. No entanto, por ser uma tecnologia pouco
conhecida, é interessante que seja abordada além dos requisitos utilizados por car´ ater de
conhecimento.
2.1.1.1 Deni¸ cão
Segundo [Hessel et al.2011], [Dias2010], [S.A. and M.2010] e [Coshum et al.2013] -
Near Field Communication ou Comunicação de Campo Pr óximo refere-se a uma tecnologia
desenvolvida a partir de estudos provenientes da tecnologia Radio-Frequency Identication
- RFID , que possibilita trocar de informa¸cões entre dispositivos compat́ıveis sem o aux́ılio
de ação, de forma segura e rápida, contanto que os dispositivos sejam aproximados e
mantidos dentro de um limite mı́nimo para que a comunica¸ cão ocorra com sucesso.
Assim que os dispositivos estejam sucientemente pr´oximos, a comunicação entre eles
é estabelecida automaticamente, sem necessidade de congura¸ cões adicionais, pareamento
ou autentica ção de usuário.
2.1.1.2 Funcionamento
Conforme mencionado em [Dias2010], [S.A. and M.2010] e [Coshum et al.2013], à tec-
nologia NFC é fundamentada pelo princı́pio f́ısico de indu¸ cão magnética, onde a incidência
de um campo magnético sobre um circuito elétrico (espira) torna posśıvel produzir uma
corrente elétrica induzida.Sendo que a ativa¸ cão de um módulo NFC ocorre quando ondas
eletromagnéticas, geradas por um segundo modulo, s˜ ao captadas por suas antenas criandocanais de comunica ção, podendo ser de uma via, contando com um m´odulo transmissor e
um módulo receptor, ou de duas vias ( peer-to-peer ) contando com dois módulos transmis-
sores/receptores.
8/17/2019 Tcc Andre Lira
23/80
2.1.1.3 Formas de utiliza¸ cão
Um sistema NFC pode possuir dois tipos de elementos que podem ser ativos ou passivos.Um dispositivo passivo é constitúıdo por um m´ odulo incapaz de gerar sinais de conex ão,
enquanto o ativo possui tal capacidade sendo capaz de enviar, receber e interpretar sinais
eletromagnéticos. Vale lembrar que uma conex˜ ao NFC só pode ser efetuada entre dois
módulos por vez. Dito isto, podem-se obter três formas de utiliza¸ cão conforme citadas
em [Dias2010], [S.A. and M.2010] e [Coshum et al.2013]:
1. Modo Read/Write - Leitura ou altera ção de dados em um dispositivo NFC passivo.
2. Modo Card Emulation - Dispositivo móvel pode simular um smart card , no entanto
requer este possua um chip program´avel dedicado a criptograa.
3. Modo Peer-to-Peer - Comunicação entre dois dispositivos NFC ativos.
As guras 2.1 e 2.2 mostram a criação de um canal com uma via de comunica ção
onde o leitor NFC em conjunto com sua antena representam um m´ odulo NFC embarcado
que pode estar presente em diversos dispositivos moveis. Este m´odulo gera um campo
magnético que incide sobre um m´odulo NFC passivo não alimentado retratado como Tag NFC .
O princı́pio de indu¸cão magnética faz com que este campo induza a cria¸cão de uma
corrente elétrica que percorre o circuito do objeto passivo, alimentando-o. Uma vez que
o circuito esteja alimentado e funcional, ocorre o processo de leitura/escrita de dados na
Tag .
Ainda contemplando a gura 2.1, pode-se armar que se a Tag NFC fosse substituı́da
por um módulo ativo, composto por outro conjunto de leitor e antena NFC ,mo sistema seria
formado por dois módulos que captariam e interpretariam as ondas magnéticas geradas
por cada ponta estabelecendo uma conex˜ao Peer-to-Peer (P2P) , onde ambos os módulos
enviam e recebem mensagens.
2.1.1.4 Especica¸ cões essenciais
Em compara ção às demais tecnologias sem o, a tecnologia Near Field Communication
- NFC possui um campo de conexão com alcance extremamente curto. O campo magnético
8/17/2019 Tcc Andre Lira
24/80
Figura 2.1: Módulo leitor NFC gerando campo eletromagnético incidente sobre um ele-mento NFC passivo. [S.A. and M.2010]
gerado pelas antenas NFC presente em dispositivos m óveis possui, em teoria, até 10 cm
de alcance. No entanto, em meios pr áticos, este é reduzido para uma valor que oscila em
uma faixa de 1 à 4 cent́ımetros conforme visto em: [Coshum et al.2013] e [Forum2013].
Devido à limita ção de comprimento de campo magnético, para que uma conex˜ ao NFC
seja bem sucedida é necess ário que os dispositivos transmissores/receptores sejam aproxi-
mados um do outro. Este procedimento intitula-se Tap, proveniente da ĺıngua inglesa que
segundo o dicionário [Michaelis2008], signica bater/encostar.
A tecnologia opera em uma faixa de frequência de 13.56 MHz denida pela padroniza¸cão
internacional ISO/IEC 18000-3 publicada no ano de 2004, mantendo taxas de transferência
de dados vari áveis dentro de uma faixa correspondente a 106 à 424 kbit/s de acordo com
as denições impostas pela padroniza¸cão internacional ISO/IEC 18092:2013 em [Coshum
et al.2013], que especica esquemas de modularização e taxas de transferência de dados.
Esta taxa de transfer̂encia pode ser considerada baixa, se comparada ` a prevista por
8/17/2019 Tcc Andre Lira
25/80
Figura 2.2: Um módulo leitor RFID atuando sobre um elemento RFID passivo possui asmesmas caracteristicas de funcionamento da tecnologia NFC . [Coshum et al.2013]
tecnologias como Bluetooth ou Wi-Fi . No entanto, obtém-se um ganho consider´ avel em
economia de energia e em velocidade de conexão entre dispositivos chegando a ser menor
que - 0,1 s - segundo [Coshum et al.2013], caracteŕıstica que permite sua utiliza¸cão comobootstrap para a inicializa ção de conexão através de protocolos sem o mais robustos,
conforme informado na referência [NXP2009].
2.1.1.5 Aplica¸ cões
Segundo [Coshum et al.2013] por fazer parte de sua natureza promover automatiza¸ cão
de tarefas realizadas por um sistema embarcado, a tecnologia NFC pode ser aproveitada
em uma grande quantidade de casos de uso.
Conforme pode ser visto na gura 2.3 seu leque de utilização varia desde a ativa ção
e conguração de dispositivos móveis a serviços ligados recursos ligados à automatiza¸cão
residencial onde este atuaria em conjunto com um sistema micro processado para efetuar
ações como: abertura de fechaduras e ativa¸cão de periféricos gerais como lâmpadas e
eletrodomésticos.
Podendo armar que se os procedimentos de ativa¸cão e desativa ção de uma atividade
podem ser automatizados, esta automatiza¸ cão pode ser realizada atrav́es da utiliza¸ cão
8/17/2019 Tcc Andre Lira
26/80
correta da tecnologia NFC .
Figura 2.3 : Possı́veis Aplica ções da tecnologia NFC segundo [Forum2013].
2.1.1.6 Elementos NFC Passivos - Tags
A gura 2.4 mostra um m ódulo NFC passivo, conhecido como Tag ou tarja NFC em
compara ção de tamanho em rela ção a uma moeda. Esta abordagem mostra que é posśıvel
utilizar a tecnologia NFC mesmo em casos que tenham como requisito a ocupa ção de
um espa ço f́ısico e peso reduzidos. Importante salientar que este item - Tag NFC - foi
essencial na elabora ção da solução apresentada nesta monograa, sua importˆ ancia dentro
deste projeto ser á apresentada na sess˜ao de arquitetura de solu¸cão no capitulo 3.
2.1.1.6.0.1 Deni¸ cão Tag NFC retrata um elemento NFC passivo, um módulo
capaz de reagir aos campos eletromagnéticos gerados por dispositivos NFC ativos possibi-
litando que estes insiram novos dados para armazenagem ou extraia um conte´ udo previa-
mente armazenado conforme dito em [NXP2009] e [Coshum et al.2013].
8/17/2019 Tcc Andre Lira
27/80
Figura 2.4 : Tag NFC tipo 1 em relação a seu tamanho.
2.1.1.6.0.2 Composi¸ cão Analisando as guras 2.5 e 2.6, podem-se identicar os
componentes que formam uma Tag NFC . Estes componentes s ão uma antena NFC e um
circuito ASIC projetado exclusivamente para possibilitar os processos de leitura e escrita
de dados.
Nota-se também a similaridade entre Tags NFC e Smartcards , no entando a composi ção
do circuito é diferenciada permitindo ao Smart Card possuir maior quantidade de mem´oria
e realizar opera ções com diferentes tipos de dados. Em ambos os casos tem-se à ausência de
fontes de alimenta ção, conforme mencionado anteriormente toda a energiza¸ cão do circuito
será realizada por indu ção magnética.As antenas /emphNFC presentes em elementos passivos n˜ ao são capazes de gerar cam-
pos eletromagnéticos, apenas os captam e reagem a seus est́ımulos. Por m, o circuito
/emphASIC (circuito produzido com uma nalidade espećıca) é respons´ avel por interpre-
tar informa ções captadas pelas antenas e trat´ a-las de forma adequada.
Figura 2.5 : Raio X de uma Tag NFC composta por circuito ASIC e antena.
8/17/2019 Tcc Andre Lira
28/80
Figura 2.6 : Raio X de um Smartcard NFC por [Coshum et al.2013]
2.1.1.6.0.3 Tipos Com a nalidade de não subutilizar recursos, foram desenvolvi-
dos diversos modelos de TagAGs NFC , onde cada modelo visa alcan çar uma adequa ção
máxima ao tipo espećıco de utiliza ção-alvo. Este estudo aborda informa¸cões relativas
apenas aos tipos de Tag que seguem ou que são compat́ıveis com a padroniza¸cão Ndef :
• Tipo 1 - Tag produzida em formata ção Ndef com 96 bytes de memória.
• Tipo 2 - Tag produzida em formata ção Ndef com 48 ou 144 bytes de memória.
• Tipo 3 - Tag produzida em formata ção Ndef com 1, 4 ou 9 kilobytes de memória,
possuindo um valor monet ário mais elevado que as de tipo 1 ou 2.
• Tipo 4 - Tag produzida em formata¸cão Ndef com 4 ou 32 kilobytes de memória,
possuindo o maior custo monet ário entre os demais tipos. Importante ressaltar que
este modelo permite a grava ção de conteúdo ativo.
• MIFARE Classic - Tag compat́ıvel com formata¸cão Ndef, possuindo 0.192, 0.768 ou
3.584 kilobytes de memória.
Ao planejar sua utiliza¸cão em um pro jeto, deve-se estudar com cuidado as informaç˜oes
apresentadas nas tabelas 2.1 e 2.2, am de reconhecer qual o tipo mais adequando para
servir adequadamente como solu¸cão, tendo em vista os requisitos do projeto em rela¸cão
8/17/2019 Tcc Andre Lira
29/80
ao tamanho do espa ço dispońıvel para armazenamento de dados nas Tags , tipo de dados,
custo benef́ıcio, modo de utiliza ção e suporte.
Tabela 2.1: Comparativo de tipos Tag NFC que suportam formata¸cão Ndef em relação àssuas especicações técnicas. [NXP2009]
2.1.1.7 Dispositivos Celulares SuportadosA porção do ecossistema NFC voltada para telefonia m´ovel é suportada por sua im-
planta ção em diversos dispositivos celulares produzidos pelos mais variados fabricantes.
Diferentemente de como ocorria no passado, onde a marca do fabricante em conjunto com
o hardware utilizado em cada um de seus dispositivos deniam as funcionalidades disponi-
bilizadas no aparelho, hoje o usu ário consumidor de smartphones busca por serviços e isso
torna mais importante para o sucesso de um dispositivo o ecossistema operacional no qual
8/17/2019 Tcc Andre Lira
30/80
Tabela 2.2: Comparativo de tipos Tag NFC que suportam formata¸cão Ndef em relação àssuas aplica ções. [NXP2009]
ele opera e não sua marca.
Incorporando a tecnologia NFC neste contexto, torna-se mais importante dizer em
quais sistemas operacionais ela est á presente e operante do que citar especicamente em
quais modelos de dispositivos ela se encontra.
Segundo [Arena2013], website internacional especializado em realizar comparativos en-
8/17/2019 Tcc Andre Lira
31/80
tre especicações de smartphones , podem ser encontrados mais de 250 modelos de celulares
de diferentes fabricantes, que utilizam a tecnologia NFC . A gura 2.7 mostra o resultado
de uma busca realizada no website , com a nalidade de coletar aparelhos que possuam NFC
e maior ranking de popularidade mundial.
Figura 2.7 : Top 35 de smartphones que disponibilizam tecnologia NFC . [Arena2013]
8/17/2019 Tcc Andre Lira
32/80
2.1.1.8 Estimativas futuras
O autor de [Hessel et al.2011], estima que a tecnologia NFC estar á presente em 80 porcento dos smartphones produzidos para o mercado Norte Americano. No entanto ainda n˜ ao
há uma estimativa espećıca para o nicho brasileiro, mas observando sua difus˜ ao ao redor
do mundo e os incentivos relacionados ao seu desenvolvimento por parte dos fabricantes
de smartphones pode-se inferir que seu crescimento no Brasil é promissor e merecedor de
aten ção.
2.1.2 Ecossistemas Operacionais
Durante a concep ção do projeto surgiu uma grande pergunta: Qual ecossistema ope-
racional utilizar para a implementa¸ cão da solução? Esta pergunta resultou na escolha
e utilização do sistema operacional Android . No entanto, n ão foi uma escolha aleat ória,
pois vários fatores inuenciaram tal decis˜ao. A prinćıpio, foram levantados os principais
sistemas operacionais utilizados em smartphones , o que resultou em:
• IOS - Apple Inc
• Windows Phone 7 - Nokia/Samsung
• Android OS - Samsung/HTC/Google/Sony
• Symbiam OS - Nokia
• Meego OS - Nokia
A partir desta lista, foram selecionados os sistemas operacionais que possúıam APIs que
permitissem a utiliza¸cão de NFC em seus dispositivos. Esta etapa excluiu apenas o IOS
pertencente à Apple Inc., pois este até o momento n ão aderiu à utiliza ção da tecnologia
NFC em seus smartphones .
A partir deste ponto, os sistemas operacionais restantes foram estudados individual-
mente com a nalidade de selecionar o que oferecesse maior suporte ao projeto. Apesar de
a escolha nal ter preferenciado o ecossistema Android , seus concorrentes merecem men ção.
8/17/2019 Tcc Andre Lira
33/80
2.1.2.1 Windows Phone 7
Um sistema operacional promissor utilizado em smartphones Nokia (Linha Lumia) eSamsung. No entanto, ainda encontrava-se em fase de amadurecimento, sendo o desenvol-
vimento de suas APIs e utilização de seus dispositivos de hardware por software , restritos a
desenvolvedores autorizados Nokia e Microsoft [Developer2013d]. Estes fatores motivaram
o descarte deste sistema operacional para o desenvolvimento do projeto.
2.1.2.2 Symbiam OS
Desenvolvido pela empresa Nokia e mantido pela empresa Accenture, foi bastante utili-
zado em smartphones Nokia. Sua ( API NFC) provê grande suporte ao desenvolvimento de
aplicativos baseados na tecnologia [Developer2013c]. No entanto seu descarte do projeto
ocorreu devido ao dif́ıcil acesso a referências de suporte à utiliza ção de seu componente
Wi-Fi , onde, segundo a arquitetura da solu¸ cão presente no capitulo 3, dever á ser utilizado
em conjunto com a tecnologia NFC .
2.1.2.3 Meego OS
Sistema operacional baseado em QT , desenvolvido em código aberto com kernel Linux ,pelas empresas Nokia e Intel com a nalidade de utiliza¸cão em smartphones . Conforme
pode ser vericado em [Developer2013b] , possui APIs de controle de componentes NFC e
de conectividade Wi-Fi bem documentadas e de f ácil utiliza ção, no entanto foi descartado
deste projeto por ter sido descontinuado em 2011, perdendo potencial de mercado para
soluções pudessem ser implementadas.
2.1.2.4 Android OS
Atualmente é o sistema operacional de maior popularidade no mercado, foi desenvolvido
por Open Handset Alliance , liderada pelo Google . É utilizado em larga escala por v ários
fabricantes de celulares como: HTC, Samsung, Sony, Motorola, LG e Positivo Inform´ atica .
Sua popularidade e APIs bem documentadas serviram como incentivo `a sua utilizaç ão
neste projeto. Porém, é importante mencionar que conforme pode ser visto em [Coshum
et al.2013] e [Developer2013a], a API de controleNFC só foi disponibilizada a partir de
8/17/2019 Tcc Andre Lira
34/80
sua versão 2.6.
2.1.2.5 Windows Phone 8
Sistema operacional criado pela Microsoft , utilizado em smartphones Nokia, não entrou
como posśıvel solu ção ao projeto apenas por ter sido lan¸cado posteriormente à nalização
da etapa de desenvolvimento do mesmo, entretanto merece men¸ cão nesta monograa por
possuir APIs de desenvolvimento NFC e Wi-Fi bem documentadas, por constituir um
sistema operacional robusto e por ter um status de popularidade emergente, tendo potencial
para alcan çar uma posi ção de destaque no mercado.
2.1.3 NFC F´ orum
2.1.3.1 Hist́ oria do NFC Forum
Conforme abertamente divulgado por NFC F´ orum [Forum2013], em 2004 três grandes
empresas fabricantes de eletrˆonicos, Sony, Nokia e Philips se uniram e criaram um f órum de
discurs ão para tratar das melhores formas de desenvolvimento da recém criada tecnologia
NFC , com as seguintes metas:
• Denir um padr ão internacional de protocolos e parˆametros a serem seguidos em
projetos que envolvam a arquitetura de NFC.
• Incentivar o desenvolvimento da tecnologia e a utiliza¸cão de dispositivos compat́ıveis.
• Trabalhar para garantir que os dispositivos NFC sigam todas as normas e especica-
ções do fórum.
• Criar uma cultura mundial de utiliza¸ cão da tecnologia por meio da dissemina ção de
seu conhecimento.
Atualmente o NFC F´ orum conta com a participa ção de mais de 170 empresas e cola-
boradores ao redor do mundo conforme [Forum2013].
8/17/2019 Tcc Andre Lira
35/80
2.1.3.2 Padroniza¸ cão Ndef por NFC f´ orum
A padroniza ção internacional Ndef criada pelo NFC Forum constitui uma parte im-portante do ecossistema NFC , pois é uma normaliza ção internacional e multi-plataforma
de formas de melhor utiliza ção da tecnologia. Diversas APIs relacionadas a sistemas ope-
racionais implementam as deni ções impostas pela formata¸cão Ndef , entre elas à API
Android.nfc conforme informações divulgadas por [Developer2013a].
O acrônimo Ndef representa NFC Data Exchange Format ou Formata ção de troca de
dados NFC , importante mencionar que esta formata¸ cão segue todos os requisitos impostos
pelas padroniza ções ISO que envolvem a tecnologia NFC . Detalhes mais profundos desta
padroniza ção serão mencionados no decorrer desta monograa.
2.2 Ferramentas
Durante o processo de codicação do projeto foram utilizadas ferramentas de suporte
ao desenvolvimento de software . Essas ferramentas auxiliam o desenvolvedor em quest˜oes
referentes a utiliza ção de APIs , indenta ção de código e simulação de testes. Em geral,
cada desenvolvedor de software utiliza um conjunto personalizado de ferramentas. Nesteprojeto, com exceção do pacote de ferramentas Android SDK e APIs de desenvolvimento,
todas as outras podem ser substitúıdas de modo a prover maior conforto aos seus usu´ arios.
2.2.1 Android SDK
Android Software Development Kit ou Android kit de desenvolvimento de software é
composto por diversas ferramentas voltadas para o desenvolvimento de aplicativos em pla-
taforma Android. Esta coletˆanea inclui um depurador, bibliotecas, um simulador, exemplos
de documenta ção, de códigos e tutoriais [Developer2011]. Apesar da tecnologia NFC estar
presente desde a vers ão 2.6 do sistema operacional Android , para este projeto foi utilizada
a versão 4.1 - representada pela API 16 - onde podem ser encontrados recursos tais como:
android.net.wi e android.nfc .
8/17/2019 Tcc Andre Lira
36/80
2.2.1.1 android.net.wi
Esta API provê meios pelos quais as aplica ções conseguem se comunicar com a ca-mada de baixo ńıvel controladora Wi-Fi . Permite as aplica ções executarem comandos
de inicialização, congura ção e nalização de conexões sem o, conforme informado na
referência [Developer2008].
2.2.1.2 android.nfc
Esta API provê acesso às funcionalidades NFC de um dispositivo sob plataforma An-
droid , permite que os aplicativos manipulem mensagem com padroniza¸ cão Ndef gravadas
em Tags NFC ou dispositivos em modo Card Emullation , conforme informado na referên-
cia [Developer2013a].
2.2.2 Eclipse IDE
Toda a codica ção deste trabalho foi desenvolvida por meio da utiliza¸cão da IDE Eclipse
distribui ção Indigo atualizado com um plugin Android SDK . Esta ferramenta é poderosa
quando se diz respeito à edição de texto, permite uma codica¸cão rápida ao permitir na-vegação entre fun ções, APIs, documenta¸cões e ferramentas de depura ção. Além de ser
altamente personaliz´avel de modo a permitir maior exibilidade ao desenvolvedor de soft-
ware .
2.3 Trabalhos Relacionados
A inspira ção inicial deste projeto surgiu ap´os o conhecimentos das facilidades concedi-
das pela implementa ção da tecnologia NFC em diversos casos de uso. Grande parte dessas
aplica ções são disponibilizadas em lojas virtuais pertencentes a cada ecossistema operaci-
onal, tais como: Android-Market para Android OS, Ovi-Store para Symbian OS e Meego
OS e Microsoft-Store para Windows Phone.
Seguindo pela linha de automa¸cão, existem diversas implementa¸cões que utilizam a
tecnologia NFC como base para automatizar procedimentos e processos, destacando-se
serviços de compartilhamento de dados, onde o NFC é utilizado para prover uma conex˜ao
8/17/2019 Tcc Andre Lira
37/80
rápida entre dispositivos m´oveis, enquanto a transferência de dados é realizada por proto-
colos sem o mais robustos como o Bluetooth ou o Wi-Fi , visto que estes possuem bandas
mais largas para transferências de dados e atuam ` a longa dist ância.
Pode-se armar que esta forma de utiliza¸cão é bastante ´util, sendo implementada tanto
em aplicativos-padr˜ao do Sistema Operacional Android , utilizados para troca de imagens
e dados entre dispositivos, como em jogos que requeiram intera¸cão de múltiplos usu ários.
Verica-se em [UOL2012], a utilização do NFC em aplicativos desenvolvidos por empre-
sas privadas e institutos de pesquisa, tal como mostrado na gura 2.8, o PagSeguro-NFC
desenvolvido pelo Instituto Nokia de Tecnologia - INdT com o intuito de proporcionar
soluções em pagamentos via dispositivos moveis de forma simples, r ápida e com seguran çagarantida aos usu´arios.
Pode-se mencionar também a ades˜ ao à tecnologia NFC por aplicativos multi-plataforma
já consagrados no mercado, como o LinkedIn e o Foursquare. No caso do Foursquare, se-
gundo material de dispońıvel em sua API ocial [Foursquare2013], foi criada uma ´ area na
documenta ção de sua API para auxiliar os desenvolvedores de software no desenvolvimento
de aplicativos clientes ao Foursquare que utilizem a tecnologia NFC para disparar eventos
de check in . J á o aplicativo ocial Linkedin para sistema operacional Symbiam , disponi-
bilizado em [LinkedIn2011] -Nokia Store - sofreu atualiza ções de modo a possibilitar que
os dados de perl de usuário sejam exportados para uma Tag NFC , permitindo assim a
visualização autom ática dos pers armazenados em cada Tag .
8/17/2019 Tcc Andre Lira
38/80
Figura 2.8: PagueSeguro-NFC desenvolvido pelo Instituto Nokia de Tecnologia - [UOL2012]
8/17/2019 Tcc Andre Lira
39/80
Caṕıtulo 3
Desenvolvimento Técnico
Este caṕıtulo aborda todas as etapas relacionadas ao desenvolvimento técnico do projeto,
desde suas especicações mais básicas de solução até a naliza¸cão de sua codicação e
release do aplicativo prot ótipo NFC-WiFi.
3.1 Especica¸ cãoEsta sess ão aborda todos os aspectos relacionados a deni¸cão da solução denida. Mos-
trando conceitos inicias de como a ideia foi concebida e estruturada. Mostra também di-
agramas técnicos que foram criados com base nos requisitos especicados ao analisar o
contexto do problema.
3.1.0.1 Deni¸ cão de solu¸ cão
Analisando o problema proposto no caṕıtulo 1, pode-se visualizar um cen´ ario corres-pondente à distribui ção e inuência de redes Wi-Fi dentro de determinada localidade, e
através de uma an´alise detalhada deste cen´ario e do problema proposto, é posśıvel tra-
balhar na elabora¸cão de uma arquitetura de solu¸cão. Conforme pode ser observado na
gura 3.1, as redes Wi-Fi possuem áreas de atua ção variáveis e independentes umas das
outras, mesmo que presentes em um mesmo espa¸co f́ısico. Os principais respons áveis por
essa varia ção de área de atua ção são o hardware utilizado e as congura ções denidas no
8/17/2019 Tcc Andre Lira
40/80
momento de cria ção e manuten ção de cada hotspot Wi-Fi . Tirando como base o com-
portamento apresentado e a disposi¸ cão das redes Wi-Fi no mundo real, foi denido como
melhor solução ao problema - levando em considera ção fatores como custo de produ ção e
satisfa ção dos usuários - a utiliza ção de Tags NFC como forma de disseminação de pontos
de acesso Wi-Fi . Cada Tag deve conter campos dos quais advenham meios de identica-
ção de uma rede sem o, para que desse modo um dispositivo m óvel celular possa receber
o conteúdo armazenado, identicar e conectar-se a uma rede-alvo. A gura 3.1 mostra
uma visualiza ção de como podem ser utilizadas in úmeras Tags NFC para prover pontos
de acesso de diversicadas redes Wi-Fi atuantes dentro de uma mesma localidade, tendo
como única dependência para que seja obtido um funcionamento adequado. Sua utiliza¸ cãoem um local abrangido pelo sinal emitido por seu hotspot Wi-Fi correspondente.
Figura 3.1 : Disposição de redes sem o em uma localidade
8/17/2019 Tcc Andre Lira
41/80
8/17/2019 Tcc Andre Lira
42/80
requeira uma senha de acesso v álida. Para estes casos devem-se considerar os campos
PWD acrônimo para Password referente à senha e o protocolo de criptograa utilizado se
aplicável, estes são nomeados por WEP, WPA, WPA2, WPA-PSK e WPA2-PSK . Seguindo
esse raciocı́nio, infere-se que devem ser armazenados pelo menos três informa¸cões relativas
à rede Wi-Fi em uma Tag NFC para conseguir automatizar o processo de conex ão: o SSID ,
a Password e a criptograa. Esta inferência estaria absolutamente correta se n˜ ao houvesse
uma forma alternativa de se conhecer o protocolo de criptograa de rede utilizado. Ao
consultar um SSID é retornado o tipo de criptograa empregado, logo foi posśıvel denir
para este projeto o uso de apenas dois campos em uma Tag NFC conforme mostra a gura
3.3.
• Exemplos de SSIDs:
– AndreMoreiraNetwork
– UniversidadeAuditorio
– AaxWRZtxY478T20 (Improv´avel entre usu ários comuns)
Figura 3.3 : Campos identicadores Wi-Fi armazenados em TAG NFC
A ação de obter a criptograa por meio de consulta diretamente na rede Wi-Fi pode vir
a diminuir a performance do aplicativo, porem h´a de se convir que existe a possibilidade
de utilizar TAGs NFC que care¸cam de espaço de armazenamento onde a grava¸cão de um
campo a mais poderia ser a diferen ça entre sucesso e falha.
8/17/2019 Tcc Andre Lira
43/80
3.1.0.3 Estrutura¸ cão de dados em Tags NFC - Ndef
A utiliza ção de Tags NFC como solução neste projeto ocorreu seguindo o formatode troca de mensagens NDEF ou NFC Data Exchange Format criado pelo NFC Forum ,
implementado e disponibilizado pela API android.nfc para desenvolvimento em sistema
operacional Android . Conforme pode ser visto na gura 3.5, uma Ndef Message é composta
por vários records ou registros, que por sua vez são compostos por dois campos: Header -
Cabeçalho da mensagem e Payload - Corpo ou carga, área reservada ao dado [Forum2006].
Enquanto a gura 3.4 mostra como ocorre o processo de identica ção de uma Tag NFC
no sistema operacional Android. A formata¸cão Ndef disponibiliza RDTs ou Record Type
Denitions , que representam deni ções de tipos de registros que compõem mensagens Ndef .
Através dessas deni¸cões chegamos os TNFs ou Type Name Formats que são de fato os
tipos de registros formados a partir das deni¸cões [Forum2006] [NXP2009] .
• Dentre os tipos de registros disponibilizados vale mencionar: [NXP2009]
– MIME (Multipurpose Internet Mail Extensions
∗ Imagens png, gif, ...
∗ Texto simples, html, javascript, ...∗ Video mpeg, quicktime, ..
– Absolute URIs (Uniform Resource Identier)
∗ URLs
∗ Contatos de agenda telef ônica
∗ Mensagens SMS
– NFC Well Known Type
∗ Texto
∗ Par âmetros de Handover (PIN , Endere ço Bluetooth )
3.1.0.4 A¸cões denidas
Para criar uma arquitetura robusta para o projeto foram denidas a¸ cões, as quais o
aplicativo deveria cumprir para atingir o nivél de qualidade esperado.
8/17/2019 Tcc Andre Lira
44/80
Figura 3.4: Fluxo gerados eventos de leitura de Tags NFC em sistema operacional Android. [Developer2007]
Figura 3.5 : Estrutura de mensagem Ndef. [Developer2007]
• Ler dados de uma Tag NFC .
• Escrever dados em uma Tag NFC .
• Suportar formata¸cão NDEF .
• Controlar hardware .
• Congurar uma conex ão Wi-Fi .
8/17/2019 Tcc Andre Lira
45/80
• Criar uma conex ão Wi-Fi .
• Conter tela de informa ções.
• Prover a menor intera¸cão posśıvel com o usuário.
• Funcionar com a menor quantidade de toques no display touchscreen .
3.1.0.5 Arquitetura de solu¸ cão
Após ter sido concretizada uma an álise conceitual do problema, levantado os requisi-
tos funcionais priorit ários e elaborado um modelo de solução viável e de baixo custo, foi
constitúıda uma ideia para inicial para o uxo de funcionamento da solu¸ cão, essa ideia é
representada pela gura 3.6 mostrando que no momento da ocorrência de um evento Tap
com uma Tag NFC , o smartphone deverá colher desta os par âmetros de identica ção de
uma rede sem o gerada por um hotspot Wi-Fi e iniciar os processos de conguração e
inicialização de conexão.
A obten ção de um conceito de solução geral permitiu idealizar um posśıvel uxo para
o projeto de aplicativo, conforme pode ser visto na gura 3.9. O diagrama de navega¸cão
mostra a sequência de passos decorrentes da utiliza¸ cão do aplicativo a partir de sua telainicial, assim como as posśıveis a ções de tomada de decisão por parte do usu ário. Ao
analisar mais a fundo este diagrama, nota-se que as a¸ cões de escrita em Tag NFC e Lei-
tura/conex˜ ao em hotspot Wi-Fi ocorrem/atuam de forma isolada e independentes entre
si, permitindo que sejam separadas e encaradas como dois aplicativos distintos espećıcos
para cada fun ção.
Essa condição também pode ser visualizada nas guras 3.7 e 3.8. No entanto, a
abordagem de cria ção de dois aplicativos n ão foi aplicada neste projeto. Mantendo como
decisão arquitetural criar um ´ unico aplicativo que cumprisse com ambas `as atividades,
conforme apresentado no diagrama de classes exposto pela gura 3.10.
• Funcionalidades principais do sistema.
– Escrita de par âmetros de congura ção em Tag NFC .
– Obten ção dos parâmetros escritos em Tag NFC .
8/17/2019 Tcc Andre Lira
46/80
Figura 3.6 : Ideia inicial de funcionamento do aplicativo.
– Processo de conexão em hotspot Wi-Fi .
– Visualiza ção de tela de informações.
8/17/2019 Tcc Andre Lira
47/80
Figura 3.7 : Diagrama de sequência do m ódulo write NFC
Figura 3.8 : Diagrama de sequência do m ódulo responsável pela conexão WiFi e
8/17/2019 Tcc Andre Lira
48/80
Figura 3.9 : Diagrama de navega ção do aplicativo
8/17/2019 Tcc Andre Lira
49/80
F i g u r a 3
. 1 0 :
D i a g r a m a
d e c l a s s e s
d o p r o
j e t o .
8/17/2019 Tcc Andre Lira
50/80
3.2 Projeto
Para um melhor gerenciamento deste projeto, de forma a mantê-lo sempre dentro dosprazos de entrega de funcionalidades, de acordo com os padr˜oes de qualidade exigidos,
foram adotados pontos de controle como:
• Metodologia ágil Scrum para projetos de desenvolvimento de software.
• Elaboraç ão de um cronograma de desenvolvimento.
• Elaboraç ão de lista de etapas de desenvolvimento.
• Elaboraç ão de lista de itens fora de escopo.
3.2.1 Metodologia de desenvolvimento
Ao ińıcio do projeto foi adotada a metodologia ´agil de desenvolvimento de software
SCRUM , que ajudou a manter o foco na conclus ão de forma ordenada de atividades de
pesquisa, codicação, refatora ção e testes de acordo com suas respectivas prioridades em
função da disponibilidade de tempo. Foram adotadas seis sprints de quinze dias cada,totalizando três meses de desenvolvimento técnico, realizando todas as atividades descritas
no product backlog composto pela tabela 3.1.
8/17/2019 Tcc Andre Lira
51/80
T a b e l a 3
. 1 :
P r o
d u c t
B a c
k l o g
8/17/2019 Tcc Andre Lira
52/80
3.3 Implementa¸ cão
A implementa ção do aplicativo prot ótipo NFC-Wi-Fi versão nal foi dividida em etapascom o propósito de manter o c ódigo organizado e criar uma modulariza¸cão de componentes
funcionais.
• Etapa NFC - Esta etapa consistiu em codicar um componente isolado cuja funcio-
nalidades fossem:
– Gravar dados em uma Tag NFC .
– Ler dados de uma Tag NFC .
– Teste funcional
• Etapa Wi-Fi - Esta etapa consistiu em codicar um componente isolado cuja funci-
onalidades fossem:
– Inicializar hardware Wi-Fi do dispositivo.
– Iniciar descoberta de redes Wi-Fi
– Consultar hardware Wi-Fi em busca de redes dispońıveis.
– Congurar uma conex ão de rede Wi-Fi em dispositivo Android.
– Iniciar processo de conexão com uma rede Wi-Fi
– Teste funcional
• Etapa de integra¸cão NFC e Wi-Fi - Esta etapa consistiu na integra¸ cão de ambos os
módulos citados focando na obten ção do uxo previsto na arquitetura do projeto.
– Inicializar dispositivo Wi-Fi
– Identicar rede Wi-Fi utilizando par âmetros de conex ão (SSID Password ) ar-
mazenados em Tag NFC .
– Identicar protocolo de criptograa de rede utilizado
– Iniciar processo de conexão
• Etapa de refatora¸cão de código - Esta etapa consiste na cria¸cão de layouts para o
prot ótipo vericação e busca por áreas passiveis a melhorias.
8/17/2019 Tcc Andre Lira
53/80
3.3.1 AndroidManifest.xml
Ao iniciar o desenvolvimento de um aplicativo que utilize funcionalidades pertencentesa um ou mais dispositivos de um smartphone Android , deve-se, primeiramente, gerar per-
missões de utilização de cada dispositivo, requerer sua utiliza¸cão e indicar o ńıvel de API
Android no qual o aplicativo dever á ser instalado. Sem as devidas permiss ões, o aplicativo
não conseguirá efetuar nenhuma requisi¸cão de serviço. Todas as permiss ões de utilização
de hardwares especı́cos, requerimentos de features e declarações de Activities devem ser
adicionadas ao arquivo AndroidManifest.xml automaticamente gerado em projetos Android
pelo SDK . Este projeto utiliza os dispositivos de hardware NFC e Wi-Fi , assim como duas
Activities principais. O código 3.3.1 representa o arquivo AndroidManifest.xml e sua ex-
plicação ocorrerá de acordo com as linhas do arquivo. Linhas 5, 6 e 7 - denem o ńıvel
de API requisitado para a instala¸cão da App e o ńıvel ao qual ela é indicada. Para este
caso, targetSdkVersion=15 indica que esta App está apta a funcionar corretamente desde a
versão Android 4.0 ICE-CREAM-SANDWICH , no entanto minSdkVersion=16 indica que
sua instala ção deverá ser disponibilizada para dispositivos rodando sistema operacional
Android 4.1 JELLY-BEAN ou superior. Vale mencionar que a API relativa ou uso de
NFC só foi disponibilizada a partir da vers ão Android 2.3 GINGER-BREAD ou API level 9 . Linhas 9 a 13 - conferem à App, permissões para utiliza ção Wi-Fi , de redes e de Internet .
Linha 14 - confere à App permissão para utiliza ção de NFC . Linhas 16 e 17 - indicam que
a disponibilidade de features NFC e Wi-Fi em dispositivo devem ser obrigat órias para o
funcionamento adequando. Linhas 23 e 32 - referem-se às Activities utilizadas no projeto.
3.3.2 Etapa NFC
O pacote NFC , conforme ilustrado na gura 3.11, é formado por quatro source les
compostos de duas interfaces e duas classes que as implementam.
• Interface 1: ForegroundDispatcher.java
– Implementa ção: NfcForegroundDispatcher.java
• Interface 2: NFC.java
– Implementa ção: NfcDefaultProcessor.java
8/17/2019 Tcc Andre Lira
54/80
1 5 8
9 10 11 12 13 14 15
16 17 18
19 20 android:icon="@drawable/ic_launcher"21 android:label="@string/app_name"22 android:theme="@style/AppTheme" >23 26 27 28 29 30 31
32 34 35 36 37 38 39
40 41
Código 3.3.1: Arquivo Android Manifest (xml)
Figura 3.11 : Packet NFC.
3.3.2.1 NFC Foreground Dispacher
A interface ForegroundDispacher.java disponibiliza a ativa¸ cão ou desativa ção do modo
de processamento em primeiro plano para NFC , ou seja, a ativa ção deste modo impede que o
8/17/2019 Tcc Andre Lira
55/80
8/17/2019 Tcc Andre Lira
56/80
1 package nfcController;2
3 import android.app.Activity;4
import android.app.PendingIntent;5 import android.content.Intent;6 import android.content.IntentFilter;7 import android.nfc.NfcAdapter;8 import android.util.Log;9
10 public class NfcForegroundDispatcher implements ForegroundDispatcher {11
12 private static final String TAG = "NfcForegroundDispatcher";13 private final NfcAdapter nfcAdapter;14 private final PendingIntent nfcPendingIntent;15 private final Activity receivedActivity;16
17 public NfcForegroundDispatcher(Activity activity) {18 receivedActivity = activity;19 nfcAdapter = NfcAdapter.getDefaultAdapter(activity);20 nfcPendingIntent = PendingIntent.getActivity(activity, 0,21 new Intent(activity, activity.getClass()).addFlags(Intent.22 FLAG_ACTIVITY_SINGLE_TOP), 0);23 }24 public void enable() {25 Log.d(TAG, "enableForegroundMode");26 IntentFilter tagDetected = new IntentFilter(NfcAdapter.\27 ACTION_TAG_DISCOVERED);28 IntentFilter[] TagFilters = new IntentFilter[] { tagDetected };29 nfcAdapter.enableForegroundDispatch(receivedActivity,30 nfcPendingIntent, TagFilters, null);31 }32 public void disable() {33 Log.d(TAG, "disableForegroundMode");34 nfcAdapter.disableForegroundDispatch(receivedActivity);35 }36 }
Código 3.3.2: Implementa ç˜ ao da interface Foreground Dispatcher
3.3.2.2 Classe NfcDefaultProcessor
A Classe NfcDefaultProcessor implementa quatro métodos p´ ublicos:
• public String getSSID()
• public String getPWD()
• public void readNdefTag(Intent intent) - Leitura de Tag NFC
• public void writeNdefTag(Tag tag, String ssid, String password) ? Escrita em Tag
NFC .
Os dois primeiros est ão diretamente ligados à aquisição de parâmetros de congura ção
Wi-Fi gravados em uma Tag NFC . Após ser realizada a leitura da Tag , esses métodos
8/17/2019 Tcc Andre Lira
57/80
1 package com.example.prototypenfc_wifi;2
3 import java.io.IOException;4
5 public class NfcWriterActivity extends Activity{6
7 @Override8 public void onCreate(Bundle savedInstanceState) {9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.nfc_tag_writer);11 foregroundDispatcher = new NfcForegroundDispatcher(this);12 }13
14 @Override15 public void onNewIntent(Intent intent) {16
17 }18
19 @Override20 public void onResume() {21 Log.d(TAG, "onResume");22 super.onResume();23 foregroundDispatcher.enable();24 }25
26 @Override27 public void onPause() {28 Log.d(TAG, "onPause");29 super.onPause();30 foregroundDispatcher.disable();31 }32 }
Código 3.3.3: Instancia¸c˜ ao, habilita ç˜ ao e desativa ç˜ ao do modo Foreground Dispacher
podem ser invocados de diferentes partes do c ódigo que possam lhes oferecer alguma uti-
lidade. Os demais métodos ser˜ao explanados individualmente sob forma de subitens desta
sessão.
3.3.2.2.0.4 Escrita de Tag NFC O método writeNdefTag ( Tag tag, String ssid,
String Password ) mostrado no c ódigo 3.3.4 permite a grava ção de Tags NFC contendo um
record SSID e um Record Password . Caso os campos contendo as informa ções requisitadas
estejam vazios ou nulos, uma exce ção é lan çada, resultando em falha de grava¸cão (Linhas03, 06, 09,12). Na linha 15, pode-se observar a criação de uma lista onde ser ão inseridos
NdefRecords . Conforme denido na arquitetura do projeto, nesta lista constar˜ ao apenas
dois records tipo texto correspondentes as conguara¸cões da rede Wi-Fi alvo. Cada um
é criado com auxı́lio do método privado private NdefRecord createNdefRecord(String text) .
Conforme consta no código 3.3.5, este método recebe um texto por parˆametro e retorna
um NdefRecord gerado. Depois que a lista de NdefRecords estiver conclúıda, todos os
8/17/2019 Tcc Andre Lira
58/80
records passam a compor uma NdefMessage (linha 16, código 3.3.4). O processo continua
com a seleção da Tag detectada(linha 17), seguida pela abertura de uma conex˜ ao(linha
18, gravação de dados(linha 19) e fechamento da Tag (linha 20). Ao nal deste método
passamos a possuir uma Tag NFC contendo os par âmetros desejados.
1 public void writeNdefTag(Tag tag, String ssid, String password)2 throws UnsupportedEncodingException, IOException, FormatException {3 if (ssid == null){4 throw new IllegalArgumentException();5 }6 if (ssid.isEmpty()){7 throw new IllegalArgumentException();8 }9 if (password == null){
10 throw new IllegalArgumentException();11
}12 if (password.isEmpty()){13 throw new IllegalArgumentException();14 }15 NdefRecord[] records = { createNdefRecord(ssid),16 createNdefRecord(password) };17 NdefMessage message = new NdefMessage(records);18 Ndef ndef = Ndef.get(tag);19 ndef.connect();20 ndef.writeNdefMessage(message);21 ndef.close();22 }23 }
Código 3.3.4: Implementa ç˜ ao de escrita em formato Ndef em Tag NFC
1 private NdefRecord createNdefRecord(String text) throws2 UnsupportedEncodingException {3 byte[] payload = text.getBytes();4 NdefRecord ndefRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,5 NdefRecord.RTD_TEXT, null, payload);6 return ndefRecord;7 }
Código 3.3.5: Criando NdefRecord
3.3.2.2.0.5 Leitura de Tag NFC O código 3.3.6 transcreve o método utilizado
para ler uma Tag NFC que contenha payloads referentes ao SSID e Password de uma rede
Wi-Fi e realizar a extra ção dessas informações. Este método recebe por parˆametro uma
intent referente a ação de Tap NFC, e através dessa intente poder´ a ser feita a interpreta¸cão
do conteúdo da Tag NFC . Observando a linha 04 vericamos que se a a ção presente na
intent for a mesma realizada por a ção de descoberta de Tag NFC , signica que temos a
correta. Logo, seu conte údo deverá resgatado e listado - linha 07 -, em seguida convertido
8/17/2019 Tcc Andre Lira
59/80
para formata¸cão Ndef Message linha 09, e cada mensagem convertida dever á ter seus records
analisados em busca de payloads que sejam iniciados por tags SSID : e PWD : (linhas 11,
13 e 18). Após encontrados, dever ão ter suas tags identicadoras removidas e o conte údo
restante atribúıdo a vari´ aveis privadas da classe networkSSID e networkPWD - linhas 15 e
20 -. Ao nalizar este processo tem-se os identicadores de rede Wi-Fi salvos em variáveis,
podendo ser acessadas através dos métodos getSSID() e getPWD().
1 public void readNdefTag(Intent intent) {2 networkPWD = null;3 networkSSID = null;4 if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {5 Parcelable[] messages;6 try {7 messages = intent.getParcelableArrayExtra(NfcAdapter.8 EXTRA_NDEF_MESSAGES);9 for (Parcelable message : messages) {
10 NdefMessage msg = (NdefMessage) message;11 for (NdefRecord record : msg.getRecords()) {12 String tagPayload = new String(record.getPayload());13 if (tagPayload.startsWith(SSID)) {14 Log.d(TAG, "Retriving Network SSID");15 networkSSID = tagPayload.replaceFirst(SSID, "");16 }17 if (tagPayload.startsWith(PWD)) {18 Log.d(TAG, "Retriving Network Password");19 networkPWD = tagPayload.replaceFirst(PWD, "");20 }21 }22 }23
} catch (Exception e) {24 e.printStackTrace();25 Log.d(TAG, e.getMessage());26 }27 } else {28 Log.d(TAG, "UNEXPECTED ACTION - " + intent.getAction());29 Toast.makeText(this, "Unexpected Action - " + intent.getAction(),30 Toast.LENGTH_LONG).show();31 }32 }
Código 3.3.6: Leitura de Tag NFC e extraç˜ ao de records SSID Password.
3.3.3 Etapa Wi-Fi
O pacote Wi-Fi é composto por três arquivos JAVA conforme demonstrado na gura
3.12, sendo distribúıdos da seguinte forma:
• Interface 1: WIFI.java
– Implementa ção: WiFiController.java
8/17/2019 Tcc Andre Lira
60/80
Figura 3.12 : Packet wiController
• Classe independente: WiFiCongurator.java enditemize
A interface WIFI.java disponibiliza de métodos de controle de adaptador Wi-Fi re-
quisitados para a realiza¸cão de todas as ações deste projeto.
– boolean checkWiEnabled()- Checa se o adaptador Wi-Fi está ativo.
– boolean setWiEnabled(boolean enable)- Ativa o adaptador Wi-Fi .
– boolean startWiScan()- Inicia busca por conex˜ oes Wi-Fi .
– void addWiNetwork(WiFiCongurator wiCongurator)- Prepara rede con-
gurada para conex ão .
– void enableNetwork(int id)- Confere permiss˜ao de conexão.
– void connect()- Inicia processo de conexão.
– void disconnect() throws RuntimeException- Termina Conex˜ ao.
– List< ScanResult > getScanResults()- Lista as redes encontradas pelo adaptador
de rede.
– List< WiConguration > getConguredNetworks()- Lista as redes conguradas.
Conforme mencionado, a implementa¸cão destes métodos ocorre na classe WiFiCon-
troller de acordo com o código 3.3.7. O SDK possui uma APIs relativa à utiliza ção
de adaptores Wi-Fi realmente bem documentados e de f ácil entendimento. O esfor ço
maior dessa fase de desenvolvimento foi escolher quais métodos deveriam ser utiliza-
dos dentre todas as possibilidades dispońıveis. Conforme pode ser visto nas linhas
6, 7 e 8, foram necessárias três deriva¸cões da API android .wi para preencher todos
os requisitos deste projeto. O c ódigo 3.3.8 mostra a implementa¸cão da classe Wi-
Congurator , utilizar esta deriva¸cão da API provou-se igualmente simples merecendo
8/17/2019 Tcc Andre Lira
61/80
poucos pontos de destaque. No entanto vale `a pena citar que nas linhas 12, 15 e 18
é necess ário que ao ińıcio e ao nal de cada string , sejam inseridas aspas duplas.
1 package wifiController;2
3 import java.util.List;4 import android.app.Activity;5 import android.content.Context;6 import android.net.wifi.ScanResult;7 import android.net.wifi.WifiConfiguration;8 import android.net.wifi.WifiManager;9 import android.util.Log;
10 import android.widget.Toast;11
12 public class WiFiController extends Activity implements WIFI{13 private WifiManager wifiManager;14
15 public WiFiController(Context context){16 wifiManager = (WifiManager)context.getSystemService(Context.17 WIFI_SERVICE);18 }19 public boolean checkWifiEnabled(){20 return wifiManager.isWifiEnabled();21 }22 public boolean setWifiEnabled(boolean enable)23 {24 return wifiManager.setWifiEnabled(enable);25 }26 public boolean startWifiScan(){27 return wifiManager.startScan();28 }29 public List getScanResults(){30 return wifiManager.getScanResults();31 }32 public WifiManager getWifiManager(){33 return wifiManager;34 }35 public void disconnect() throws RuntimeException{36 try{37 wifiManager.disconnect();38 }catch (Exception e) {39 e.printStackTrace();40 Log.d("disconnect failure", e.getMessage());41 }42 }43 public void connect() {44 wifiManager.reconnect();45 }46 public void addWifiNetwork(WiFiConfigurator wifiConfigurator) {47 wifiManager.addNetwork(wifiConfigurator.getWifiConfiguration());48 }49 public void enableNetwork(int id) {50 wifiManager.enableNetwork(id, true) ;51 }52 public List getConfiguredNetworks(){53 return wifiManager.getConfiguredNetworks();54 }55 }
Código 3.3.7: Implementa ç˜ ao WiFiController
8/17/2019 Tcc Andre Lira
62/80
1 package wifiController;2
3 import android.net.wifi.WifiConfiguration;4
5 public class WiFiConfigurator{6 private WifiConfiguration wifiConfiguration;7
8 public WiFiConfigurator(){9 wifiConfiguration = new WifiConfiguration();
10 }11 public void configureSSID(String ssid){12 wifiConfiguration.SSID = ("\"" + ssid + "\"");13 }14 public void configureWpaPassword(String password){15 wifiConfiguration.preSharedKey = ("\"" + password + "\"");16 }17 public void setWepPassword(String password){18 wifiConfiguration.wepKeys[0] = ("\"" + password + "\"");19 wifiConfiguration.wepTxKeyIndex = 0;20 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.21 KeyMgmt.NONE);22 wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.23 GroupCipher.WEP40);24 }25 public void setOpenNetworkPassword(){26 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.27 KeyMgmt.NONE);28 }29 public WifiConfiguration getWifiConfiguration(){30 return wifiConfiguration;31 }32 }
Código 3.3.8: Implementa ç˜ ao WiFiCongurator
3.3.4 Etapa de integra¸ cão NFC-WiFi - Cria¸cão de uxocompleto.
Nesta etapa ser á mostrado detalhes da implementa¸ cão das funcionalidades NFC e
Wi-Fi para a obten ção do prot ótipo de solução nal. Para alcan¸car o uxo de ativi-
dades desejado, conforme mostrado na sess ão arquitetura de solu¸cão, foram criadas
duas: Activity (conjunto formado por uma tela e todas a ela relacionadas), Nfc-
WriterActivity (Atividade de escrita NFC ) e MainActivity (Atividade principal). A
Activity NfcWriterActivity trata exclusivamente da escrita de parˆ ametros Wi-Fi em
uma Tag NFC , enquanto a MainActivity referente a leitura de Tag NFC para obten-
ção de par âmetros Wi-Fi e procedimentos de conexão com a rede correta.
3.3.4.1 NfcWriterActivity
Conforme pode ser visualizado na gura 3.13, esta Activity possui em seu layout dois
campos de entrada de dados: SSID e PWD (password ). Cada um desses campos
8/17/2019 Tcc Andre Lira
63/80
representa um record que deverá compor uma Ndef Message , após seu preenchimento
pode-se realizar um evento Tap em Tag NFC para gravar a Ndef Message criada.
código 3.4.2 - Os procedimentos para se efetuar a grava ção de uma Tag NFC : Na
linha 22 e 23 verica-se que ao ser criada uma nova intent (evento Tap NFC ), ocorre
a estrutura¸cão de um objeto que representa a Tag lida pelo adaptador NFC . Nas linha
24-27 são recuperados o SSID e o Password denidos pelo usuário, é concatenado,
ao ińıcio de cada texto, uma string responsável por distinguir os campos e evitando
problemas quando for realizado o processo de leitura. Por m na linha 29 o processo
de gravaç ão é efetivado.
Figura 3.13 : Tela de grava ção de Tag NFC
3.3.4.2 MainActivity
A principal prevista para esta Activity são referentes a conexão Wi-Fi através de
leitura de Tag NFC . Ao ser detectado um evento de Tap NFC , é iniciado o processo de
extra ção de conteúdo, an álise de parâmetros de rede e conexão com a rede Wi-Fi alvo.
O código 3.4.1 mostra todo o trajeto percorrido desde a leitura da Tag NFC até a
efetiva ção da conexão. Ao receber uma nova intent é necessário que seja garantido que
8/17/2019 Tcc Andre Lira
64/80
os parâmetros de congura ção não sejam polúıdos por dados previamente salvos, logo
as variáveis globais que guardam esses valores devem ser limpas recebendo conte údo
nulo (linhas 03 e 04), para que assim o adaptador possa efetuar a leitura da Tag
(linha 05) e extrair um novo conte´udo -linhas 07 e 08-. Se os campos tiverem sido
recebidos com sucesso -linha 12-, é realizada uma verica ção se a placa Wi-Fi do
dispositivo est á ativada, caso contr´ario é feita a ativa¸cão -linhas 14 e 15-, lembrando
que se deve disponibilizar tempo para que o hardware inicialize antes de prosseguir
-linha 19-. Seguindo adiante, é feita uma busca pelas redes Wi-Fi capturadas pelo
adaptador -linha 25- e vericado se alguma delas refere-se ao SSID recebido pela Tag
-linha 28-. Em caso de sucesso é requisitado tipo de criptograa atuante na rede-linha 30- e uma nova congura ção de rede é criada utilizando os parˆametros SSID e
Password recebidos por NFC em conjunto com o tipo de criptograa recebido pela
rede Wi-Fi (linhas 31 e 35). Finalmente é realizada uma busca entre as conex˜oes
conguradas, em busca da congura¸cão recém criada - linha 48 - e, ao encontr á-la
(linha 49), iniciasse um processo de desconexão Wi-Fi , ativa ção da rede congurada
e conexão (linhas 51 a 53).
3.4 Conclus˜ oes
A implementa ção deste projeto acarretou valiosos conhecimentos quanto à integra¸ cão
de múltiplos dispositivos de hardware em um aplicativo, houve grande utiliza¸cão de
APIs de controle disponibilizadas pelo sistema operacional, possibilitando a aquisi¸ cão
experiências. Ao desenvolver este software de forma modular, p ôde-se vericar que
cada dispositivo adaptador de hardware possui procedimentos espećıcos de ativa ção
e controle. No entanto, verica-se que as APIs trabalham de forma a padronizartais procedimentos, possibilitando notar similaridades de utilaza¸ cão entre os vários
dispositivos facilitando a compreens˜ao. Ao desenvolver o módulo Wi-Fi percebeu-se
uma grande semelhan ça entre as funções de controle de seu adaptador e suas fun ções
de conguração e por esta raz ão o desenvolvimento uiu com maior agilidade.
8/17/2019 Tcc Andre Lira
65/80
1 public void onNewIntent(Intent intent) {2 Log.d(TAG, onNewIntent);3 collectedSSID = null;4
collectedPWD = null;5 nfc.readNdefTag(intent);6 if (nfc.getSSID() != null) {7 collectedSSID = nfc.getSSID();8 collectedPWD = nfc.getPWD();9 } else {
10 Toast.makeText(this, ssidNotFound, Toast.LENGTH_LONG).show();11 }12 if(collectedSSID != null & collectedPWD != null){13
14 if(!wifi.checkWifiEnabled()){15 wifi.setWifiEnabled(true);16 Toast.makeText(this, wifiEnabler, Toast.LENGTH_LONG).show();17 Log.d(TAG, wifiEnabled );18 try {19 Thread.sleep(3000);20 } catch (InterruptedException e) {21 e.printStackTrace();22 }23 }24 try {25 scanResultList = wifi.getScanResults();26 boolean networkFound = false;27 for( ScanResult incResulList : scanResultList ) {28 if(collectedSSID.equals(incResulList.SSID)){29 networkFound = true;30 collectedEncryptionType = incResulList.capabilities;31 wifiConfigurator = new WiFiConfigura