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:

packageManager.hasSystemFeature(PackageManager.FEATURE_NFC)

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){
    Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_SHORT).show();
    Log.e(TAG, "This device doesn't support NFC.");
    finish();
    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){
    Toast.makeText(this, "NFC is disabled.", Toast.LENGTH_SHORT).show();
    Log.e(TAG, "NFC is disabled.");
    finish();
    return;
}

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

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

    Intent intent = getIntent();
    Toast.makeText(this,
            intent.getAction(),
            Toast.LENGTH_LONG).show();
}

Úloha

Získajte a prečítajte obsah NFC tagu.

Tag z intent-u získate volaním

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_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()){
    formatter.format("%02X", b);
}

TextView tv = (TextView) findViewById(R.id.card_id);
tv.setText(formatter.toString());

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

  • NFC Basics

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