4. ANDROID NFC TECH
¿Y SI NO HAY UN MENSAJE NDEF?
android.nfc.tech.IsoDep
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcF
android.nfc.tech.NfcV
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
5. ANDROID NFC TECH: ISODEP
Permite el acceso a propiedades y operaciones I/O a tags 14443-4.
Algunos métodos:
– close()
– connect()
– static get(Tag tag)
– byte[] getHiLayerResponse()
– byte[] getHistoricalBytes()
– getMaxTransceiveLength()
– Tag getTag()
– getTimeout()
– isConnected()
– isExtendedLengthApduSupported()
– setTimeout(int timeout)
– byte[] transceive(byte[] data)
6. ANDROID NFC TECH: MifareUltraligth
Métodos comunes:
– close(), connect(), get(Tag tag),
getMaxTransceiveLength(), getTag(), getTimeout(),
isConnected(),setTimeout(int time), transceive(byte[]
data)
Métodos específicos de la tecnología:
– getType()
• Devuelve el tipo de MFUL.
– byte[] readPages(int pageOffset)
• Lee 4 páginas (16 bytes)
– void writePage(int pageOffset, byte[] data)
• Escribe 1 página (4 bytes).
7. ANDROID NFC TECH: NDEF
Métodos Específicos
– boolean canMakeReadOnly()
• Devuelve true si el tag puede bloquearse
– NdefMessage getCachedNdefMessage()
• Devuelve el mensaje NDEF que contenía el tag al ser detectado
– int getMaxSize()
• Devuelve el tamaño máximo del NDEF que puede almacenar el tag
– NdefMessage getNdefMessage()
• Devuelve el mensage NDEF actual
– String getType()
• Devuelve el tipo de NDEF tag
– boolean isWritable()
• Determina si el tag se puede sobreescribir
– boolean makeReadOnly()
• Bloquea el tag
– void writeNdefMessage(NdefMessage msg)
• Sobreescribe el NDEF del tag
8. ANDROID NFC TECH: NDEF FORMATEABLE
Métodos Específicos
– void format(NdefMessage firstMessage)
• Da formato NDEF al tag, luego escribe el mensaje.
– void formatReadOnly(NdefMessage firstMessage)
• Da formato NDEF al tag, luego escribe el mensaje y
bloquea el tag.
9. ANDROID NFC TECH: FILTROS
Una aplicación puede necesitar capturar tecnologías específicas: surgen
los filtros
Son ficheros .xml que se utilizan en el manifest:
<activity>
...
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
...
</activity>
12. LLCP
LLCP (Logical Link Control Protocol)
Transferencia de datos CO
– Fiable
– Al menos 128 bytes
Transferencia de datos CL
Soporta conexiones múltiples
13. LLCP
MAC Mapping:
– integra el/los protocolo/s RF en la
arquitectura LLCP.
Link Management:
– componente responsable de
serializar todos los intercambios
LLCP PDU (orientados a conex y
no orientdos)
– Agregación y desgregación de
pequeños PDUs
– Garantiza el modo de
comunicación asíncrono
balanceado
– Supervisa el estado del enlace
14. LLCP (II)
Connection-oriented
Transport :
– Mantener los intercambios
orientados a conexión
incluidos set-up y
termination.
Connectionless Transport:
– Intercambios
unacknowledged.
15.
16. NPP
Protocolo por encima de LLCP:
– PUSH de mensajes NDEF de un dispositivo a otro.
– one way (cliente - servidor).
– siempre se debe correr el servidor NPP.
– cliente se ejecuta cuando hay un mensaje NDEF
disponible para hacer el PUSH.
– intercambio bidireccional de mensajes NDEF.
18. NPP
Action code => 0x01 (Passive Tag)
Servidor:
– Service name: com.android.npp
– ¿Transacción completada?
• último NDEF entry recibido y conexión cerrada
Cliente
– Conexión al socket LLCP: com.android.npp
– Enviar Header + Entrys
– Desconectarse del socket
19.
20. SNEP
Protocolo por encima de LLCP CO
Nombre del servicio por defecto urn:nfc:sn:snep
Servidor espera peticiones en un punto de acceso
al servicio LLC
Cliente envía una petición de conexión (nombre
de servicio)
Una vez establecida Cliente – SNEP Request
Servidor – SNEP Response
El cliente cierra la conexión
25. ANDROID NFC P2P
Requiere NPP desde API level 9 (Android 2.3) a
API level 13 (Android 3.2)
A partir de API level 14 permite NPP y SNEP
A partir de la API level 16 se han añadido
nuevas features para facilitar la programación
26. ANDROID NFC P2P: NfcAdapter
Métodos P2P
– void setNdefPushMessage(NdefMessage message, Activity activity, Activity...
activities)
• Establece un mensaje NFC estático que será enviado por Beam
– void setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback
callback, Activity activity, Activity... activities)
• Establece un callback que genera mensajes NDEF dinámicamente que
serán enviados por Beam. Nuestra Activity debe implementar la interfaz
NfcAdapter.CreateNdefMessageCallback
– void setOnNdefPushCompleteCallback(
NfcAdapter.OnNdefPushCompleteCallback callback, Activity activity, Activity...
activities)
• Establece un callback que será llamado cuando se transmita un mensaje
NDEF por Beam. Nuestra Activity debe implementar la interfaz
NfcAdapter.OnNdefPushCompleteCallback
27. ANDROID NFC P2P: NfcAdapter (II)
Métodos P2P (API level 16)
– isNdefPushEnabled()
• Devuelve true si Beam está activado
– void setBeamPushUris(Uri[] uris, Activity activity)
• Establece una o más Uris que serán enviadas por Beam
– void setBeamPushUrisCallback(
NfcAdapter.CreateBeamUrisCallback callback, Activity activity)
• Establece un callback que genera Uris dinámicamente que
serán enviados por Beam. Nuestra Activity debe
implementar la interfaz NfcAdapter.CreateBeamUrisCallback