ちょっとNexus 5でSuicaのIDを読み込む必要があったので、挑戦してみた。
Nexus 5のOSはAndroid4.4。
サンプルコードCard ReaderをDL
Android StudioのサンプルコードCard Readerをダウンロード。
“a low-level NFC card reader”と記載されているので、Suicaも読めると期待したが、このサンプルアプリを起動してSuicaをNexus 5をかざしたが、無反応だった。
SuicaはNFC-F
Card Readerのコードを見てみると、ISO-DEP (ISO 14443-4)に対応しるらしい。
// Android's Host-based Card Emulation (HCE) feature implements the ISO-DEP (ISO 14443-4)
// protocol.
SuicaはNFC-Fという規格(FはおそらくFelicaのF)に準拠しているので、このままのコードでは使えない。
NFC-F規格のNFCも読めるように変更していく。
/res/xmlにあるnfc_tech_filter.xmlに<tech>android.nfc.tech.NfcF</tech>
を追加
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
これで、SuicaをNexus 5にかざすと、
/com/example/android/cardreader/のLoyaltyCardReader.javaのonTagDiscovered(Tag tag)関数が呼び出されるようになる。
onTagDiscovered(Tag tag)関数にIDを読む処理を追加する。
byte[] felicaIDm = tag.getId();
if(felicaIDm != null) {
//try {
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < felicaIDm.length; i++) {
buffer.append(String.format("%02x:", (Integer.valueOf(felicaIDm[i])&0xff)));
}
String cardID = buffer.toString();
mAccountCallback.get().onAccountReceived(cardID);
Log.i(TAG, "Felica ID: " + cardID);
Share this post
Twitter
Facebook
LinkedIn