SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
NFC: tecnologia e applicazioni

Stefano Sanna

gerdavax AT gmail DOT com


Emanuele Di Saverio

emanuele.disaverio AT gmail DOT com
DEMO
Agenda
•   Speaker
•   NFC: Near Field Communication
•   Scenari applicativi
•   API Android
•   API JME
•   Dagli smartphone agli oggetti: Arduino
•   Risorse, Q&A
                                       Emanuele Di Saverio - Stefano Sanna    3
                                 emanuele.disaverio | gerdavax AT gmail.com
Speaker (“Lei non sa chi sono io!”)
• Stefano Sanna
    – Head of Android Lab @ Open Reply


• Emanuele Di Saverio
    – Senior Design Technologist @ frog

Insieme hanno pubblicato “Android Programmazione Avanzata” per le Edizioni FAG
Milano in collaborazione con Samsung Italia


                                                     Emanuele Di Saverio - Stefano Sanna    4
                                               emanuele.disaverio | gerdavax AT gmail.com
NFC
Near Field Communication
Near Field Communication
• È una tecnologia a radiofrequenza (13.56MHz) per la
  comunicazione a corto raggio tra oggetti di tipo

  – attivo: smartphone con chip NFC o lettore USB connesso
    ad un computer
  – passivo: tag (superficiale o embedded) associato ad un
    oggetto fisico


• NFC Forum: http://www.nfc-forum.org
                                       Emanuele Di Saverio - Stefano Sanna    6
                                 emanuele.disaverio | gerdavax AT gmail.com
Principio di funzionamento
Il componente attivo emette un
campo elettromagnetico che
induce una corrente sul circuito
del componente passivo. Tale
corrente è sufficiente ad
alimentare il microcontrollore a
bordo, ricevere il dato, effettuare
l’elaborazione e trasmettere una
risposta                                http://www.scienceprog.com/how-does-rfid-tag-technology-works/

                                        Emanuele Di Saverio - Stefano Sanna               7
                                  emanuele.disaverio | gerdavax AT gmail.com
NFC in numeri
• Comunicazione a corto raggio
  – Distanza teorica: 10 cm - Distanza “pratica”: < 4 cm
• Velocità di comunicazione
  – Min: 106 Kbit/s - Max: 424 Kbit/s
• Diffusione:
  – 3.5 miliardi di smartcard MIFARE
  – oltre 40 milioni di reader desktop
  – circa 50 modelli di telefono/smartphone dotati di chip NFC
                                          Emanuele Di Saverio - Stefano Sanna    8
                                    emanuele.disaverio | gerdavax AT gmail.com
Scenari applicativi
                                  • Pagamento
                                  • Sicurezza, controllo
                                    accessi
                                  • Ticketing
                                  • Tracking di merci
                                  • Gaming
                                  • Medical
Google Wallet sample image

                                         Emanuele Di Saverio - Stefano Sanna    9
                                   emanuele.disaverio | gerdavax AT gmail.com
riter
Modalità operative                    e   r/w
                               read                                                   Tag by TI




                              peer-to-peer


                                                                                   Samsung Nexus S



                              card
                                     emu
                                            latio
                                                    n                                  ACR122U
                                                                                       USB Reader
       Samsung Galaxy Nexus
                                            Emanuele Di Saverio - Stefano Sanna             10
                                      emanuele.disaverio | gerdavax AT gmail.com
Modalità operative per piattaforma
            Java Micro                                                                                 Windows
                            BlackBerry   Android       Symbian          bada                iOS
              Edition                                                                                   Phone


 reader       JSR 257                       2.3.x                                          iOS 5?       WP 8?
 writer


                API
  P2P        proprietarie
                                            4.0.x                                          iOS 5?       WP 8?




  card        JSR 257
                                         API privata                                       iOS 5?       WP 8?
emulation     JSR 177



                                                                Emanuele Di Saverio - Stefano Sanna      11
                                                          emanuele.disaverio | gerdavax AT gmail.com
Alcuni tipi di tag




                  Emanuele Di Saverio - Stefano Sanna    12
            emanuele.disaverio | gerdavax AT gmail.com
Si fa presto a dire tag...
Tecnologie




Tipi NFC


 Prodotti
                                                                    http://www.androidavanzato.it


                                   Emanuele Di Saverio - Stefano Sanna             13
                             emanuele.disaverio | gerdavax AT gmail.com
NDEF: NFC Data Exchange Format
• Formato di dati standard basato su dei NDEF
    Message contenenti uno o più NDEF Record
•   Per consentire alle app di gestire automaticamente il
    contenuto dei record, sono definiti alcuni tipi standard
    attraverso gli NFC RTD (Record Data Type):
     – Text e URI
     – Smart Poster
     – vCard

                                         Emanuele Di Saverio - Stefano Sanna    14
                                   emanuele.disaverio | gerdavax AT gmail.com
API Android
Chip NXP PN65N

                   NFC su Android                         all’interno di un Nexus S




• Prima API introdotta sulla API 2.3, Nexus S
  – Reader/writer
  – “prototipo” di supporto P2P


• Consolidamento API in
  Ice Cream Sandwich
  – NFC Push


                                        Emanuele Di Saverio - Stefano Sanna      16
                                  emanuele.disaverio | gerdavax AT gmail.com
Android NFC API
L’API è organizzata in due package:

• android.nfc
   – contiene le classi di interfacciamento al chip NFC e di
     gestione di messaggi e record NDEF
• android.nfc.tech
   – contiene le classi che modellano i singoli tipi di tag e
     tecnologie supportate dalla piattaforma

                                             Emanuele Di Saverio - Stefano Sanna    17
                                       emanuele.disaverio | gerdavax AT gmail.com
android.nfc (reader/writer)
• NfcManager
   – servizio di sistema che fornisce un riferimento all'NfcAdapter
• NfcAdapter
   –   modella il modulo NFC del terminale. È utilizzato per l’accesso al Foreground Dispatching
       System
• NdefMessage
   – rappresenta l'unità elementare di comunicazione tra dispositivi NFC.
• NdefRecord
   – l'informazione atomica contenuta in un NdefMessage, costituita da payload e metadati
• Tag
   – modella il tag letto dal dispositivo e consente di conoscerne le technology associate

                                                            Emanuele Di Saverio - Stefano Sanna    18
                                                      emanuele.disaverio | gerdavax AT gmail.com
android.nfc (P2P)
• NfcAdapter.CreateNdefMessageCallback
   – callback invocata quando la piattaforma chiede all'app di predisporre un messaggio NDEF
     da inviare via NFC Push ad un altro terminale NFC
• NfcAdapter.OnNdefPushCompleteCallback
   –   callback invocata quando l'invio di un messaggio NDEF è andato a buon fine
• NfcEvent
   – incapsula (per ora) solo un riferimento all’NfcAdapter che ha generato la richiesta di
     evento push




                                                            Emanuele Di Saverio - Stefano Sanna    19
                                                      emanuele.disaverio | gerdavax AT gmail.com
Permission
  • Per poter utilizzare l’API NFC è necessario dichiarare
    la permission e richiedere la feature hardware
    sull’AndroidManifest dell’applicazione:


<uses-permission android:name="android.permission.NFC" />

<uses-feature android:name="android.hardware.nfc" android:required="true" />




                                                  Emanuele Di Saverio - Stefano Sanna    20
                                            emanuele.disaverio | gerdavax AT gmail.com
android.nfc.tech
• TagTechnology
   – È l'interfaccia comune a tutti i tipi di tag che espone i metodi per aprire e chiudere la
     connessione (necessaria per effettuare tutte le successive operazioni di lettura e di
     scrittura)
• Ndef, NdefFormatable (opzionale)
   – Forniscono accesso a tag (formattati e formattabili) conformi alla specifica NDEF,
     indipendente dal tipo di tag e SCOS sottostante
• IsoDep, MifareClassic (opzionale), MifareUltralight
  (opzionale), NfcA, NfcB, NfcF, NfcV
   – Forniscono accesso a specifiche tecnologie di tag ed esportano funzionalità di basso
     livello (ad esempio, authenticateSectorWithKeyA() su MifareClassic o getAtqa() su NfcA)



                                                              Emanuele Di Saverio - Stefano Sanna    21
                                                        emanuele.disaverio | gerdavax AT gmail.com
Note sul dispatching degli eventi NFC
• Gli eventi di lettura di tag NFC sono propagati
  attraverso Intent
• Tali Intent sono inviati esclusivamente alle Activity
  (no Service, no BroadcastReceiver)
• La scelta del target avviene attraverso Intent Filter
• Gli eventi NFC sono generati e propagati solo se il
  device ha lo schermo sbloccato (no “silent NFC” con
  lo smartphone in standby)
                                     Emanuele Di Saverio - Stefano Sanna    22
                               emanuele.disaverio | gerdavax AT gmail.com
Tipi di eventi (ACTION) di lettura di tag
• NDEF_DISCOVERED
  – Il tag appena letto è conforme alla specifica NDEF e
    contiene dati al proprio interno opportunamente formattati
• TECH_DISCOVERED
  – Il tag appena letto espone una o più tecnologie supportate
    da una applicazione installata sul terminale
• TAG_DISCOVERED
  – Nessuna app è registrata su tag NDEF o su specifiche
    tecnologie: si cerca di propagare l’evento generico
                                          Emanuele Di Saverio - Stefano Sanna    23
                                    emanuele.disaverio | gerdavax AT gmail.com
Logica di dispatching dell’Intent




                                   http://developer.android.com/guide/topics/nfc/nfc.html


                         Emanuele Di Saverio - Stefano Sanna                24
                   emanuele.disaverio | gerdavax AT gmail.com
IntentFilter sul manifest
• A seconda del tipo di evento a cui è interessata, una
  Activity dichiara nel manifest uno o più IntentFilter per
  una o più action tra NDEF_DISCOVERED,
  TECH_DISCOVERED e TAG_DISCOVERED.
• Alla lettura di un tag lo stack NFC legge
  tutti i manifest per individuare l'Activity
  più adatta a gestirlo; se più di di una è
  candidata, viene mostrata la finestra
  dell'Activity Chooser
                                       Emanuele Di Saverio - Stefano Sanna    25
                                 emanuele.disaverio | gerdavax AT gmail.com
IntentFilter per NDEF_DISCOVERED
  È necessario specificare il MIME Type del record desiderato
  (text/plain, application/vnd.myapp.feat, ...):

<activity android:name=".NFCReaderActivity">

    <intent-filter>
      <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
      <data android:mimeType="text/plain"/>
      <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>

</activity>


                                                     Emanuele Di Saverio - Stefano Sanna    26
                                               emanuele.disaverio | gerdavax AT gmail.com
IntentFilter per TECH_DISCOVERED
                                                                                  Occorre indicare l’elenco
                                                                                  di tecnologie supportate



<activity android:name=".NFCReaderActivity">

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


                                                     Emanuele Di Saverio - Stefano Sanna        27
                                               emanuele.disaverio | gerdavax AT gmail.com
Elenco tecnologie per TECH_DISCOVERED
     <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">




                                                                                                     AND
         <tech-list>
             <tech>android.nfc.tech.NfcA</tech>
             <tech>android.nfc.tech.Ndef</tech>
         </tech-list>
     </resources>

     <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">




                                                                                                     AND
         <tech-list>
OR




             <tech>android.nfc.tech.NfcA</tech>
             <tech>android.nfc.tech.NdefFormatable</tech>
         </tech-list>
     </resources>

     <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
         <tech-list>




                                                                                                     AND
             <tech>android.nfc.tech.MifareClassic</tech>
             <tech>android.nfc.tech.Ndef</tech>
         </tech-list>
     </resources>                                   Emanuele Di Saverio - Stefano Sanna                    28
                                                        emanuele.disaverio | gerdavax AT gmail.com
IntentFilter per TAG_DISCOVERED


<activity android:name=".NFCReaderActivity">

    <intent-filter>
      <action android:name="android.nfc.action.TAG_DISCOVERED"/>
    </intent-filter>

</activity>




                                                     Emanuele Di Saverio - Stefano Sanna    29
                                               emanuele.disaverio | gerdavax AT gmail.com
Foreground Dispatching
    • Un’Activity in esecuzione può chiedere al di avere
      prelazione sulle notifiche NFC:
//...
mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext);
//...                                              Con questi parametri è possibile specificare l’action da
                                                               ricevere e il filtro per tecnologie e metadati. Non specificare
@Override                                                      nulla equivale ad un’action TAG_DISCOVERED
public void onResume() {
    super.onResume();

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

     mNfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);

}                                                                    Emanuele Di Saverio - Stefano Sanna            30
                                                               emanuele.disaverio | gerdavax AT gmail.com
È ora di leggere un tag!
@Override
public void onNewIntent(Intent intent) {
    Bundle bundle = intent.getExtras();

    Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG);

    byte[] tagID = tag.getId(); // ID
    String id = byteToHex(tagID); // convertiamo l’ID in stringa...


    // tech
    String[] techList = tag.getTechList();
    for (String tech : techList) {
        addToUI(tech); // aggiungiamo la technology alla lista in UI
    }
}
                                                  Emanuele Di Saverio - Stefano Sanna    31
                                            emanuele.disaverio | gerdavax AT gmail.com
Lettura di un NDEF Message
// [...]
Bundle bundle = intent.getExtras();
Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG);

Ndef ndefTag = Ndef.get(tag);

ndefTag.connect();

NdefRecord[] records = ndefTag.getNdefMessage().getRecords();

ArrayList<String> strings = new ArrayList<String>();

for (NdefRecord record : records) {
    byte[] payload = record.getPayload();

    strings.add(decodeTextPayload(payload));
}

ndefTag.close();                                        Emanuele Di Saverio - Stefano Sanna    32
                                                  emanuele.disaverio | gerdavax AT gmail.com
Decodifica del payload RTD_TEXT
  • Il primo byte del payload contiene informazioni
    sull’encoding (UTF-8 o UTF-16) e sulla lunghezza del
    codice IANA della lingua del testo:

// [...]
private String decodeTextPayload(byte[] payload) throws Exception {
   byte status = payload[0];

   int languageCodeLenght = status & 0x3f;

   return new String(payload, 1 + languageCodeLenght, payload.length - 1 -
languageCodeLenght, "UTF-8");
}
                                                        Emanuele Di Saverio - Stefano Sanna    33
                                                  emanuele.disaverio | gerdavax AT gmail.com
Application Record e Android Beam
• Android 4 introduce due interessanti novità:
  – Application Record: consente di scrivere su un tag un
    record riconosciuto dal sistema operativo che consente di
    avviare automaticamente un’app (anche priva di funzionalità
    NFC) o scaricarla del Play Store (se non già installata)
  – Android Beam implementa la modalità NFC Push che
    permette lo scambio di messaggi NDEF tra due terminali. È
    supportata nativamente da alcune app di sistema

    DEMO BROWSER
                                         Emanuele Di Saverio - Stefano Sanna    34
                                   emanuele.disaverio | gerdavax AT gmail.com
Dagli smartphone agli oggetti
(extra)
Dagli smartphone agli oggetti: Arduino
• La disponibilità di chip NFC/RFID a basso costo
  compatibili con la specifica MIFARE consente di
  realizzare interessanti prototipi di “Internet of Things”
  in cui tag scritti da uno smartphone possono essere
  letti e riconosciuti da oggetti fisici
• Hardware “comodo” per sperimentare:
   – Arduino MEGA (1280 o 2560)
   – Elechouse SSRFID basato su MFRC522

                                        Emanuele Di Saverio - Stefano Sanna    36
                                  emanuele.disaverio | gerdavax AT gmail.com
Arduino MEGA + MFRC522




                   Emanuele Di Saverio - Stefano Sanna    37
             emanuele.disaverio | gerdavax AT gmail.com
Lettura dell’ID di un tag MIFARE
int count = 0;
                                                                             Imposta il chip RFID in modalità
void setup() {                                                               lettura automatica dell’ID del tag
    Serial.begin(9600);
    Serial1.begin(9600);
    Serial1.write(0x02);
    pinMode(13, OUTPUT);
}

void loop() {
    if (Serial1.available()) {
        Serial.print(Serial1.read(),HEX); //Display the Serial Number in HEX

        count++;

        if (count == 4) {
            Serial.println();
            count = 0;
        } else {
            Serial.print(":");
        }
    }
                                                                 Emanuele Di Saverio - Stefano Sanna      38
}                                                          emanuele.disaverio | gerdavax AT gmail.com
RISORSE
Alcuni dei terminali NFC venduti in Italia


  Nokia 603 (JME)
                     Nokia 6131 NFC (JME)
                                                                                                                           Nokia N9 (MeeGo)
                                                            Samsung
                                                         Galaxy S II NFC


                                                                                                       Sony Xperia S
                                                                                                         (Android)




                                               Samsung                           Samsung Galaxy
BlackBerry 9380     BlackBerry 9900                                                                                     Samsung S5230N (JME)
                                            Nexus S (Android)                    Nexus (Android)


                                                                                 Emanuele Di Saverio - Stefano Sanna            40
                                                                           emanuele.disaverio | gerdavax AT gmail.com
Dove acquistare tag e lettori
• SmartCardFocus
  – http://www.smartcardfocus.com


• ebay!




                                          Emanuele Di Saverio - Stefano Sanna    41
                                    emanuele.disaverio | gerdavax AT gmail.com
Bibliografia
• Near Field Communication:
  from theory to practice
      Vedat Coskun, Kerem Ok, Busra Ozdenizci
      Wiley


• Android Programmazione Avanzata
      Emanuele Di Saverio, Stefano Sanna
      Edizioni FAG Milano


                                           Emanuele Di Saverio - Stefano Sanna    42
                                     emanuele.disaverio | gerdavax AT gmail.com
Contatti
• Emanuele Di Saverio
  – emanuele.disaverio AT gmail DOT com
  – @hazam


• Stefano Sanna
  – gerdavax AT gmail DOT com
  – @gerdavax
  – http://www.gerdavax.it
                                      Emanuele Di Saverio - Stefano Sanna    43
                                emanuele.disaverio | gerdavax AT gmail.com
GRAZIE :-)

Weitere ähnliche Inhalte

Ähnlich wie NFC: tecnologia e applicazioni, by Emanuele Di Saverio, Stefano Sanna

HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsStefano Sanna
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!Massimo Bonanni
 
NEXiDA Smart User Interface flyer (italian)
NEXiDA Smart User Interface flyer (italian)NEXiDA Smart User Interface flyer (italian)
NEXiDA Smart User Interface flyer (italian)Claudio Rubbiani
 
Smau milano 2012 arena expo comm maurizio-palermo
Smau milano 2012   arena expo comm maurizio-palermoSmau milano 2012   arena expo comm maurizio-palermo
Smau milano 2012 arena expo comm maurizio-palermoSMAU
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationWhymca
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
WEBdeBS NFC Presentation
WEBdeBS NFC PresentationWEBdeBS NFC Presentation
WEBdeBS NFC PresentationMyti S.r.l.
 
I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013
I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013
I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013I-Rig Developement & Marketing Team
 
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...Roberto Navoni
 
Irig platform NFC Mobile Cloud
Irig platform NFC Mobile CloudIrig platform NFC Mobile Cloud
Irig platform NFC Mobile CloudGiorgio Chignola
 
Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry pi
Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry piMakers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry pi
Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry piRoberto Navoni
 
GTUG NFC Presentation
GTUG NFC PresentationGTUG NFC Presentation
GTUG NFC PresentationMyti S.r.l.
 
NFC: Tecnologia e Sicurezza
NFC: Tecnologia e SicurezzaNFC: Tecnologia e Sicurezza
NFC: Tecnologia e SicurezzaAndrea Draghetti
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzajekil
 

Ähnlich wie NFC: tecnologia e applicazioni, by Emanuele Di Saverio, Stefano Sanna (20)

HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!
 
NEXiDA Smart User Interface flyer (italian)
NEXiDA Smart User Interface flyer (italian)NEXiDA Smart User Interface flyer (italian)
NEXiDA Smart User Interface flyer (italian)
 
Slide
SlideSlide
Slide
 
Smau milano 2012 arena expo comm maurizio-palermo
Smau milano 2012   arena expo comm maurizio-palermoSmau milano 2012   arena expo comm maurizio-palermo
Smau milano 2012 arena expo comm maurizio-palermo
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentation
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
WEBdeBS NFC Presentation
WEBdeBS NFC PresentationWEBdeBS NFC Presentation
WEBdeBS NFC Presentation
 
Micro Applicazioni Mobile
Micro Applicazioni MobileMicro Applicazioni Mobile
Micro Applicazioni Mobile
 
I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013
I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013
I-Rig the Internet of things via NFC. State of the Art, Novembrer 2013
 
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
 
Digital signage
Digital signageDigital signage
Digital signage
 
Irig platform NFC Mobile Cloud
Irig platform NFC Mobile CloudIrig platform NFC Mobile Cloud
Irig platform NFC Mobile Cloud
 
Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry pi
Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry piMakers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry pi
Makers Italy: VR Neuron la risposta italiana alla piattaforma Raspberry pi
 
GTUG NFC Presentation
GTUG NFC PresentationGTUG NFC Presentation
GTUG NFC Presentation
 
NFC: Tecnologia e Sicurezza
NFC: Tecnologia e SicurezzaNFC: Tecnologia e Sicurezza
NFC: Tecnologia e Sicurezza
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
 
Vavn364
Vavn364Vavn364
Vavn364
 

Mehr von Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Mehr von Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

NFC: tecnologia e applicazioni, by Emanuele Di Saverio, Stefano Sanna

  • 1. NFC: tecnologia e applicazioni Stefano Sanna gerdavax AT gmail DOT com Emanuele Di Saverio emanuele.disaverio AT gmail DOT com
  • 3. Agenda • Speaker • NFC: Near Field Communication • Scenari applicativi • API Android • API JME • Dagli smartphone agli oggetti: Arduino • Risorse, Q&A Emanuele Di Saverio - Stefano Sanna 3 emanuele.disaverio | gerdavax AT gmail.com
  • 4. Speaker (“Lei non sa chi sono io!”) • Stefano Sanna – Head of Android Lab @ Open Reply • Emanuele Di Saverio – Senior Design Technologist @ frog Insieme hanno pubblicato “Android Programmazione Avanzata” per le Edizioni FAG Milano in collaborazione con Samsung Italia Emanuele Di Saverio - Stefano Sanna 4 emanuele.disaverio | gerdavax AT gmail.com
  • 6. Near Field Communication • È una tecnologia a radiofrequenza (13.56MHz) per la comunicazione a corto raggio tra oggetti di tipo – attivo: smartphone con chip NFC o lettore USB connesso ad un computer – passivo: tag (superficiale o embedded) associato ad un oggetto fisico • NFC Forum: http://www.nfc-forum.org Emanuele Di Saverio - Stefano Sanna 6 emanuele.disaverio | gerdavax AT gmail.com
  • 7. Principio di funzionamento Il componente attivo emette un campo elettromagnetico che induce una corrente sul circuito del componente passivo. Tale corrente è sufficiente ad alimentare il microcontrollore a bordo, ricevere il dato, effettuare l’elaborazione e trasmettere una risposta http://www.scienceprog.com/how-does-rfid-tag-technology-works/ Emanuele Di Saverio - Stefano Sanna 7 emanuele.disaverio | gerdavax AT gmail.com
  • 8. NFC in numeri • Comunicazione a corto raggio – Distanza teorica: 10 cm - Distanza “pratica”: < 4 cm • Velocità di comunicazione – Min: 106 Kbit/s - Max: 424 Kbit/s • Diffusione: – 3.5 miliardi di smartcard MIFARE – oltre 40 milioni di reader desktop – circa 50 modelli di telefono/smartphone dotati di chip NFC Emanuele Di Saverio - Stefano Sanna 8 emanuele.disaverio | gerdavax AT gmail.com
  • 9. Scenari applicativi • Pagamento • Sicurezza, controllo accessi • Ticketing • Tracking di merci • Gaming • Medical Google Wallet sample image Emanuele Di Saverio - Stefano Sanna 9 emanuele.disaverio | gerdavax AT gmail.com
  • 10. riter Modalità operative e r/w read Tag by TI peer-to-peer Samsung Nexus S card emu latio n ACR122U USB Reader Samsung Galaxy Nexus Emanuele Di Saverio - Stefano Sanna 10 emanuele.disaverio | gerdavax AT gmail.com
  • 11. Modalità operative per piattaforma Java Micro Windows BlackBerry Android Symbian bada iOS Edition Phone reader JSR 257 2.3.x iOS 5? WP 8? writer API P2P proprietarie 4.0.x iOS 5? WP 8? card JSR 257 API privata iOS 5? WP 8? emulation JSR 177 Emanuele Di Saverio - Stefano Sanna 11 emanuele.disaverio | gerdavax AT gmail.com
  • 12. Alcuni tipi di tag Emanuele Di Saverio - Stefano Sanna 12 emanuele.disaverio | gerdavax AT gmail.com
  • 13. Si fa presto a dire tag... Tecnologie Tipi NFC Prodotti http://www.androidavanzato.it Emanuele Di Saverio - Stefano Sanna 13 emanuele.disaverio | gerdavax AT gmail.com
  • 14. NDEF: NFC Data Exchange Format • Formato di dati standard basato su dei NDEF Message contenenti uno o più NDEF Record • Per consentire alle app di gestire automaticamente il contenuto dei record, sono definiti alcuni tipi standard attraverso gli NFC RTD (Record Data Type): – Text e URI – Smart Poster – vCard Emanuele Di Saverio - Stefano Sanna 14 emanuele.disaverio | gerdavax AT gmail.com
  • 16. Chip NXP PN65N NFC su Android all’interno di un Nexus S • Prima API introdotta sulla API 2.3, Nexus S – Reader/writer – “prototipo” di supporto P2P • Consolidamento API in Ice Cream Sandwich – NFC Push Emanuele Di Saverio - Stefano Sanna 16 emanuele.disaverio | gerdavax AT gmail.com
  • 17. Android NFC API L’API è organizzata in due package: • android.nfc – contiene le classi di interfacciamento al chip NFC e di gestione di messaggi e record NDEF • android.nfc.tech – contiene le classi che modellano i singoli tipi di tag e tecnologie supportate dalla piattaforma Emanuele Di Saverio - Stefano Sanna 17 emanuele.disaverio | gerdavax AT gmail.com
  • 18. android.nfc (reader/writer) • NfcManager – servizio di sistema che fornisce un riferimento all'NfcAdapter • NfcAdapter – modella il modulo NFC del terminale. È utilizzato per l’accesso al Foreground Dispatching System • NdefMessage – rappresenta l'unità elementare di comunicazione tra dispositivi NFC. • NdefRecord – l'informazione atomica contenuta in un NdefMessage, costituita da payload e metadati • Tag – modella il tag letto dal dispositivo e consente di conoscerne le technology associate Emanuele Di Saverio - Stefano Sanna 18 emanuele.disaverio | gerdavax AT gmail.com
  • 19. android.nfc (P2P) • NfcAdapter.CreateNdefMessageCallback – callback invocata quando la piattaforma chiede all'app di predisporre un messaggio NDEF da inviare via NFC Push ad un altro terminale NFC • NfcAdapter.OnNdefPushCompleteCallback – callback invocata quando l'invio di un messaggio NDEF è andato a buon fine • NfcEvent – incapsula (per ora) solo un riferimento all’NfcAdapter che ha generato la richiesta di evento push Emanuele Di Saverio - Stefano Sanna 19 emanuele.disaverio | gerdavax AT gmail.com
  • 20. Permission • Per poter utilizzare l’API NFC è necessario dichiarare la permission e richiedere la feature hardware sull’AndroidManifest dell’applicazione: <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> Emanuele Di Saverio - Stefano Sanna 20 emanuele.disaverio | gerdavax AT gmail.com
  • 21. android.nfc.tech • TagTechnology – È l'interfaccia comune a tutti i tipi di tag che espone i metodi per aprire e chiudere la connessione (necessaria per effettuare tutte le successive operazioni di lettura e di scrittura) • Ndef, NdefFormatable (opzionale) – Forniscono accesso a tag (formattati e formattabili) conformi alla specifica NDEF, indipendente dal tipo di tag e SCOS sottostante • IsoDep, MifareClassic (opzionale), MifareUltralight (opzionale), NfcA, NfcB, NfcF, NfcV – Forniscono accesso a specifiche tecnologie di tag ed esportano funzionalità di basso livello (ad esempio, authenticateSectorWithKeyA() su MifareClassic o getAtqa() su NfcA) Emanuele Di Saverio - Stefano Sanna 21 emanuele.disaverio | gerdavax AT gmail.com
  • 22. Note sul dispatching degli eventi NFC • Gli eventi di lettura di tag NFC sono propagati attraverso Intent • Tali Intent sono inviati esclusivamente alle Activity (no Service, no BroadcastReceiver) • La scelta del target avviene attraverso Intent Filter • Gli eventi NFC sono generati e propagati solo se il device ha lo schermo sbloccato (no “silent NFC” con lo smartphone in standby) Emanuele Di Saverio - Stefano Sanna 22 emanuele.disaverio | gerdavax AT gmail.com
  • 23. Tipi di eventi (ACTION) di lettura di tag • NDEF_DISCOVERED – Il tag appena letto è conforme alla specifica NDEF e contiene dati al proprio interno opportunamente formattati • TECH_DISCOVERED – Il tag appena letto espone una o più tecnologie supportate da una applicazione installata sul terminale • TAG_DISCOVERED – Nessuna app è registrata su tag NDEF o su specifiche tecnologie: si cerca di propagare l’evento generico Emanuele Di Saverio - Stefano Sanna 23 emanuele.disaverio | gerdavax AT gmail.com
  • 24. Logica di dispatching dell’Intent http://developer.android.com/guide/topics/nfc/nfc.html Emanuele Di Saverio - Stefano Sanna 24 emanuele.disaverio | gerdavax AT gmail.com
  • 25. IntentFilter sul manifest • A seconda del tipo di evento a cui è interessata, una Activity dichiara nel manifest uno o più IntentFilter per una o più action tra NDEF_DISCOVERED, TECH_DISCOVERED e TAG_DISCOVERED. • Alla lettura di un tag lo stack NFC legge tutti i manifest per individuare l'Activity più adatta a gestirlo; se più di di una è candidata, viene mostrata la finestra dell'Activity Chooser Emanuele Di Saverio - Stefano Sanna 25 emanuele.disaverio | gerdavax AT gmail.com
  • 26. IntentFilter per NDEF_DISCOVERED È necessario specificare il MIME Type del record desiderato (text/plain, application/vnd.myapp.feat, ...): <activity android:name=".NFCReaderActivity"> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <data android:mimeType="text/plain"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> Emanuele Di Saverio - Stefano Sanna 26 emanuele.disaverio | gerdavax AT gmail.com
  • 27. IntentFilter per TECH_DISCOVERED Occorre indicare l’elenco di tecnologie supportate <activity android:name=".NFCReaderActivity"> <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> Emanuele Di Saverio - Stefano Sanna 27 emanuele.disaverio | gerdavax AT gmail.com
  • 28. Elenco tecnologie per TECH_DISCOVERED <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> AND <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> AND <tech-list> OR <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NdefFormatable</tech> </tech-list> </resources> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> AND <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources> Emanuele Di Saverio - Stefano Sanna 28 emanuele.disaverio | gerdavax AT gmail.com
  • 29. IntentFilter per TAG_DISCOVERED <activity android:name=".NFCReaderActivity"> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/> </intent-filter> </activity> Emanuele Di Saverio - Stefano Sanna 29 emanuele.disaverio | gerdavax AT gmail.com
  • 30. Foreground Dispatching • Un’Activity in esecuzione può chiedere al di avere prelazione sulle notifiche NFC: //... mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext); //... Con questi parametri è possibile specificare l’action da ricevere e il filtro per tecnologie e metadati. Non specificare @Override nulla equivale ad un’action TAG_DISCOVERED public void onResume() { super.onResume(); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); mNfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null); } Emanuele Di Saverio - Stefano Sanna 30 emanuele.disaverio | gerdavax AT gmail.com
  • 31. È ora di leggere un tag! @Override public void onNewIntent(Intent intent) { Bundle bundle = intent.getExtras(); Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG); byte[] tagID = tag.getId(); // ID String id = byteToHex(tagID); // convertiamo l’ID in stringa... // tech String[] techList = tag.getTechList(); for (String tech : techList) { addToUI(tech); // aggiungiamo la technology alla lista in UI } } Emanuele Di Saverio - Stefano Sanna 31 emanuele.disaverio | gerdavax AT gmail.com
  • 32. Lettura di un NDEF Message // [...] Bundle bundle = intent.getExtras(); Tag tag = bundle.getParcelable(NfcAdapter.EXTRA_TAG); Ndef ndefTag = Ndef.get(tag); ndefTag.connect(); NdefRecord[] records = ndefTag.getNdefMessage().getRecords(); ArrayList<String> strings = new ArrayList<String>(); for (NdefRecord record : records) { byte[] payload = record.getPayload(); strings.add(decodeTextPayload(payload)); } ndefTag.close(); Emanuele Di Saverio - Stefano Sanna 32 emanuele.disaverio | gerdavax AT gmail.com
  • 33. Decodifica del payload RTD_TEXT • Il primo byte del payload contiene informazioni sull’encoding (UTF-8 o UTF-16) e sulla lunghezza del codice IANA della lingua del testo: // [...] private String decodeTextPayload(byte[] payload) throws Exception { byte status = payload[0]; int languageCodeLenght = status & 0x3f; return new String(payload, 1 + languageCodeLenght, payload.length - 1 - languageCodeLenght, "UTF-8"); } Emanuele Di Saverio - Stefano Sanna 33 emanuele.disaverio | gerdavax AT gmail.com
  • 34. Application Record e Android Beam • Android 4 introduce due interessanti novità: – Application Record: consente di scrivere su un tag un record riconosciuto dal sistema operativo che consente di avviare automaticamente un’app (anche priva di funzionalità NFC) o scaricarla del Play Store (se non già installata) – Android Beam implementa la modalità NFC Push che permette lo scambio di messaggi NDEF tra due terminali. È supportata nativamente da alcune app di sistema DEMO BROWSER Emanuele Di Saverio - Stefano Sanna 34 emanuele.disaverio | gerdavax AT gmail.com
  • 35. Dagli smartphone agli oggetti (extra)
  • 36. Dagli smartphone agli oggetti: Arduino • La disponibilità di chip NFC/RFID a basso costo compatibili con la specifica MIFARE consente di realizzare interessanti prototipi di “Internet of Things” in cui tag scritti da uno smartphone possono essere letti e riconosciuti da oggetti fisici • Hardware “comodo” per sperimentare: – Arduino MEGA (1280 o 2560) – Elechouse SSRFID basato su MFRC522 Emanuele Di Saverio - Stefano Sanna 36 emanuele.disaverio | gerdavax AT gmail.com
  • 37. Arduino MEGA + MFRC522 Emanuele Di Saverio - Stefano Sanna 37 emanuele.disaverio | gerdavax AT gmail.com
  • 38. Lettura dell’ID di un tag MIFARE int count = 0; Imposta il chip RFID in modalità void setup() { lettura automatica dell’ID del tag Serial.begin(9600); Serial1.begin(9600); Serial1.write(0x02); pinMode(13, OUTPUT); } void loop() { if (Serial1.available()) { Serial.print(Serial1.read(),HEX); //Display the Serial Number in HEX count++; if (count == 4) { Serial.println(); count = 0; } else { Serial.print(":"); } } Emanuele Di Saverio - Stefano Sanna 38 } emanuele.disaverio | gerdavax AT gmail.com
  • 40. Alcuni dei terminali NFC venduti in Italia Nokia 603 (JME) Nokia 6131 NFC (JME) Nokia N9 (MeeGo) Samsung Galaxy S II NFC Sony Xperia S (Android) Samsung Samsung Galaxy BlackBerry 9380 BlackBerry 9900 Samsung S5230N (JME) Nexus S (Android) Nexus (Android) Emanuele Di Saverio - Stefano Sanna 40 emanuele.disaverio | gerdavax AT gmail.com
  • 41. Dove acquistare tag e lettori • SmartCardFocus – http://www.smartcardfocus.com • ebay! Emanuele Di Saverio - Stefano Sanna 41 emanuele.disaverio | gerdavax AT gmail.com
  • 42. Bibliografia • Near Field Communication: from theory to practice Vedat Coskun, Kerem Ok, Busra Ozdenizci Wiley • Android Programmazione Avanzata Emanuele Di Saverio, Stefano Sanna Edizioni FAG Milano Emanuele Di Saverio - Stefano Sanna 42 emanuele.disaverio | gerdavax AT gmail.com
  • 43. Contatti • Emanuele Di Saverio – emanuele.disaverio AT gmail DOT com – @hazam • Stefano Sanna – gerdavax AT gmail DOT com – @gerdavax – http://www.gerdavax.it Emanuele Di Saverio - Stefano Sanna 43 emanuele.disaverio | gerdavax AT gmail.com