View
1.261
Download
0
Category
Preview:
DESCRIPTION
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