WEBdeBS NFC Presentation
Upcoming SlideShare
Loading in...5
×
 

WEBdeBS NFC Presentation

on

  • 1,061 views

Presentation about NFC technology and developing Android applications using it.

Presentation about NFC technology and developing Android applications using it.

Statistics

Views

Total Views
1,061
Views on SlideShare
1,054
Embed Views
7

Actions

Likes
0
Downloads
21
Comments
0

4 Embeds 7

https://twitter.com 3
http://a0.twimg.com 2
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

WEBdeBS NFC Presentation WEBdeBS NFC Presentation Presentation Transcript

  • 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) perscambiare informazioni via NFC.
  • NDEF (NFC Data Exchange Format) passive mode active modeQuesto 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 linkMIME il contenuto è specificato da un mime typeNFC-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 unacomunicazione 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 filterAndroidManifest.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 - PermessiAndroidManifest.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 SystemsIntent Dispatch System • dichiara i filtri nel Manifest • fa partire lapplicazione anche se è spentaForeground Dispatch System • dichiara i filtri mentre in esecuzione • gestione esclusiva per i tag richiesti
  • NDEF Tag - Readingpublic 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 1Parcelable[] raw = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES);• Prendiamo il tag toccato dallʼIntent ricevuto.
  • NDEF Tag - Reading2NdefMessage 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 - Writingpublic 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 - Writing1Tag 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 - Writing2final 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 - Writing3NdefRecord[] 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 dispatchpublic 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 dispatchpublic 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 dispatchpublic 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 1Intent 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 2IntentFilter 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 3intentFiltersArray = 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 dispatchpublic 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 dispatchpublic 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@Overridepublic 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@Overridepublic void onPause() { super.onPause(); NfcAdapter.getDefaultAdapter(this) .disableForegroundDispatch(this);}• Disabilitiamo foreground dispatch system quando lʼActivity perde il controllo.
  • Foreground dispatch 3@Overridepublic 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 DevicesetNdefPushMessage()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 DevicesetNdefPushMessageCallback() 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@Overridepublic 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@Overridepublic 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
  • SafeatworkSicurezza sul lavoro esupporto alla certificazioneUsato dai manutentori eoperai specializzatiBackend web per la gestionedei datiNata su j2me nel 2008( Nokia 6212 )www.safeatwork.it
  • SafeatworkDownload contenuti • Schede tecniche• Istruzioni operativeAccesso ai contenuti basatosu NFCUpload delle attività• cosa ha fatto loperatore?• che procedure ha eseguito?
  • SafeatworkDownload contenuti • Schede tecniche• Istruzioni operativeAccesso ai contenuti basatosu NFCUpload delle attività• cosa ha fatto loperatore?• che procedure ha eseguito?
  • SafeatworkLinterazione prevede prevalentemente lutilizzo della lettura deitag per accedere ai contenuti.
  • SafeatworkLinterazione prevede prevalentemente lutilizzo della lettura deitag 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/Mytiwww.myti.itIshan Fernando@ifdoi.fernando@myti.it