NFC
reading NFC
About
Mnohé zariadenia bývajú v súčasnosti vybavené NFC senzorom, ktorý umožňuje čítať údaje z rozličných kariet alebo NFC značiek. Základ práce s NFC senzorom v systéme Android si ukážeme na tomto cvičení.
Objectives
- naučiť sa základy práce s NFC senzorom
Content
The Environment
V prvom kroku si pripravíme projekt.
Úloha
Vytvorte nový projekt s názvom Watchman a v ňom prázdnu aktivitu s názvom MainActivity
.
Úloha
Pre potreby projektu pripravte manifest.
Začneme tým, že pridáme povolenie pre prácu s NFC senzorom:
uses-permission android:name="android.permission.NFC" /> <
Hneď za povolením pridáme aj tento riadok:
uses-feature android:name="android.hardware.nfc" android:required="true" /> <
Pridajte riadok s verziou minimálneho SDK aplikácie (10):
uses-sdk android:minSdkVersion="10"/> <
Následne pre aktivitu MainActivity
pridáme tento intent filter:
intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<intent-filter> </
Úloha
Upravte vlastnosti textového pohľadu v aktivite.
V aktivite sa po vytvorení nachádza práve jeden textový pohľad. Budeme ho používať na zobrazenie ID načítanej karty. Tento pohľad:
- premenujte na
card_id
- nastavte tak, aby predvoleným textom bol reťazec
No Card
- nastavte tak, aby veľkosť textu bola
40sp
Úloha
Overte dostupnosť senzoru NFC na vašom zariadení a v prípade, že sa na ňom NFC nenachádza, ukončite aplikáciu.
Overiť dostupnosť NFC je možné opäť viacerými spôsobmi. Je možné ju overiť napr. pomocou package managera:
.hasSystemFeature(PackageManager.FEATURE_NFC) packageManager
Rovnako tak je možné vyžiadať predvolený NFC adaptér volaním NfcAdapter.getDefaultAdapter(this)
a kontrolu vykonať na základe jeho návratovej hodnoty:
this.nfcAdapter = NfcAdapter.getDefaultAdapter(this);
// check the support for NFC
if(this.nfcAdapter == null){
.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_SHORT).show();
Toast.e(TAG, "This device doesn't support NFC.");
Logfinish();
return;
}
Úloha
Po overení, či zariadenie obsahuje NFC tiež overte, či je zapnuté.
Ak aj zariadenie NFC obsahuje, nemusí byť ešte zapnuté. V prípade, že je to tak, vyzvite používateľa, aby ho zapol.
if(this.nfcAdapter.isEnabled() == false){
.makeText(this, "NFC is disabled.", Toast.LENGTH_SHORT).show();
Toast.e(TAG, "NFC is disabled.");
Logfinish();
return;
}
Poznámka
Používateľa môžete rovno navigovať do príslušných nastavení. To zabezpečíte spustením aktivity s nastaveným Intet
objektom.
Tu však pozor! Toto nastavenie sa líši v závislosti od použitej verzie SDK:
- ak sa jedná o verziu SDK >= 16,
Intent
vytvorte sandroid.provider.Settings.ACTION_NFC_SETTINGS
- ak sa jedná o staršiu verziu,
Intent
vytvorte sandroid.provider.Settings.ACTION_WIRELESS_SETTINGS
Úloha
Overte svoju aplikáciu.
Po spustení aplikácie sa zobrazí aktivita. Ak ju však minimalizujete alebo vypnete a priložíte k zariadeniu napríklad váš ISIC, aktivita sa znova zobrazí, pretože v okolí zariadenia bol prečítaný NFC Tag.
Poznámka
Pozor, kde kartu prikladáte, pretože ju zariadenie nemusí identifikovať vždy. Snažte sa ju preto prikladať čo najbližšie k senzoru, ktorý býva umiestnený bližšie ku spodnej strane zariadenia.
Search Activity
V tomto kroku prečítame NFC TAG z niektorej vašej karty.
Úloha
Vytvorte metódu onResume()
, ktorá sa zavolá každým, keď dôjde k načítaniu NFC Tag-u zariadením.
Android samotný zabezpečí, aby sa naša aktivita spustila vtedy, keď dôjde k načítaniu NFC Tag-u. To znamená, že zavolá metódu onResume()
. To, aký Intent
objekt a s akou akciou prišiel si môžeme overiť jednoducho týmto fragmentom kódu:
@Override
protected void onResume() {
super.onResume();
= getIntent();
Intent intent .makeText(this,
Toast.getAction(),
intent.LENGTH_LONG).show();
Toast}
Úloha
Získajte a prečítajte obsah NFC tagu.
Tag z intent-u získate volaním
= intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); Tag tag
Zavolaním metódy .toString()
nad objektom Tag-u sa o ňom dozviete viac.
Id tag-u je uložené v poli bytov, ku ktorému sa dostaneme volaním metódy getId()
. V našom prípade teda zobrazíme jeho hodnotu v hexadecimálnej podobe, ktorú následne vypíšeme do textového pohľadu card_id
:
Formatter formatter = new Formatter();
for(byte b: tag.getId()){
.format("%02X", b);
formatter}
= (TextView) findViewById(R.id.card_id);
TextView tv .setText(formatter.toString()); tv
Úloha
Overte svoje riešenie.
Ak ste postupovali správne, po spustení aplikácie a priložení karty k telefónu sa vám zobrazí jej id v podobe hexadecimálneho výpisu. Overiť hodnotu si môžete napríklad použitím aplikácie NFC Tools.
Additional Links
NFC Tools - NFC Tools is an app which allows you to read, write and program tasks on your NFC tags and other RFID compatible chips.