Este relatório descreve (1) o desenvolvimento de uma aplicação Android usando a tecnologia NFC para realizar operações de leitura e escrita em tags NFC, (2) explica conceitos fundamentais sobre NFC como definição, tecnologia, especificação e modo de operação reader/writer, e (3) detalha a implementação dos módulos de leitura e escrita da aplicação incluindo a configuração do manifest, captura do intent, extração de dados da tag e gravação do NdefMessage.
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
NFC
1. INSTITUTO FEDERAL DE PERNAMBUCO (IFPE) - CAMPUS RECIFE
DEPARTAMENTO ACADÊMICO DE SISTEMAS, PROCESSOS E CONTROLES
ELETRO-ELETRÔNICO (DASE)
COORDENAÇÃO DO CURSO SUPERIOR TECNOLÓGO DE ANÁLISE E
DESENVOLVIMENTO DE SISTEMAS (CTADS)
RICHARDSON BRUNO DA SILVA ANDRADE
RELATÓRIO
Recife, PE
30 dez, 2015
2. RICHARDSON BRUNO DA SILVA ANDRADE
RELATÓRIO DE COMPLEMENTAÇÃO DE CARGA
HORÁRIA E/OU CONTEÚDOS DE COMPONENTE
CURRICULAR
Relatório de Programação de Dispositivos Movéis
do curso Tecnólogo em Análise e
Desenvolvimento de Sistemas, do Instituto
Federal de Pernambuco IFPE Campus Recife,
para a complementação de carga horária e/ou
conteúdos de componente curricular Aspecto
Avançado em Desenvolvimento.
Professor: Ramide Augusto Sales Dantas
Recife, PE
30 dez, 2015
3. LISTA DE FIGURAS
FIGURA 1 - CONFIGURAÇÃO DO ANDROIDMANISFEST.XML...................................................................................6
FIGURA 2 - CLASSE NFCFORGROUNDDISPATCHER.................................................................................................7
FIGURA 3 - ATIVAÇÃO E DESATIVAÇÃO NASATIVIDADESDE ESCRITA/LEITURADO
NFCFOREGROUNDDISPATCHER........................................................................................................................7
FIGURA 4 - READER ACTIVITY.....................................................................................................................................9
FIGURA 5 - NOVO INTENT AO APROXIMA READER E TAG......................................................................................10
FIGURA 6 - MÉTODO QUE EXTRAI A ESTRUTURA MESSAGES DA TAG.................................................................10
FIGURA 7 –PREPARANDO OS PARÂMETROS PARA PASSAR PARA O MÉTODO DE GRAVAÇÃO DATAG .....................................11
FIGURA 8 - MÉTODO DE GRAVAÇÃO NDEFMESSAGE NA ATIVIDADE WRITER/MÓDULO DE ESCRITA..........13
4. SUMÁRIO
Lista de Figuras.....................................................................................................................2
Sumário...............................................................................................................................1
1 Introdução.........................................................................................................................2
2 Desenvolvimento Técnico..................................................................................................3
2.1 NFC .....................................................................................................................3
2.1.1 Definição.......................................................................................................3
2.1.2 Tecnologia .....................................................................................................3
2.1.3 Especificação.................................................................................................3
2.1.4 Dispositivos ...................................................................................................4
2.1.5 Modo de Operação.........................................................................................4
2.1.6 Leitura/Escrita................................................................................................4
2.1.7 Aplicações.....................................................................................................5
2.2 DESENVOLVIMENTO DE APLICAÇÃO ANDROIDUSANDONFC NO MODO
DE OPERAÇÃO READER/WRITER ...............................................................................5
2.2.1 Descrição do desenvolvimento ........................................................................5
2.3 Biblioteca..............................................................................................................5
2.4 Restrições .............................................................................................................5
2.5 Configuração do AndroidManisfest.xml..................................................................5
2.6 Capturando o intent disparado na aplicação.............................................................6
2.7 Módulo de Leitura .................................................................................................8
2.7.1 Extraindo informação da Tag..........................................................................9
2.8 Módulo de Gravação............................................................................................11
Considerações Finais ..........................................................................................................14
Referências........................................................................................................................15
5. 2
1 INTRODUÇÃO
O objetivo deste relatório consiste em demonstrar um estudo e descrição da
tecnologia Near Field Comunnication (NFC), comunicação de campo por
aproximidade e seu uso no Android. Também será abordado a construção de uma
aplicação Android usando NFC.
6. 3
2 DESENVOLVIMENTOTÉCNICO
2.1 NFC
2.1.1 Definição
Segundo IGOE, COLEMAN e JEPSON (2014), NFC é construído sobre Radio-
Frequency IDentification (RFID) / IDentificação por RádioFrequência para permitir
trocas mais complexas entre os usuários. De forma complementar, conforme COSKUN,
OK e OZDENIZC (2013), é um dos ativadores da computação umbíqua. É projetado
para várias tecnologias como comunicação wireless, serviços mobile, aplicação mobile e
smart card. E também, orientado a programação server-side web, cloud services e
tecnologia Extensible Markup Language (XML) / Linguagem de Marcação
Extensível contribuem para seu melhoramento. De modo geral, a visão principal do
NFC é a integração de informação pessoal e privada para fones mobile.
2.1.2 Tecnologia
NFC nasce 2002 pela parceria Philips e Sony. A ECMA adotou tempo depois. A
IEC adota um ano mais tarde. Em 2004, promove-se o forum NFC criado pela Nokia,
Sony e Philips. Depois, ocorre e reconhecimento pelas instituições de padronização
como ISO, IEC, ETSI e ECMA (COSKUN, OK e OZDENIZC, 2013).
2.1.3 Especificação
O NFC atua por rádio frequência e seu sinal corresponde 13.56 MHz com uma
largura de banda de até 424 kpbs na forma bidirecional (COSKUN, OK e OZDENIZC,
7. 4
2013).
2.1.4 Dispositivos
São três os serviços que NFC habilita: enabled mobile phone/fones móveis
ativados, reader/leitor, tag/etiqueta (COSKUN, OK e OZDENIZC, 2013).
2.1.5 Modo de Operação
O NFC permite três modos de interação, reader/writer, peer-to-peer e smart
card. Mas para obedecer o escopo do desenvolvimento dessa aplicação com Android, só
será descrito o modo de interação reader/writer.
2.1.6 Leitura/Escrita
Esse modelo de uso pode ser descrito numa interação entre reader/modo de
leitura ou writer/modo de escrita em uma tag/etiqueta: como se segue:
1. Requisição de leitura
2. Transferência dos dados
3. Processamento com despositivo
4. Uso do serviço adicional
5. Requisição de escrita
6. Conteúdo armazenado
8. 5
2.1.7 Aplicações
As aplicações para esse modo de operação consiste transferir tipos de dados como
textos, Uniform Resource Locator (URL)/Localizador de Recurso Uniforme
(COSKUN, OK e OZDENIZC, 2013).
2.2 DESENVOLVIMENTO DE APLICAÇÃO ANDROID USANDO
NFC NO MODO DE OPERAÇÃO READER/WRITER
2.2.1 Descrição do desenvolvimento
A aplicação realiza a operação de escrita e leitura de conteúdo na tag. Logo após
selecionado a operação, aproxima-se o smartphone e a tag. O intent depois de lançado,
ou mostra o conteúdo lido ou a confirmação de gravação.
2.3 Biblioteca
API Android nativa possiblita o uso dos recursos por meio de interface a partir
do pacote “android.nfc”.
2.4 Restrições
O nível mínimo exigido é 9 da API. Mas para aproveitar de recursos adicionais o
nível 10 da API Android é considerada.
2.5 Configuração do AndroidManisfest.xml
O primeiro passo é verificar recurso de hardware no despositivo. Também não
se esquecer de dar permissão ao aplicativo para utilizar o recurso de hawdware. E antes
9. 6
de mais nada, configurar a atribuição a versão mínima do SDK para dar suporte os
métodos da API de NFC :
Figura 1 - Configuração do AndroidManisfest.xml
2.6 Capturando o intent disparado na aplicação
Cria-se a classe que implementa ForegroundDispatcher para captura o intent
para ficar em stand-by no aguardo pelo escolanador da atividade ou sistema operacional
para ganhar a tela. Como aplicação captura, no construtor passa-se a instância de leitura
ou escrita a qual o chama. Atribui-se adapter e recebe o intent pendente iniciado antes
que possa ser mostrado na tela. No método enable, realizamos o filtro baseado na classe
adapter NFC para a tag qual ser lida. Uma vez realizado passando o intent pedente que
aguardou e em seguida repassa-se para o processamento.
publicclassNfcForegroundDispatcherimplementsForegroundDispatcher{
private staticfinal StringTAG= "NfcForegroundDispatcher";
private final NfcAdapternfcAdapter;
private final PendingIntentnfcPendingIntent;
private final ActivityreceivedActivity;
publicNfcForegroundDispatcher(Activityactivity) {
receivedActivity=activity;
nfcAdapter= NfcAdapter.getDefaultAdapter(activity);
nfcPendingIntent=PendingIntent.getActivity(activity,0,
newIntent(activity,
activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);
}
publicvoidenable() {
10. 7
Log.d(TAG,"enableForegroundMode");
IntentFiltertagDetected=new
IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
IntentFilter[]TagFilters=new IntentFilter[] { tagDetected};
nfcAdapter.enableForegroundDispatch(receivedActivity,nfcPendingIntent,
TagFilters,null);
}
publicvoiddisable() {
Log.d(TAG,"disableForegroundMode");
nfcAdapter.disableForegroundDispatch(receivedActivity);
}
}
Figura 2 - Classe NFCForgroundDispatcher
Ainda mais, realiza-se em alguns métods do ciclo de vida da atividade que
contém o NFCForgroundDispatcher, a ativação do seu método de ativação sobre
onResume e desativação no método onPause como é mostrado:
public void onResume() {
super.onResume();
foregroundDispatcher.enable();
}
@Override
public void onPause() {
super.onPause();
foregroundDispatcher.disable();
}
Figura 3 - Ativação e desativação nas atividades de escrita/leitura do NFCForegroundDispatcher
11. 8
2.7 Módulo de Leitura
Agrega-se a classe que captura o intent e passa objeto da atividade. Criaremos
alguns widgets nas tela para quando lido a url repasse para ele o conteúdo e assim ao
clicar sobre o butão dispare para webview.
publicclassReaderActivityextendsActionBarActivity{
private NfcAdaptermyNfcAdapter;
private TextViewmyText;
private Stringpayload;
private SpinnerspSetor;
private TextViewtvPpi;
private ButtonbtVisitarUrl;
private byte payloadHeader;
private ForegroundDispatcherforegroundDispatcher;
private NdefMessage[] messages;
private Stringdestin= newString();
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reader);
foregroundDispatcher=newNfcForegroundDispatcher(this);
tvPpi = (TextView) findViewById(R.id.tvPpi);
btVisitarUrl =(Button) findViewById(R.id.btVisitarUrl);
addListenerOnSpinnerItemSelection();
12. 9
Toast.makeText(this,"Aproxime seuaparelhoaoetiquetainteligente
NFC",Toast.LENGTH_LONG).show();
btVisitarUrl.setOnClickListener(newView.OnClickListener() {
@Override
publicvoidonClick(Viewv) {
IntentwebViewIntent=newIntent(v.getContext(),WebViewActivity.class);
payload= payload.replace("u0001","");
webViewIntent.putExtra("url","http://"+payload+ destin);
startActivity(webViewIntent);
Figura 4 - Reader Activity
2.7.1 Extraindo informação da Tag
Implementaremos o método onNewIntent quando uma nova intent tente ganhar o
foreground haverá o filtro do dispachante que agregamos e repassamos para o método
getNdefMessages no intent. Como retorno, tem-se um conjunto do tipo NdefMessages
como array. Logo, pega-se as gravações contido nele, a recuperação do conteúdo
principal é obtido pelo método payload.
Tag detectedTag= intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
//PREPARETHE NDEF MESSAGE
byte[] uriField="1-dot-map-indoor-ifpe-recife-1021.appsppoot.com/bl-a-
t.html?ppi=e&destin=".getBytes(Charset.forName("US-ASCII"));
byte[] payload=newbyte[uriField.length+1];
payload[0] =0x01;
System.arraycopy(uriField,0,payload,1,uriField.length);
NdefRecorduriRecord=newNdefRecord(
NdefRecord.TNF_WELL_KNOWN,NdefRecord.RTD_URI,new byte[0],payload);
13. 10
NdefMessagenewMessage=newNdefMessage(new NdefRecord[] { uriRecord});
writeNdefMessageToTag(newMessage,detectedTag);
Figura 5 - Novo Intent ao aproxima reader e tag
NdefMessage[] getNdefMessages(Intentintent) {
NdefMessage[]message=null;
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMessages=
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMessages!=null) {
message = newNdefMessage[rawMessages.length];
for (inti = 0; i < rawMessages.length;i++) {
message[i] =(NdefMessage) rawMessages[i];
}
} else {
byte[] empty=newbyte[] {};
NdefRecordrecord= newNdefRecord( NdefRecord.TNF_WELL_KNOWN,empty,
empty,empty);
NdefMessage msg=newNdefMessage(new NdefRecord[]{ record} );
message = newNdefMessage[]{ msg};
}
}/*else {
Log.d("","Unknownintent.");
finish();
}*/
returnmessage;
}
Figura 6 - Método que extrai a estrutura messages da Tag
14. 11
2.8 Módulo de Gravação
No médoto onCreate do classe Writer tem o link e atribuição da variável
ndefRecord. Depois ocorre o encapsulamento por NdefMessage. Logo em seguida
repassa a tag detectada e NdefMessage como mostrado:
byte[] uriField="1-dot-map-indoor-ifpe-recife-1021.appsppoot.com/bl-a-
t.html?ppi=e&destin=".getBytes(Charset.forName("US-ASCII"));
byte[] payload=newbyte[uriField.length+1];
payload[0] =0x01;
System.arraycopy(uriField,0, payload,1,uriField.length);
NdefRecorduriRecord=newNdefRecord(
NdefRecord.TNF_WELL_KNOWN,NdefRecord.RTD_URI,new byte[0],payload);
NdefMessagenewMessage=newNdefMessage(new NdefRecord[] { uriRecord});
// WRITE DATA TO TAG
writeNdefMessageToTag(newMessage,detectedTag);
Figura 7 - Preparando os parâmetros para passar para o método de gravação da tag
No método, pode-se observar a verificação da tag, liga antes de gravação, se não
está nula; se é apenas de leitura; se não houver mais espaço suficiente na tag; se ocorre
alguma falha ou se o formato das messages é reconhecido. Caso não entre em nenhuma
condição, a escrita é realizada com sucesso:
boolean writeNdefMessageToTag(NdefMessage message,TagdetectedTag) {
intsize = message.toByteArray().length;
try {
Ndef ndef =Ndef.get(detectedTag);
if (ndef !=null) {
ndef.connect();
17. 14
CONSIDERAÇÕES FINAIS
Este relatório apresentou as características do NFC, como : definição,
tecnologia, especificação, dispositivos e modo de operação, com destaque em leitura e
escrita e exemplos de uso.
Além disso, mostrou passo a passo o desenvolvimento de aplicação android com
NFC no modo leitura e escrita. Entre as etapas vistas constam o contexto de
desenvolvimento, o nível de biblioteca, as restrições, a configuração, a criação do
módulo de leitura e escrita.