Whymca nfc presentation

Preview:

DESCRIPTION

NFC Programming in Android

Citation preview

NFC Programming in Android

Ishan Fernando@ifdo

i.fernando@myti.it

Myti@myti_newswww.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)

Questo formato consente di scambiare informazioni • tra due NFC Forum Devices • tra un NFC Forum Device e un NFC Forum Tag.

active modepassive mode

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

NDEF è un formato di encapsulamento dei dati

NFC è una tecnologia wireless a corto raggio che

consente di creare una comunicazione bidirezionale

NFC Technology summary

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

• NDEFo Incapsulamento dei messaggioNFC Forum Device <=> NFC Forum Device oNFC Forum Device <=> NFC Forum TagoMessage = n * RecordsoRecords = 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

• L’applicazione deve dichiarare tutti i suoi componenti in questo file.

• Permessi, API level, caratteristiche hardware o software usate, altre libererie API.

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

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

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

Component name

Action

Data

Category

Extra

Flags

Intent

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 Systemo 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 gestireintentFiltersArray = 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 {

@Overridepublic void onCreate(Bundle savedInstanceState) {

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

nfcAdapter = NfcAdapter.getDefaultAdapter(this);

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

}

}

Device to Device - setNdefPushMessage()

public class MyNFCActivity extends Activity implements CreateNdefMessageCallback {

@Overridepublic 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);

}

@Overridepublic NdefMessage createNdefMessage(NfcEvent event) {

// 2. Creiamo un messaggio da spedire quando parte la cominucazioneNdefMessage 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 Systemo 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 midletP2P generic API P2P generic API

P2P attraverso messaggi NDEF

P2P come bytes

Safeatwork

Sicurezza sul lavoro e supporto alla certificazione

Usato dai manutentori e operai specializzatiBackend 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?

SafeatworkL'interazione prevede prevalentemente l'utilizzo della lettura dei tag per accedere ai contenuti.

SafeatworkL'interazione prevede prevalentemente l'utilizzo della lettura dei tag per accedere ai contenuti.

Safeatwork in action

Safeatwork in action

GrazieAndroid NFC developer documentationhttp://developer.android.com/guide/topics/nfc/

Nfc Forumhttp://www.nfc-forum.org/home/

Myti s.r.l.@myti_newswww.myti.it

Ishan Fernando@ifdoi.fernando@myti.it

Recommended