SlideShare a Scribd company logo
1 of 67
Download to read offline
NFC Programming in Android

         Ishan Fernando
                @ifdo
         i.fernando@myti.it

            Myti s.r.l.
            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
NFC (Near Field Communication)




 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.
Activities
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.
Services


• Per gestire operazioni
  lunghe in background
  senza intefaccia utente.
• Servizi hanno due formi:
  Started e Bound
Services


• Per gestire operazioni
  lunghe in background
  senza intefaccia utente.
• Servizi hanno due formi:
  Started e Bound
Services


• Per gestire operazioni
  lunghe in background
  senza intefaccia utente.
• Servizi hanno due formi:
  Started e Bound
Services


• Per gestire operazioni
  lunghe in background
  senza intefaccia utente.
• Servizi hanno due formi:
  Started e Bound
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
Discover NDEF Tag - Intent filter
AndroidManifest.xml


...
<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 - Permessi
AndroidManifest.xml


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

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

<uses-feature 
        android:name="android.hardware.nfc" 
        android:required="true" />
...
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) { 

    Parcelable[] raw = intent.getParcelableArrayExtra(        
1
        NfcAdapter.EXTRA_NDEF_MESSAGES);

    NdefMessage message = (NdefMessage) raw[0]; 
2
    NdefRecord record = message.getRecords()[0]; 
    byte[] payload = record.getPayload(); 
    ...

  }

}
NDEF Tag - Reading

 1

Parcelable[] raw =
 intent.getParcelableArrayExtra(
  NfcAdapter.EXTRA_NDEF_MESSAGES);




• Prendiamo il tag toccato dallʼIntent ricevuto.
NDEF Tag - Reading

2

NdefMessage message = (NdefMessage) raw[0]; 
NdefRecord record = message.getRecords()[0]; 
byte[] payload = record.getPayload();


• Prendiamo il primo record del primo messaggio.
• Leggiamo il payload del record.
NDEF Tag - Writing

public class MyNFCActivity extends Activity {

  @Override
  public void onNewIntent(Intent intent) {
    Tag t = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
 1
    Ndef ndef = Ndef.get( t );
    ndef.connect();
    final byte[] data = …;
    NdefRecord record = new NdefRecord(
            NdefRecord.TNF_MIME_MEDIA,
 2
            "text/plain".getBytes(),
            new byte[0],
            data);
    NdefRecord[] records = new NdefRecord[]{record};
 3
    NdefMessage message = new NdefMessage( records );    
    ndef.writeNdefMessage(message);
  }
}
NDEF Tag - Writing
1
Tag t = intent.getParcelableExtra(
 NfcAdapter.EXTRA_TAG);
Ndef ndef = Ndef.get( t );
ndef.connect();
    




• Prendiamo il tag toccato dallʼIntent ricevuto.
• Creiamo una istanza Ndef usando quel tag.
NDEF Tag - Writing
2

final byte[] data = …;
NdefRecord record = new NdefRecord(
  NdefRecord.TNF_MIME_MEDIA,
  "text/plain".getBytes(),
  new byte[0],
  data);


• Creiamo un record Ndef inserendo i nostri dati come MIME
    type text/plain.
NDEF Tag - Writing
3
NdefRecord[] records = 
      new NdefRecord[]{record};
NdefMessage message =
      new NdefMessage( records );    
ndef.writeNdefMessage(message);



• Incapsuliamo il record appena creato dentro un messaggio
  Ndef.
• Scriviamo il nostro messaggio sul tag usando lʼinstanza di
  Ndef che abbiamo creato prima.
Foreground dispatch
public class MyNFCActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        Intent i = new Intent(this, getClass());
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent =
           PendingIntent.getActivity(this, 0, i, 0);
        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        intentFiltersArray = new IntentFilter[] {ndef};
        techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
    }

    @Override
    public void onPause() {
        super.onPause();
        mAdapter.disableForegroundDispatch(this);
    }

    @Override
    public void onResume() {
        super.onResume();
        mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
    }

    @Override
    public void onNewIntent(Intent intent) {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        //do something with tagFromIntent
    }
}
Foreground dispatch
public class MyNFCActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        Intent i = new Intent(this, getClass());
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent =
           PendingIntent.getActivity(this, 0, i, 0);
        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        intentFiltersArray = new IntentFilter[] {ndef};
        techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
    }

    @Override
    public void onPause() {
        super.onPause();
        mAdapter.disableForegroundDispatch(this);
    }

    @Override
    public void onResume() {
        super.onResume();
        mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
    }

    @Override
    public void onNewIntent(Intent intent) {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        //do something with tagFromIntent
    }
}
Foreground dispatch
public void onCreate(Bundle savedInstanceState){
   Intent i = new Intent(this, getClass());
   i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

1   PendingIntent pendingIntent =
       PendingIntent.getActivity(this, 0, i, 0);
    IntentFilter ndef =
      new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);

    try {
      ndef.addDataType("*/*");
2   } catch (MalformedMimeTypeException e) {
      throw new RuntimeException("fail", e);
    }

    intentFiltersArray = new IntentFilter[] {ndef};
3   techListsArray =
      new String[][] { new String[] { NfcF.class.getName() } };
}
Foreground dispatch
 1

Intent i = new Intent(this, getClass());
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pendingIntent =
  PendingIntent.getActivity(this, 0, i, 0);




• Usando questo sistema popola i dati del tag quando viene
  scansionato.
Foreground dispatch
 2

IntentFilter ndef =
  new IntentFilter(
    NfcAdapter.ACTION_NDEF_DISCOVERED);

try {
  ndef.addDataType("*/*");
} catch (MalformedMimeTypeException e) {
  throw new RuntimeException("fail", e);
}

• Filtro che accetta tutti i Mime types.
Foreground dispatch
 3
intentFiltersArray =
  new IntentFilter[] {ndef};

techListsArray =
  new String[][] {
    new String[] {
      Ndef.class.getName()
    }
  };
• Teniamo i filtri salvati in una variabile globale per usarli
  quando abilitiamo dispatch system.
• Impostiamo anche unʼarray con le technologie tag che
  lʼapplicazione vuole gestire.
Foreground dispatch
public class MyNFCActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        Intent i = new Intent(this, getClass());
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent =
           PendingIntent.getActivity(this, 0, i, 0);
        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        intentFiltersArray = new IntentFilter[] {ndef};
        techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
    }

    @Override
    public void onPause() {

                                                                                               1
        super.onPause();
        mAdapter.disableForegroundDispatch(this);
    }

    @Override
    public void onResume() {
        super.onResume();
        mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
    }                                                                                          2
    @Override
    public void onNewIntent(Intent intent) {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        //do something with tagFromIntent                                                      3
    }
}
Foreground dispatch
public class MyNFCActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        Intent i = new Intent(this, getClass());
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent =
           PendingIntent.getActivity(this, 0, i, 0);
        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        intentFiltersArray = new IntentFilter[] {ndef};
        techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
    }

    @Override
    public void onPause() {

                                                                                               1
        super.onPause();
        mAdapter.disableForegroundDispatch(this);
    }

    @Override
    public void onResume() {
        super.onResume();
        mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
    }                                                                                          2
    @Override
    public void onNewIntent(Intent intent) {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        //do something with tagFromIntent                                                      3
    }
}
Foreground dispatch
 1
@Override
public void onResume() {
  super.onResume();
  NfcAdapter.getDefaultAdapter(this)
    .enableForegroundDispatch(
      this,
      pendingIntent,
      intentFiltersArray,
      techListsArray);
}

• Abilitiamo foreground dispatch system quando lʼActivity
  prende il controllo.
Foreground dispatch
 2

@Override
public void onPause() {
  super.onPause();
  NfcAdapter.getDefaultAdapter(this)
    .disableForegroundDispatch(this);
}




• Disabilitiamo foreground dispatch system quando lʼActivity
  perde il controllo.
Foreground dispatch
 3
@Override
public void onNewIntent(Intent intent) {
  Tag tagFromIntent =
    intent.getParcelableExtra(
      NfcAdapter.EXTRA_TAG);
  //do something with tagFromIntent
}




• Riceviamo lʼIntent allo stesso modo di intent dispatch system.
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()
Device to Device
setNdefPushMessage()

public class MyNFCActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    NdefMessage msg = new NdefMessage(...);
    mNfcAdapter =
      NfcAdapter.getDefaultAdapter(this);
    mNfcAdapter.setNdefPushMessage(msg, this);
  }
}
Device to Device
setNdefPushMessageCallback()

    public class MyNFCActivity extends Activity implements
      CreateNdefMessageCallback {

        @Override
        public void onCreate(Bundle savedInstanceState) {
1         mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
          mNfcAdapter.setNdefPushMessageCallback(this, this);
        }

        @Override
        public NdefMessage createNdefMessage(NfcEvent event) {
2         NdefMessage msg = new NdefMessage(...);
          return msg;
        }
    }
Device to Device
 1

@Override
public void onCreate(
  Bundle savedInstanceState) {
    mNfcAdapter =
      NfcAdapter.getDefaultAdapter(this);
    mNfcAdapter.setNdefPushMessageCallback(
      this, this);
}

 Abilitiamo Beam usando il metodo
 setNdefPushMessageCallback
 passando come parametri lʼActivity ed
 una implementazione di
 NfcAdapter.CreateNdefMessageCallback.
Device to Device
 2

@Override
public NdefMessage createNdefMessage(
  NfcEvent event) {
    NdefMessage msg = new NdefMessage(...);
    return msg;
}



 Creiamo un messaggio da spedire quando avvicina un device
 e parte la comunicazione.
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)
Safe at work
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
www.myti.it

Ishan Fernando
@ifdo
i.fernando@myti.it

More Related Content

Similar to WEBdeBS NFC Presentation

Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationWhymca
 
Sviluppare per Microsoft Band
Sviluppare per Microsoft BandSviluppare per Microsoft Band
Sviluppare per Microsoft BandMassimo Bonanni
 
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
 
Simple Network Management Protocol
Simple Network Management ProtocolSimple Network Management Protocol
Simple Network Management Protocolmichelemanzotti
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
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
 
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
 
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
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Analisi delle dipendenze architetturali dei servizi di autenticazione SPID
Analisi delle dipendenze architetturali dei servizi di autenticazione SPIDAnalisi delle dipendenze architetturali dei servizi di autenticazione SPID
Analisi delle dipendenze architetturali dei servizi di autenticazione SPIDLeonardoSimonini
 
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
 
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
 
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
 

Similar to WEBdeBS NFC Presentation (20)

Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentation
 
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
 
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
 
Simple Network Management Protocol
Simple Network Management ProtocolSimple Network Management Protocol
Simple Network Management Protocol
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
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
 
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
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Analisi delle dipendenze architetturali dei servizi di autenticazione SPID
Analisi delle dipendenze architetturali dei servizi di autenticazione SPIDAnalisi delle dipendenze architetturali dei servizi di autenticazione SPID
Analisi delle dipendenze architetturali dei servizi di autenticazione SPID
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
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
 
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
 
Cac Es3 2009
Cac Es3 2009Cac Es3 2009
Cac Es3 2009
 
Fmdp Total System Monitor
Fmdp Total System MonitorFmdp Total System Monitor
Fmdp Total System Monitor
 

More from 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.
 
DINAL Ingrosso Tablet APP
DINAL Ingrosso Tablet APPDINAL Ingrosso Tablet APP
DINAL Ingrosso Tablet APPMyti 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.
 
Bleen - Tutto comincia da una ricerca
Bleen - Tutto comincia da una ricercaBleen - Tutto comincia da una ricerca
Bleen - Tutto comincia da una ricercaMyti 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.
 
Quale è il documentale più usato al mondo?
Quale è il documentale più usato al mondo?Quale è il documentale più usato al mondo?
Quale è il documentale più usato al mondo?Myti S.r.l.
 
Bleen architecture
Bleen architectureBleen architecture
Bleen architectureMyti S.r.l.
 
Brochure Simsa Eng
Brochure Simsa EngBrochure Simsa Eng
Brochure Simsa EngMyti S.r.l.
 

More from Myti S.r.l. (15)

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
 
DINAL Ingrosso Tablet APP
DINAL Ingrosso Tablet APPDINAL Ingrosso Tablet APP
DINAL Ingrosso Tablet APP
 
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
 
Bleen - Tutto comincia da una ricerca
Bleen - Tutto comincia da una ricercaBleen - Tutto comincia da una ricerca
Bleen - Tutto comincia da una ricerca
 
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
 
Quale è il documentale più usato al mondo?
Quale è il documentale più usato al mondo?Quale è il documentale più usato al mondo?
Quale è il documentale più usato al mondo?
 
Bleen architecture
Bleen architectureBleen architecture
Bleen architecture
 
Brochure Simsa Eng
Brochure Simsa EngBrochure Simsa Eng
Brochure Simsa Eng
 
Bleen Short
Bleen ShortBleen Short
Bleen Short
 

Recently uploaded

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Recently uploaded (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

WEBdeBS NFC Presentation

  • 1. NFC Programming in Android Ishan Fernando @ifdo i.fernando@myti.it Myti s.r.l. 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. NFC (Near Field Communication) 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.
  • 20. Intents Intent Component name Action Data Category Extra Flags • Componenti di una applicazione (Activities, Services e Broadcast receivers) vengono attivati attraverso messaggi, chiamate Intents.
  • 21. Intent Filters • Explicit vs Implicit • Per definire quali Intents (impiciti) deve accettare un componente.
  • 22. Services • Per gestire operazioni lunghe in background senza intefaccia utente. • Servizi hanno due formi: Started e Bound
  • 23. Services • Per gestire operazioni lunghe in background senza intefaccia utente. • Servizi hanno due formi: Started e Bound
  • 24. Services • Per gestire operazioni lunghe in background senza intefaccia utente. • Servizi hanno due formi: Started e Bound
  • 25. Services • Per gestire operazioni lunghe in background senza intefaccia utente. • Servizi hanno due formi: Started e Bound
  • 26. 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.
  • 28. 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)
  • 29. AndroidManifest • Dichiarazione Activities • Dichiarazione Intents • Dichiarazione Intent filters • Permessi • API level • Caratteristiche hardware
  • 30. Discover NDEF Tag - Intent filter AndroidManifest.xml ... <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> ...
  • 31. Discover NDEF Tag - Permessi AndroidManifest.xml ... <uses-permission         android:name="android.permission.NFC" /> <uses-sdk          android:minSdkVersion="10"/> <uses-feature          android:name="android.hardware.nfc"          android:required="true" /> ...
  • 32. NFC e Android - dispatch system • Maggior parte delle APIs sono basate su NDEF • The tag dispatch system
  • 33. NFC e Android - dispatch system • Maggior parte delle APIs sono basate su NDEF • The tag dispatch system
  • 34. 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
  • 35. NDEF Tag - Reading public class MyNFCActivity extends Activity {    @Override    public void onNewIntent(Intent intent) {      Parcelable[] raw = intent.getParcelableArrayExtra(         1         NfcAdapter.EXTRA_NDEF_MESSAGES);     NdefMessage message = (NdefMessage) raw[0];  2     NdefRecord record = message.getRecords()[0];      byte[] payload = record.getPayload();      ...   } }
  • 36. NDEF Tag - Reading 1 Parcelable[] raw = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); • Prendiamo il tag toccato dallʼIntent ricevuto.
  • 37. NDEF Tag - Reading 2 NdefMessage message = (NdefMessage) raw[0];  NdefRecord record = message.getRecords()[0];  byte[] payload = record.getPayload(); • Prendiamo il primo record del primo messaggio. • Leggiamo il payload del record.
  • 38. NDEF Tag - Writing public class MyNFCActivity extends Activity {   @Override   public void onNewIntent(Intent intent) {     Tag t = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 1     Ndef ndef = Ndef.get( t );     ndef.connect();     final byte[] data = …;     NdefRecord record = new NdefRecord(             NdefRecord.TNF_MIME_MEDIA, 2             "text/plain".getBytes(),             new byte[0],             data);     NdefRecord[] records = new NdefRecord[]{record}; 3     NdefMessage message = new NdefMessage( records );         ndef.writeNdefMessage(message);   } }
  • 39. NDEF Tag - Writing 1 Tag t = intent.getParcelableExtra( NfcAdapter.EXTRA_TAG); Ndef ndef = Ndef.get( t ); ndef.connect();      • Prendiamo il tag toccato dallʼIntent ricevuto. • Creiamo una istanza Ndef usando quel tag.
  • 40. NDEF Tag - Writing 2 final byte[] data = …; NdefRecord record = new NdefRecord( NdefRecord.TNF_MIME_MEDIA, "text/plain".getBytes(), new byte[0], data); • Creiamo un record Ndef inserendo i nostri dati come MIME type text/plain.
  • 41. NDEF Tag - Writing 3 NdefRecord[] records =  new NdefRecord[]{record}; NdefMessage message = new NdefMessage( records );     ndef.writeNdefMessage(message); • Incapsuliamo il record appena creato dentro un messaggio Ndef. • Scriviamo il nostro messaggio sul tag usando lʼinstanza di Ndef che abbiamo creato prima.
  • 42. Foreground dispatch public class MyNFCActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState){ Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } intentFiltersArray = new IntentFilter[] {ndef}; techListsArray = new String[][] { new String[] { NfcF.class.getName() } }; } @Override public void onPause() { super.onPause(); mAdapter.disableForegroundDispatch(this); } @Override public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } @Override public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); //do something with tagFromIntent } }
  • 43. Foreground dispatch public class MyNFCActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState){ Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } intentFiltersArray = new IntentFilter[] {ndef}; techListsArray = new String[][] { new String[] { NfcF.class.getName() } }; } @Override public void onPause() { super.onPause(); mAdapter.disableForegroundDispatch(this); } @Override public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } @Override public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); //do something with tagFromIntent } }
  • 44. Foreground dispatch public void onCreate(Bundle savedInstanceState){ Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 1 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); 2 } catch (MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } intentFiltersArray = new IntentFilter[] {ndef}; 3 techListsArray = new String[][] { new String[] { NfcF.class.getName() } }; }
  • 45. Foreground dispatch 1 Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); • Usando questo sistema popola i dati del tag quando viene scansionato.
  • 46. Foreground dispatch 2 IntentFilter ndef = new IntentFilter( NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } • Filtro che accetta tutti i Mime types.
  • 47. Foreground dispatch 3 intentFiltersArray = new IntentFilter[] {ndef}; techListsArray = new String[][] { new String[] { Ndef.class.getName() } }; • Teniamo i filtri salvati in una variabile globale per usarli quando abilitiamo dispatch system. • Impostiamo anche unʼarray con le technologie tag che lʼapplicazione vuole gestire.
  • 48. Foreground dispatch public class MyNFCActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState){ Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } intentFiltersArray = new IntentFilter[] {ndef}; techListsArray = new String[][] { new String[] { NfcF.class.getName() } }; } @Override public void onPause() { 1 super.onPause(); mAdapter.disableForegroundDispatch(this); } @Override public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } 2 @Override public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); //do something with tagFromIntent 3 } }
  • 49. Foreground dispatch public class MyNFCActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState){ Intent i = new Intent(this, getClass()); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (MalformedMimeTypeException e) { throw new RuntimeException("fail", e); } intentFiltersArray = new IntentFilter[] {ndef}; techListsArray = new String[][] { new String[] { NfcF.class.getName() } }; } @Override public void onPause() { 1 super.onPause(); mAdapter.disableForegroundDispatch(this); } @Override public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } 2 @Override public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); //do something with tagFromIntent 3 } }
  • 50. Foreground dispatch 1 @Override public void onResume() { super.onResume(); NfcAdapter.getDefaultAdapter(this) .enableForegroundDispatch( this, pendingIntent, intentFiltersArray, techListsArray); } • Abilitiamo foreground dispatch system quando lʼActivity prende il controllo.
  • 51. Foreground dispatch 2 @Override public void onPause() { super.onPause(); NfcAdapter.getDefaultAdapter(this) .disableForegroundDispatch(this); } • Disabilitiamo foreground dispatch system quando lʼActivity perde il controllo.
  • 52. Foreground dispatch 3 @Override public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra( NfcAdapter.EXTRA_TAG); //do something with tagFromIntent } • Riceviamo lʼIntent allo stesso modo di intent dispatch system.
  • 53. 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()
  • 54. Device to Device setNdefPushMessage() public class MyNFCActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { NdefMessage msg = new NdefMessage(...); mNfcAdapter = NfcAdapter.getDefaultAdapter(this); mNfcAdapter.setNdefPushMessage(msg, this); } }
  • 55. Device to Device setNdefPushMessageCallback() public class MyNFCActivity extends Activity implements CreateNdefMessageCallback { @Override public void onCreate(Bundle savedInstanceState) { 1 mNfcAdapter = NfcAdapter.getDefaultAdapter(this); mNfcAdapter.setNdefPushMessageCallback(this, this); } @Override public NdefMessage createNdefMessage(NfcEvent event) { 2 NdefMessage msg = new NdefMessage(...); return msg; } }
  • 56. Device to Device 1 @Override public void onCreate( Bundle savedInstanceState) { mNfcAdapter = NfcAdapter.getDefaultAdapter(this); mNfcAdapter.setNdefPushMessageCallback( this, this); } Abilitiamo Beam usando il metodo setNdefPushMessageCallback passando come parametri lʼActivity ed una implementazione di NfcAdapter.CreateNdefMessageCallback.
  • 57. Device to Device 2 @Override public NdefMessage createNdefMessage( NfcEvent event) { NdefMessage msg = new NdefMessage(...); return msg; } Creiamo un messaggio da spedire quando avvicina un device e parte la comunicazione.
  • 58. 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)
  • 60. 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
  • 61. 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?
  • 62. 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?
  • 63. Safeatwork L'interazione prevede prevalentemente l'utilizzo della lettura dei tag per accedere ai contenuti.
  • 64. Safeatwork L'interazione prevede prevalentemente l'utilizzo della lettura dei tag per accedere ai contenuti.
  • 67. Grazie Android NFC developer documentation http://developer.android.com/guide/topics/nfc/ Nfc Forum http://www.nfc-forum.org/home/ Myti www.myti.it Ishan Fernando @ifdo i.fernando@myti.it