53
NFC Programming in Android Ishan Fernando @ifdo [email protected] Myti @myti_news www.myti.it

Android - ishan fernando - android nfc presentation

  • Upload
    whymca

  • View
    1.261

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 2: Android - ishan fernando - android nfc presentation

NFC

• Comunicazione contactless• Nuova interazione utente • Sicurezza

Page 3: Android - ishan fernando - android nfc presentation

NFC (Near Field Communication)

Page 4: Android - ishan fernando - android nfc presentation

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

Page 5: Android - ishan fernando - android nfc presentation

RFID to NFC

E' una evoluzione di RFID (Radio Frequency Identification)

Page 6: Android - ishan fernando - android nfc presentation

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

Page 7: Android - ishan fernando - android nfc presentation

Storia

Page 8: Android - ishan fernando - android nfc presentation

NDEF (NFC Data Exchange Format)

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

Page 9: Android - ishan fernando - android nfc presentation

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

Page 10: Android - ishan fernando - android nfc presentation

NDEF (NFC Data Exchange Format)

Message = n * Records

Records = Type +Size + 

Payload (binary data)

Page 11: Android - ishan fernando - android nfc presentation

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/

Page 12: Android - ishan fernando - android nfc presentation

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

Page 13: Android - ishan fernando - android nfc presentation

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

Page 14: Android - ishan fernando - android nfc presentation

Android

Page 15: Android - ishan fernando - android nfc presentation

Android

Page 16: Android - ishan fernando - android nfc presentation

Android Application

Android Application

AndroidManifest.xml

Intents

Activities Services

Broadcast receivers Content providers

Page 17: Android - ishan fernando - android nfc presentation

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>

Page 18: Android - ishan fernando - android nfc presentation

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.

Page 19: Android - ishan fernando - android nfc presentation

Intents

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

Component name

Action

Data

Category

Extra

Flags

Intent

Page 20: Android - ishan fernando - android nfc presentation

Intent Filters

• Explicit vs Implicit• Per definire quali Intents (impiciti) deve accettare un

componente.

Page 21: Android - ishan fernando - android nfc presentation

Communication

Page 22: Android - ishan fernando - android nfc presentation

Communication

Page 23: Android - ishan fernando - android nfc presentation

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.

Page 24: Android - ishan fernando - android nfc presentation

NFC e Android

Page 25: Android - ishan fernando - android nfc presentation

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)

Page 26: Android - ishan fernando - android nfc presentation

AndroidManifest

• Dichiarazione Activities• Dichiarazione Intents• Dichiarazione Intent filters• Permessi• API level • Caratteristiche hardware

Page 27: Android - ishan fernando - android nfc presentation

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

Page 28: Android - ishan fernando - android nfc presentation

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

Page 29: Android - ishan fernando - android nfc presentation

NFC e Android - dispatch system• Maggior parte delle APIs sono basate su NDEF• The tag dispatch system

Page 30: Android - ishan fernando - android nfc presentation

NFC e Android - dispatch system• Maggior parte delle APIs sono basate su NDEF• The tag dispatch system

Page 31: Android - ishan fernando - android nfc presentation

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

Page 32: Android - ishan fernando - android nfc presentation

NDEF Tag - Reading

Page 33: Android - ishan fernando - android nfc presentation

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

Page 34: Android - ishan fernando - android nfc presentation

NDEF Tag - Writing

Page 35: Android - ishan fernando - android nfc presentation

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

Page 36: Android - ishan fernando - android nfc presentation

Foreground dispatch

Vuoi evitare la finestra di dialogo passando il tag direttamente alla tua applicazione?

Page 37: Android - ishan fernando - android nfc presentation

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

Page 38: Android - ishan fernando - android nfc presentation

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

Page 39: Android - ishan fernando - android nfc presentation

Device to Device

Page 40: Android - ishan fernando - android nfc presentation

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

Page 41: Android - ishan fernando - android nfc presentation

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

Page 42: Android - ishan fernando - android nfc presentation

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

Page 43: Android - ishan fernando - android nfc presentation

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)

Page 44: Android - ishan fernando - android nfc presentation

Android vs J2ME

Android J2ME

Intent lancia activity PushRegistry lancia midletP2P generic API P2P generic API

P2P attraverso messaggi NDEF

P2P come bytes

Page 45: Android - ishan fernando - android nfc presentation
Page 46: Android - ishan fernando - android nfc presentation

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

Page 47: Android - ishan fernando - android nfc presentation

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?

Page 48: Android - ishan fernando - android nfc presentation

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?

Page 49: Android - ishan fernando - android nfc presentation

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

Page 50: Android - ishan fernando - android nfc presentation

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

Page 51: Android - ishan fernando - android nfc presentation

Safeatwork in action

Page 52: Android - ishan fernando - android nfc presentation

Safeatwork in action

Page 53: Android - ishan fernando - android nfc presentation

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 [email protected]@myti.it