NFCでシャバドゥビタッチヘンシーン!
Nexus7を買って試したかったのが「NFC」です。
せっかく試すなら、カード読み取って成功!でなくてもう一つ工夫をしたかった。
そこで、毎週日曜朝のお楽しみ「仮面ライダーウィザード」のウィザードライバーのスキャンをNFCで実現することを目指しました。
まずはNFCの基本。下記のサイトを参考にしました。
AndroidアプリでNFCタグを読み書きするための基礎知識
そして、今回の仕様は
- カードをスキャンしてアプリ起動(ドライバーオン)
- カードを読み取ってmIDによって音声を変える。(それぞれのカードがリング)
というものです。
3つめのブログに書いてあったようにカードを読み取るたびに新しいActivityとなっては困ります。だってリングをかざすたびにドライバーオンされては困るから。AndroidManifest.xml
android:launchMode="singleTask"
そして、あとは
StringBuilder sb = new StringBuilder(); // IDm を取得 byte[] idm = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); for (byte b : idm) { sb.append(String.format("%02X", b)); } System.out.println(new String(sb));
のようにすれば読み取れるだろ、と思っていました。確かに読み取れました。しかし、2枚目のカードをスキャンしても同じmIDが入ってくるではありませんか。
launchModeをデフォルトにすれば確かに別々のmIDが読み取れる。でもそれだといちいちActivityが起動する・・・
悩んだあげく、「onResume」で取得していたところを「onNewIntent」に変えることで解決しました。これで現在の画面上で次々とNFC読み取りができます。
そんなこんなでひとまずアプリが完成したので、ニコ動画にアップしました。
試したカードはPasmoとJALカードです。完成度の低さはまあお許しを。