Mobil Informatikai Rendszerek Near Field Communication 2016. november 7. Sicz-Mesziár János sicz- m e s z i a r. j a n o s @ nik.uni - obuda.hu
NFC Near Field Communication Jellemzői: Rövid hatótávú vezetéknélküli technológia (< 4cm) Kifejlesztői: Philips és Sony Az ISO 18092 szabványon alapszik, visszafelé kompatibilis az IS0 14443 szabvánnyal 13,56 Mhz (HF - High Frequency, rövidhullám) Mint az RFID, de célirányosan kidolgozott szabvány Adatátviteli sebesség: 100-850 kbit/s Rádiófrekvenciás tárgy-, és személyazonosításban használatos Tipikus működési távolság: 10 cm Adatátviteli sebesség: elérheti a 424 kbit/sec-ot (1 Mbit) Sicz-Mesziár János 11/7/2016 2
NFC tag Két féle NFC tag: Aktív NFC tag: saját áramforrással bír (akkumulátor, gombelem, ), hosszú élettartam, költségesebb Passzív NFC tag: nincs saját áramforrás, az olvasó jelerősségét használja fel válaszadásra, olcsó, könnyű tömeggyártás Felhasználási területek: Tárgyazonosítás Törzsvásárlói rendszerek Beléptetési rendszerek Jegy érvényesítés Fizetési megoldások még pár Sicz-Mesziár János 11/7/2016 3
NDEF Message NFC Data Exchange Format Az NFC címkéken lévő adatok standardizált tárolása, mely az NFC Forum által karbantartott szabvány. Bináris üzenetformátum, alkalmazás specifikus tartalmakkal. (típus, hossz, azonosító) Sicz-Mesziár János 11/7/2016 4
NFC Androidon 3 féle működés támogatott: Olvasó / író mód Passzív NFC címkék és matricák olvasása/írása. Peer to peer mód Kommunikáció és adatcsere másik NFC képes eszközzel. Ezt használja az Android Beam is. Card emulation mód Az adott NFC képes eszköz (telefon) NFC kártyaként képes működni. Ez használatos ahhoz, hogy bankkártyás fizetési eszköz lehessen. Sicz-Mesziár János 11/7/2016 5
Android tag dispatch rendszer Egy címke felolvasása során a rendszer megpróbálja a megfelelő alkalmazást indítani. (Intent kiküldésével) Sicz-Mesziár János 11/7/2016 6
Android tag olvasás a gyakorlatban Be kell állítani az AndroidManifest.xml fájlban, hogy értesüljünk az NFC olvasó eseményeiről. AndroidManifest.xml <uses-permission android:name="android.permission.nfc" /> <uses-sdk android:minsdkversion="10"/> <uses-feature android:name="android.hardware.nfc" android:required="true" /> + IntentFilter az Activity-hez: <intent-filter> <action android:name="android.nfc.action.ndef_discovered"/> <category android:name="android.intent.category.default"/> <data android:mimetype="text/plain" /> </intent-filter> Sicz-Mesziár János 11/7/2016 7
Android tag olvasás a gyakorlatban (2) Információ megszerzése az olvasóból. @Override protected void onnewintent(intent i) { super.onnewintent(i);... if (i!= null && NfcAdapter.ACTION_NDEF_DISCOVERED.equals(i.getAction())) { Parcelable[] rawmessages = i.getparcelablearrayextra(nfcadapter.extra_ndef_messages); if (rawmessages!= null) { NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawmessages.length; i++) { messages[i] = (NdefMessage) rawmessages[i]; // Process the messages array.... Tag tag = intent.getparcelableextra(nfcadapter.extra_tag); Bővebben: https://developer.android.com/guide/topics/connectivity /nfc/nfc.html#obtain-info Sicz-Mesziár János 11/7/2016 8
Android Beam üzenetküldés NfcAdapter mnfcadapter; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); mnfcadapter = NfcAdapter.getDefaultAdapter(this); mnfcadapter.setndefpushmessagecallback(this, this); public NdefMessage createndefmessage(nfcevent event) { String text = ("Beam me up, Android!\n\n" + "Beam Time: " + System.currentTimeMillis()); NdefMessage msg = new NdefMessage( new NdefRecord[] { createmime( "application/vnd.com.example.android.beam", text.getbytes() )); return msg; Sicz-Mesziár János 11/7/2016 9
Android Beam üzenet fogadása AndoridManifest.xml <intent-filter> <action android:name="android.nfc.action.ndef_discovered"/> <category android:name="android.intent.category.default"/> <data android:mimetype="application/vnd.com.example.android.beam"/> </intent-filter> Activity public void onresume() { super.onresume(); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) processintent(getintent()); public void onnewintent(intent intent) { setintent(intent); void processintent(intent intent) { textview = (TextView) findviewbyid(r.id.textview); Parcelable[] rawmsgs = intent.getparcelablearrayextra( NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msg = (NdefMessage) rawmsgs[0]; // new String(msg.getRecords()[0].getPayload()) Sicz-Mesziár János 11/7/2016 10
NFC Tag (tech level) Lehetőség van a címéken lévő tartalmat nem NDEF message formátumban is feldolgozni. Azaz egyéni tartalmak is kiolvashatóak belőlve. Android alatt számos jól ismert szabvány támogatott: NfcA: Provides access to NFC-A (ISO 14443-3A) properties and I/O operations. NfcB: Provides access to NFC-B (ISO 14443-3B) properties and I/O operations. NfcF: Provides access to NFC-F (JIS 6319-4) properties and I/O operations. NfcV: Provides access to NFC-V (ISO 15693) properties and I/O operations. IsoDep: Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations. Bővebben itt: https://developer.android.com/guide/topics/connectivity/nfc /advanced-nfc.html Sicz-Mesziár János 11/7/2016 11
Card emulation With Secure Element Host-based Bővebben: https://developer.android.com/guide/topics /connectivity/nfc/hce.html Sicz-Mesziár János 11/7/2016 12