NFCを使ってみる その2
手元にICOCA(=Felicaカード)しかなかったので、NfcFタグを受け取ってみました。
<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);
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)