NFCを使ってみる その2

手元にICOCA(=Felicaカード)しかなかったので、NfcFタグを受け取ってみました。

には"android.nfc.action.TECH_DISCOVERED"を指定しました。

<intent-filter>
  <action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                android:resource="@xml/nfc_tech_filter" />

Tagデータの取得

Activity起動後、getIntent()するとアクション:android.nfc.action.TECH_DISCOVEREDのIntentを取得することができます。
Extraデータに入っているデータは、以下のIntent発行元ソースを見ると詳細がわかります。

ソース:\packages\apps\Nfc\src\com\android\nfc\NfcService.java

        private Intent buildTagIntent(Tag tag, NdefMessage[] msgs, String action) {
            Intent intent = new Intent(action);
            intent.putExtra(NfcAdapter.EXTRA_TAG, tag);
            intent.putExtra(NfcAdapter.EXTRA_ID, tag.getId());
            intent.putExtra(NfcAdapter.EXTRA_NDEF_MESSAGES, msgs);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            return intent;
        }


ということで、以下のようにIntentからTag情報を取得することが可能です。

Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

TechListの取得

Tag情報からNFC対応規格を取得するには、getTechList()を使用します。

String[] techList = tag.getTechList();

String型で返ってくるのですが、"android.nfc.tech.NfcF"などクラス名が入っています。



Tagとの通信

以下のメソッドを使用して行います。

  • 通信開始 :tag.connect()
  • データ送信:tag.transceive()
  • 通信終了 :tag.close()


どんなデータをtransceive()で送ったらいいの?ってなると思いますが、これは各NFC規格の資料を参照するしかありません。


NfcFなら、Sonyさんのサイトに仕様書があります。
http://www.sony.co.jp/Products/felica/business/tech-support/index.html#FeliCa02
- FeliCaカード ユーザーズマニュアル(824KB)
- FeliCaカード コマンドシーケンス設計ガイドライン(217KB)