AndroidアプリでNFCタグを読み書きするための基礎知識Androidで動く携帯Javaアプリ作成入門(38)(2/3 ページ)

» 2012年11月27日 18時00分 公開
[緒方聡,イーフロー]

AndroidアプリからNFCタグのIDm(カード固有の番号)の読み込むには

 NFCタグは、アプリから扱うのは珍しい感じがするかもしれませんが、実はすでに社会にかなり浸透しています。

 筆者の手元にあるNFCタグは以下のとおりです。

名称 規格
運転免許証 IsoDep
NfcB
Suica NfcF
ICOCA NfcF
楽天Edy NfcF
社員証 MifareClassic
NfcA
NdefFormatable
入館証 NfcF

 今回のサンプルアプリは、ACTION_TAG_DISCOVEREDのor条件ですべての規格を網羅しているので、すべて読み込めます(NfcBarcodeはAndroid 4.2、API Level 17以降なので、今回は省略)。PASMOやTASPOも読み込めるはずです。

 社員証や入館証が勤怠管理や入退室管理に使われるケースは多いかと思います。さすがに開錠や施錠はできませんが、勤怠管理ならばスマホと社員証で簡単に実現可能で、具体的にはNFCタグのIDmを読み出して個人を特定すればよいだけです。

 IDmの読み込み方法は2通りあります。Android 2.3〜2.3.2(API Level 9)の場合はIntentから、Android 2.3.3以降(API Level 10以降)の場合はTagからそれぞれ確実に取得可能です。

Intent intent = getIntent();
// IDmを取得、確実に取り出せる
byte[] idm = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
// Tag から情報を取得(API Level 10なら確実に取り出せる)
Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
    // IDmを取得、確実に取り出せる
    byte[] idm2 = tag.getId();
}

コラム FeliCaの履歴取得

 Google PlayではFeliCaの履歴を表示できるアプリが公開されています。仕組みとしては以下のように、FeliCaで定義されたコマンドを渡し、そのレスポンスをbyte[]で受け取るようです。


NfcF nfc = NfcF.get(tag);
nfc.connect();
byte[] res = nfc.transceive(new byte[] { ... });
nfc.close();
NfcF#transceive(byte[])

 ただし、どのようなフォーマットでコマンドを渡し、どのようなフォーマットのレスポンスが返されるかは非公開なので、今回の記事では扱いません。


 有志の方々が解析を進められていて、その成果がいくつかの個所でオープンになっているので、興味のある方はそれらサイトを当たってください。


 公開されているそれらのノウハウは外部のFeliCaを読み書きするためのものであり、FeliCa Networksが先日公開した「おサイフケータイ対応Android携帯電話アドホック機能対応アプリ開発用SDK」とは異なります(こちらはスマホ内のFeliCaチップを制御するためのAPIです)。



安くなった書き込み可能なNFCタグ

 書き込み可能なタグはネット通販などで20枚1200円程度で購入可能です。

 筆者の手元には5種類ありますが、IDmのバイト数(7bytesのものがある)、ユーザーエリア、通信距離、規格などが異なるものの、APIを通じて同等に扱うことが可能です。

 ユーザーエリアは手元にあるもので最小は48bytes、最大は144bytes、通信距離は5〜25mmから5〜55mm、規格はMifare UL、NTAG203などです。おおむね10万回ほど書き換えが可能で、内容をフラッシュして読み出し専用にすることもできます(Ndef#makeReadOnly()を参照)。

 特に気を付けなければならないのはユーザーエリアで、書き込む前に最大サイズを読み出せるものの、小さいものは数十bytes、大きくても百数十bytesしかないため、大量データを保持させることはできません。実運用では短縮URLやハッシュ値などを活用したいところです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。