SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
NFC Programming in Android

   Ishan Fernando           Myti
           @ifdo         @myti_news
    i.fernando@myti.it   www.myti.it
NFC




• Comunicazione contactless
• Nuova interazione utente
• Sicurezza
NFC (Near Field Communication)
NFC (Near Field Communication)




• E' una tecnologia wireless a corto raggio (< 10cm)
• Si opera alla frequenza di 13,56MHz
• Può raggiungere una velocità di trasmissione massima di
  424 kbit/s
RFID to NFC




E' una evoluzione di RFID (Radio Frequency Identification)
RFID vs NFC

          RFID                          NFC
                                 estenzione di RFID
distanze lunghe (3 ~ 100m)    distanze corte (< 10cm)
   qualsiasi frequenza               13.56 MHz
    usa nei vari ambiti      usa nell’ambito di sicurezza
                                     nei celluari
Storia
NDEF (NFC Data Exchange Format)




NDEF è un formato di incapsulamento dei messaggi (dati) per
scambiare informazioni via NFC.
NDEF (NFC Data Exchange Format)




      passive mode                         active mode




Questo formato consente di scambiare informazioni 
• tra due NFC Forum Devices 
• tra un NFC Forum Device e un NFC Forum Tag.
NDEF (NFC Data Exchange Format)


 Message = n * Records

       Records = 
        Type +
         Size + 
  Payload (binary data)
NDEF (NFC Data Exchange Format)

I messaggi NDEF possono essere di tre tipi : 

URI 
il contenuto è un link

MIME 
il contenuto è specificato da un mime type

NFC-specific types 
utilizzi specifici per diverse tecnologie



http://www.nfc-forum.org/specs/spec_list/
NFC e NDEF summary




    NFC è una tecnologia        NDEF è un formato di
 wireless a corto raggio che   encapsulamento dei dati
   consente di creare una
comunicazione bidirezionale
NFC Technology summary

• NFC
  o Wireless a corto raggio (< 10cm)
  o Frequenza : 13,56MHz 
  o Velocità di trasmissione massima : 424 Kbit/s.
  o  E' una evoluzione di RFID


• NDEF
  o Incapsulamento dei messaggi
  o NFC Forum Device <=> NFC Forum Device 
  o NFC Forum Device <=> NFC Forum Tag
  o Message = n * Records
  o Records = Type + Size + Payload (binary data)
  o Types: URI, MIME o NFC-specific types
Android
Android
Android Application

          Android Application

         AndroidManifest.xml

                 Intents

    Activities             Services

Broadcast receivers   Content providers
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:icon="@drawable/app_icon.png" ... >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" ... >
        </activity>
        ...
    </application>
</manifest>



 • L’applicazione deve dichiarare tutti i suoi componenti in
   questo file.
 • Permessi, API level, caratteristiche hardware o software
   usate, altre libererie API.
Activities

• Ogni Activity rappresenta un unico schermo con una
  interfaccia utente.
• Ognuna è indipendente dalle altre.
• Un’Activity deve definire come main.
• Ogni Activity puo far partire un’altra Activity.
• Quando parte una nuova Activity quella precedente si
  ferma e si conserva dentro uno Stack.
• Per creare un Activity dobbiamo estendere classe astratto
  Activity e suoi metodi.
Intents
                  Intent
                           Component name

                               Action

                                Data

                              Category

                               Extra

                               Flags


• Componenti di una applicazione (Activities, Services e
  Broadcast receivers) vengono attivati attraverso
  messaggi, chiamate Intents.
Intent Filters




• Explicit vs Implicit
• Per definire quali Intents (impiciti) deve accettare un
  componente.
Communication
Communication
Summary

• AndroidManifest.xml definice tutti i componenti
  dell’applicazione.
• Ogni schermata dell’applicazione è un’Activity.
• Intents sono i messaggi che avviano i componenti.
• Usando Intents Filters si possono filtrare Intents non
  desiderati.
• Se ci sono operazioni lunghe che non richiedono
  interfaccia utente si possono usare i Services.
NFC e Android
NFC e Android Summary


• Dichiarazione permessi, Intents e Intent filters in Manifest
• Dispatch systems
  o Intent Dispatch System
  o Foreground Dispatch System


•   Codice: lettura di un tag NDEF
•   Codice: scrittura di un tag NDEF
•   Codice: Foreground dispatch system
•   Codice: Device to Device (Beam)
AndroidManifest


• Dichiarazione Activities
• Dichiarazione Intents
• Dichiarazione Intent filters
• Permessi
• API level
• Caratteristiche hardware
...
<activity>
  ...
  <intent-filter>

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

  </intent-filter>
  ...
</activity>
...




Discover NDEF Tag - Intent filter
...
<uses-permission
        android:name="android.permission.NFC" />

<uses-sdk 
        android:minSdkVersion="10"/>

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



Discover NDEF Tag - Permessi
NFC e Android - dispatch system
• Maggior parte delle APIs sono basate su NDEF
• The tag dispatch system
NFC e Android - dispatch system
• Maggior parte delle APIs sono basate su NDEF
• The tag dispatch system
Intent e Foreground Dispatch Systems


Intent Dispatch System
  • dichiara i filtri nel Manifest
  • fa partire l'applicazione anche se è spenta
Foreground Dispatch System
  • dichiara i filtri mentre in esecuzione
  • gestione esclusiva per i tag richiesti
NDEF Tag - Reading
public class MyNFCActivity extends Activity { 

  @Override 
  public void onNewIntent(Intent intent) { 

    // 1. prendiamo il tag toccato dall’intent ricevuto
    Parcelable[] raw = intent.getParcelableArrayExtra(
           NfcAdapter.EXTRA_NDEF_MESSAGES);

    // 2. prendiamo il primo record del primo messaggio
    NdefMessage message = (NdefMessage) raw[0]; 
    NdefRecord record = message.getRecords()[0]; 

    // 3. leggiamo il payload del record
    byte[] payload = record.getPayload(); 
    ...

  }

}

NDEF Tag - Reading
NDEF Tag - Writing
public class MyNFCActivity extends Activity {

  @Override
  public void onNewIntent(Intent intent) {

    // 1. Creiamo una istanza di Ndef usando il tag ricevuto
    Tag t = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    Ndef ndef = Ndef.get( t );
    ndef.connect();

      // 2. Creiamo un record Ndef inserendo i nostri dati
      final byte[] data = …;
      NdefRecord record = new NdefRecord(
              NdefRecord.TNF_MIME_MEDIA,
              "text/plain".getBytes(),
              new byte[0],
              data);

    // 3. Incapsuliamo il record dentro un messaggio Ndef
    NdefRecord[] records = new NdefRecord[]{record};
    NdefMessage message = new NdefMessage( records );    
    ndef.writeNdefMessage(message);
  }
}

NDEF Tag - Writing
Foreground dispatch




Vuoi evitare la finestra di dialogo
passando il tag direttamente
alla tua applicazione?
public void onCreate(Bundle savedInstanceState){

      // 1. Creiamo un PendingIntent per dare al sistema per eseguire operazioni
      Intent i = new Intent(this, getClass());
      i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
      pendingIntent = PendingIntent.getActivity(this, 0, i, 0);

      // 2. Creiamo un filtro che accetta tutti i MIME types
      IntentFilter ndef =
             new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
       ndef.addDataType("*/*");


     // 3. Teniamo salvati i filtri e le technologie tag che l’applicazione vuole gestire
     intentFiltersArray = new IntentFilter[] {ndef};
     techListsArray = new String[][] { new String[]
             { NfcF.class.getName() } };

 }


Foreground dispatch - create
public class MyNFCActivity extends Activity {

       @Override
       public void onResume() {
          super.onResume();
          // 1. Abilitiamo quando l’Activity prende il controllo
          nfcAdapter.enableForegroundDispatch(this, pendingIntent,
                 intentFiltersArray, techListsArray);
      }

       @Override
       public void onPause() {
          super.onPause();
          // 2. Disabilitiamo quando l’Activity perde il controllo
          nfcAdapter.disableForegroundDispatch(this);
      }

       @Override
       public void onNewIntent(Intent intent) {
          // 3. Usiamo l’Intent ricevuto allo stesso modo di Intent Dispatch System
      }
  }


Foreground dispatch - enable/disable
Device to Device
Device to Device

• Scambiare dati tra due device Android.
• Entrambi i dispositivi deve avere l’Activity in foreground e
  schermo sbloccato.
• Un messaggio NDEF alla volta.
• Basta utilizzare uno dei metodi
  – setNdefPushMessage()
  – setNdefPushMessageCallback()
public class MyNFCActivity extends Activity {

     @Override
     public void onCreate(Bundle savedInstanceState) {

         // 1. Creiamo un messaggio da spedire
         NdefMessage msg = new NdefMessage(...);

         nfcAdapter = NfcAdapter.getDefaultAdapter(this);

         // 2. Inseriamo il messaggio creato per spedire quando avvicina un device
         nfcAdapter.setNdefPushMessage(msg, this);
     }

 }




Device to Device - setNdefPushMessage()
public class MyNFCActivity extends Activity implements
     CreateNdefMessageCallback {

       @Override
       public void onCreate(Bundle savedInstanceState) {
         nfcAdapter = NfcAdapter.getDefaultAdapter(this);

           // 1. Abilitiamo Beam passando un Activity (this)
           // ed una imeplementazione di CreateNdefMessageCallback (this)
           nfcAdapter.setNdefPushMessageCallback(this, this);
       }

       @Override
       public NdefMessage createNdefMessage(NfcEvent event) {

           // 2. Creiamo un messaggio da spedire quando parte la cominucazione
           NdefMessage msg = new NdefMessage(...);
           return msg;
       }
   }


Device to Device - setNdefPushMessageCallback()
NFC e Android summary

• Dichiarazione permessi, Intents e Intent filters in Manifest
• Dispatch systems
  o Intent Dispatch System
  o Foreground Dispatch System


•   Codice: lettura di un tag NDEF
•   Codice: scrittura di un tag NDEF
•   Codice: Foreground dispatch system
•   Codice: Device to Device (Beam)
Android vs J2ME



        Android                      J2ME

  Intent lancia activity   PushRegistry lancia midlet
    P2P generic API             P2P generic API
P2P attraverso messaggi         P2P come bytes
         NDEF
Safeatwork
Sicurezza sul lavoro e
supporto alla certificazione

Usato dai manutentori e
operai specializzati
Backend web per la gestione
dei dati

Nata su j2me nel 2008
( Nokia 6212 )

www.safeatwork.it
Safeatwork

Download contenuti 
• Schede tecniche
• Istruzioni operative

Accesso ai contenuti basato
su NFC

Upload delle attività
• cosa ha fatto l'operatore?
• che procedure ha eseguito?
Safeatwork

Download contenuti 
• Schede tecniche
• Istruzioni operative

Accesso ai contenuti basato
su NFC

Upload delle attività
• cosa ha fatto l'operatore?
• che procedure ha eseguito?
Safeatwork
L'interazione prevede prevalentemente l'utilizzo della lettura dei
tag per accedere ai contenuti.
Safeatwork
L'interazione prevede prevalentemente l'utilizzo della lettura dei
tag per accedere ai contenuti.
Safeatwork in action
Safeatwork in action
Grazie
Android NFC developer documentation
http://developer.android.com/guide/topics/nfc/

Nfc Forum
http://www.nfc-forum.org/home/


Myti s.r.l.
@myti_news
www.myti.it

Ishan Fernando
@ifdo
i.fernando@myti.it

Contenu connexe

Similaire à Whymca nfc presentation

Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
Simple Network Management Protocol
Simple Network Management ProtocolSimple Network Management Protocol
Simple Network Management Protocolmichelemanzotti
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerAlessandro Mascherin
 
Sviluppare per Microsoft Band
Sviluppare per Microsoft BandSviluppare per Microsoft Band
Sviluppare per Microsoft BandMassimo Bonanni
 
Sviluppare per microsoft band
Sviluppare per microsoft bandSviluppare per microsoft band
Sviluppare per microsoft bandDotNetCampus
 
SVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDSVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDDotNetCampus
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoMavigex srl
 
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Massimo Bonanni
 
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
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidOpen Makers Italy
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Riccardo Mancinelli
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceMario Rossano
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open sourceMarco Ferrigno
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Filippo Matteo Riggio
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceNaLUG
 

Similaire à Whymca nfc presentation (20)

Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Simple Network Management Protocol
Simple Network Management ProtocolSimple Network Management Protocol
Simple Network Management Protocol
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
 
Sviluppare per Microsoft Band
Sviluppare per Microsoft BandSviluppare per Microsoft Band
Sviluppare per Microsoft Band
 
NFC, Bluetooth e comunicazione tra app
NFC, Bluetooth e comunicazione tra appNFC, Bluetooth e comunicazione tra app
NFC, Bluetooth e comunicazione tra app
 
Sviluppare per microsoft band
Sviluppare per microsoft bandSviluppare per microsoft band
Sviluppare per microsoft band
 
SVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDSVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BAND
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
 
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
 
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
 
Fmdp Total System Monitor
Fmdp Total System MonitorFmdp Total System Monitor
Fmdp Total System Monitor
 
Cac Es3 2009
Cac Es3 2009Cac Es3 2009
Cac Es3 2009
 
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open source
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
 

Plus de Myti S.r.l.

Myti CloudRM - Cloud Remote Monitor 2015
Myti CloudRM - Cloud Remote Monitor 2015Myti CloudRM - Cloud Remote Monitor 2015
Myti CloudRM - Cloud Remote Monitor 2015Myti S.r.l.
 
Myti Su Brescia Oggi 6 febbraio 2014
Myti Su Brescia Oggi 6 febbraio 2014Myti Su Brescia Oggi 6 febbraio 2014
Myti Su Brescia Oggi 6 febbraio 2014Myti S.r.l.
 
Presentazione skill itinere
Presentazione skill itinerePresentazione skill itinere
Presentazione skill itinereMyti S.r.l.
 
Gefran Gf Project Brochure
Gefran Gf Project BrochureGefran Gf Project Brochure
Gefran Gf Project BrochureMyti S.r.l.
 
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013Myti S.r.l.
 
Il documentale più usato al mondo
Il documentale più usato al mondoIl documentale più usato al mondo
Il documentale più usato al mondoMyti S.r.l.
 
Bleen- Integrazione sistemi
Bleen- Integrazione sistemiBleen- Integrazione sistemi
Bleen- Integrazione sistemiMyti S.r.l.
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
Bleen architecture
Bleen architectureBleen architecture
Bleen architectureMyti S.r.l.
 

Plus de Myti S.r.l. (12)

Myti CloudRM - Cloud Remote Monitor 2015
Myti CloudRM - Cloud Remote Monitor 2015Myti CloudRM - Cloud Remote Monitor 2015
Myti CloudRM - Cloud Remote Monitor 2015
 
Myti Su Brescia Oggi 6 febbraio 2014
Myti Su Brescia Oggi 6 febbraio 2014Myti Su Brescia Oggi 6 febbraio 2014
Myti Su Brescia Oggi 6 febbraio 2014
 
Bleen manuale
Bleen manualeBleen manuale
Bleen manuale
 
Presentazione skill itinere
Presentazione skill itinerePresentazione skill itinere
Presentazione skill itinere
 
Bleen CH Leali
Bleen   CH LealiBleen   CH Leali
Bleen CH Leali
 
Gefran Gf Project Brochure
Gefran Gf Project BrochureGefran Gf Project Brochure
Gefran Gf Project Brochure
 
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
 
Il documentale più usato al mondo
Il documentale più usato al mondoIl documentale più usato al mondo
Il documentale più usato al mondo
 
Bleen- Integrazione sistemi
Bleen- Integrazione sistemiBleen- Integrazione sistemi
Bleen- Integrazione sistemi
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
Bleen architecture
Bleen architectureBleen architecture
Bleen architecture
 
Bleen Short
Bleen ShortBleen Short
Bleen Short
 

Whymca nfc presentation

  • 1. NFC Programming in Android Ishan Fernando Myti @ifdo @myti_news i.fernando@myti.it www.myti.it
  • 2. NFC • Comunicazione contactless • Nuova interazione utente • Sicurezza
  • 4. NFC (Near Field Communication) • E' una tecnologia wireless a corto raggio (< 10cm) • Si opera alla frequenza di 13,56MHz • Può raggiungere una velocità di trasmissione massima di 424 kbit/s
  • 5. RFID to NFC E' una evoluzione di RFID (Radio Frequency Identification)
  • 6. RFID vs NFC RFID NFC estenzione di RFID distanze lunghe (3 ~ 100m) distanze corte (< 10cm) qualsiasi frequenza 13.56 MHz usa nei vari ambiti usa nell’ambito di sicurezza nei celluari
  • 8. NDEF (NFC Data Exchange Format) NDEF è un formato di incapsulamento dei messaggi (dati) per scambiare informazioni via NFC.
  • 9. NDEF (NFC Data Exchange Format) passive mode active mode Questo formato consente di scambiare informazioni  • tra due NFC Forum Devices  • tra un NFC Forum Device e un NFC Forum Tag.
  • 10. NDEF (NFC Data Exchange Format) Message = n * Records Records =  Type + Size +  Payload (binary data)
  • 11. NDEF (NFC Data Exchange Format) I messaggi NDEF possono essere di tre tipi :  URI  il contenuto è un link MIME  il contenuto è specificato da un mime type NFC-specific types  utilizzi specifici per diverse tecnologie http://www.nfc-forum.org/specs/spec_list/
  • 12. NFC e NDEF summary NFC è una tecnologia NDEF è un formato di wireless a corto raggio che encapsulamento dei dati consente di creare una comunicazione bidirezionale
  • 13. NFC Technology summary • NFC o Wireless a corto raggio (< 10cm) o Frequenza : 13,56MHz  o Velocità di trasmissione massima : 424 Kbit/s. o  E' una evoluzione di RFID • NDEF o Incapsulamento dei messaggi o NFC Forum Device <=> NFC Forum Device  o NFC Forum Device <=> NFC Forum Tag o Message = n * Records o Records = Type + Size + Payload (binary data) o Types: URI, MIME o NFC-specific types
  • 16. Android Application Android Application AndroidManifest.xml Intents Activities Services Broadcast receivers Content providers
  • 17. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest ... >     <application android:icon="@drawable/app_icon.png" ... >         <activity android:name="com.example.project.ExampleActivity"                   android:label="@string/example_label" ... >         </activity>         ...     </application> </manifest> • L’applicazione deve dichiarare tutti i suoi componenti in questo file. • Permessi, API level, caratteristiche hardware o software usate, altre libererie API.
  • 18. Activities • Ogni Activity rappresenta un unico schermo con una interfaccia utente. • Ognuna è indipendente dalle altre. • Un’Activity deve definire come main. • Ogni Activity puo far partire un’altra Activity. • Quando parte una nuova Activity quella precedente si ferma e si conserva dentro uno Stack. • Per creare un Activity dobbiamo estendere classe astratto Activity e suoi metodi.
  • 19. Intents Intent Component name Action Data Category Extra Flags • Componenti di una applicazione (Activities, Services e Broadcast receivers) vengono attivati attraverso messaggi, chiamate Intents.
  • 20. Intent Filters • Explicit vs Implicit • Per definire quali Intents (impiciti) deve accettare un componente.
  • 23. Summary • AndroidManifest.xml definice tutti i componenti dell’applicazione. • Ogni schermata dell’applicazione è un’Activity. • Intents sono i messaggi che avviano i componenti. • Usando Intents Filters si possono filtrare Intents non desiderati. • Se ci sono operazioni lunghe che non richiedono interfaccia utente si possono usare i Services.
  • 25. NFC e Android Summary • Dichiarazione permessi, Intents e Intent filters in Manifest • Dispatch systems o Intent Dispatch System o Foreground Dispatch System • Codice: lettura di un tag NDEF • Codice: scrittura di un tag NDEF • Codice: Foreground dispatch system • Codice: Device to Device (Beam)
  • 26. AndroidManifest • Dichiarazione Activities • Dichiarazione Intents • Dichiarazione Intent filters • Permessi • API level • Caratteristiche hardware
  • 27. ... <activity>   ...   <intent-filter>     <action          android:name="android.nfc.action.NDEF_DISCOVERED"/>     <category          android:name="android.intent.category.DEFAULT"/>     <data          android:mimeType="text/plain" />   </intent-filter>   ... </activity> ... Discover NDEF Tag - Intent filter
  • 28. ... <uses-permission         android:name="android.permission.NFC" /> <uses-sdk          android:minSdkVersion="10"/> <uses-feature          android:name="android.hardware.nfc"          android:required="true" /> ... Discover NDEF Tag - Permessi
  • 29. NFC e Android - dispatch system • Maggior parte delle APIs sono basate su NDEF • The tag dispatch system
  • 30. NFC e Android - dispatch system • Maggior parte delle APIs sono basate su NDEF • The tag dispatch system
  • 31. Intent e Foreground Dispatch Systems Intent Dispatch System • dichiara i filtri nel Manifest • fa partire l'applicazione anche se è spenta Foreground Dispatch System • dichiara i filtri mentre in esecuzione • gestione esclusiva per i tag richiesti
  • 33. public class MyNFCActivity extends Activity {    @Override    public void onNewIntent(Intent intent) {  // 1. prendiamo il tag toccato dall’intent ricevuto     Parcelable[] raw = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); // 2. prendiamo il primo record del primo messaggio     NdefMessage message = (NdefMessage) raw[0];      NdefRecord record = message.getRecords()[0];  // 3. leggiamo il payload del record     byte[] payload = record.getPayload();      ...   } } NDEF Tag - Reading
  • 35. public class MyNFCActivity extends Activity {   @Override   public void onNewIntent(Intent intent) { // 1. Creiamo una istanza di Ndef usando il tag ricevuto     Tag t = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);     Ndef ndef = Ndef.get( t );     ndef.connect(); // 2. Creiamo un record Ndef inserendo i nostri dati     final byte[] data = …;     NdefRecord record = new NdefRecord(             NdefRecord.TNF_MIME_MEDIA,             "text/plain".getBytes(),             new byte[0],             data); // 3. Incapsuliamo il record dentro un messaggio Ndef     NdefRecord[] records = new NdefRecord[]{record};     NdefMessage message = new NdefMessage( records );         ndef.writeNdefMessage(message);   } } NDEF Tag - Writing
  • 36. Foreground dispatch Vuoi evitare la finestra di dialogo passando il tag direttamente alla tua applicazione?
  • 37. public void onCreate(Bundle savedInstanceState){ // 1. Creiamo un PendingIntent per dare al sistema per eseguire operazioni Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(this, 0, i, 0); // 2. Creiamo un filtro che accetta tutti i MIME types IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); ndef.addDataType("*/*"); // 3. Teniamo salvati i filtri e le technologie tag che l’applicazione vuole gestire intentFiltersArray = new IntentFilter[] {ndef}; techListsArray = new String[][] { new String[] { NfcF.class.getName() } }; } Foreground dispatch - create
  • 38. public class MyNFCActivity extends Activity { @Override public void onResume() { super.onResume(); // 1. Abilitiamo quando l’Activity prende il controllo nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } @Override public void onPause() { super.onPause(); // 2. Disabilitiamo quando l’Activity perde il controllo nfcAdapter.disableForegroundDispatch(this); } @Override public void onNewIntent(Intent intent) { // 3. Usiamo l’Intent ricevuto allo stesso modo di Intent Dispatch System } } Foreground dispatch - enable/disable
  • 40. Device to Device • Scambiare dati tra due device Android. • Entrambi i dispositivi deve avere l’Activity in foreground e schermo sbloccato. • Un messaggio NDEF alla volta. • Basta utilizzare uno dei metodi – setNdefPushMessage() – setNdefPushMessageCallback()
  • 41. public class MyNFCActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { // 1. Creiamo un messaggio da spedire NdefMessage msg = new NdefMessage(...); nfcAdapter = NfcAdapter.getDefaultAdapter(this); // 2. Inseriamo il messaggio creato per spedire quando avvicina un device nfcAdapter.setNdefPushMessage(msg, this); } } Device to Device - setNdefPushMessage()
  • 42. public class MyNFCActivity extends Activity implements CreateNdefMessageCallback { @Override public void onCreate(Bundle savedInstanceState) { nfcAdapter = NfcAdapter.getDefaultAdapter(this); // 1. Abilitiamo Beam passando un Activity (this) // ed una imeplementazione di CreateNdefMessageCallback (this) nfcAdapter.setNdefPushMessageCallback(this, this); } @Override public NdefMessage createNdefMessage(NfcEvent event) { // 2. Creiamo un messaggio da spedire quando parte la cominucazione NdefMessage msg = new NdefMessage(...); return msg; } } Device to Device - setNdefPushMessageCallback()
  • 43. NFC e Android summary • Dichiarazione permessi, Intents e Intent filters in Manifest • Dispatch systems o Intent Dispatch System o Foreground Dispatch System • Codice: lettura di un tag NDEF • Codice: scrittura di un tag NDEF • Codice: Foreground dispatch system • Codice: Device to Device (Beam)
  • 44. Android vs J2ME Android J2ME Intent lancia activity PushRegistry lancia midlet P2P generic API P2P generic API P2P attraverso messaggi P2P come bytes NDEF
  • 45.
  • 46. Safeatwork Sicurezza sul lavoro e supporto alla certificazione Usato dai manutentori e operai specializzati Backend web per la gestione dei dati Nata su j2me nel 2008 ( Nokia 6212 ) www.safeatwork.it
  • 47. Safeatwork Download contenuti  • Schede tecniche • Istruzioni operative Accesso ai contenuti basato su NFC Upload delle attività • cosa ha fatto l'operatore? • che procedure ha eseguito?
  • 48. Safeatwork Download contenuti  • Schede tecniche • Istruzioni operative Accesso ai contenuti basato su NFC Upload delle attività • cosa ha fatto l'operatore? • che procedure ha eseguito?
  • 49. Safeatwork L'interazione prevede prevalentemente l'utilizzo della lettura dei tag per accedere ai contenuti.
  • 50. Safeatwork L'interazione prevede prevalentemente l'utilizzo della lettura dei tag per accedere ai contenuti.
  • 53. Grazie Android NFC developer documentation http://developer.android.com/guide/topics/nfc/ Nfc Forum http://www.nfc-forum.org/home/ Myti s.r.l. @myti_news www.myti.it Ishan Fernando @ifdo i.fernando@myti.it