NfcTagReader ISO15693対応版

仕事の合間を縫ってやっていたので時間がかかったが、紆余曲折ありつつもようやくNfcTagReader(旧NfcFeliCaTagReader)のISO15693対応版が出来そうだ。※1

NfcTagReaderは以前にnfc-felicaを書いた際にその動作確認のために用意したテスト用アプリケーションであり、今回ISO15693規格のRFIDにアクセスするためのライブラリィの動作確認のために同RFIDへの読み書きの機能が追加された。

ISO15693へのアクセス部分はFeliCa/FeliCaLiteと同様にライブラリィプロジェクトとして分離しており、それをNfcTagReaderアプリケーションが使うという構造とっている。なので、ISO15693へのアクセス部分は他の用途例えばRL-700Sで印字したRFIDタグを使った何か別なアプリケーションにも簡単に転用できると思う。
(以前にも書いた通りISO15693規格のNFCタグにはAndroid側で用意されているNDEFでもアクセスできるが、全てのコマンドにアクセスする可能性を考えて敢えてスクラッチでライブラリィを書いている)

前回はタグ読み込みのスクリーンショットを紹介したので、今回はデータ書き込みの画面を紹介しよう。

NfcTagReader(NfcTagWriterアクティビティ) その1


このように書き込み可能なブロックが選択可能なマルチ選択タイプのListViewに表示されており、連続したブロックを選択することで4バイトずつまとめてTextViewに表示、書き込みボタンの押下でデータをRFIDタグに書き込むことができる。

NfcTagReader(NfcTagWriterアクティビティ) その2


連続した領域にはこのように連続したUNICODE文字列を設定できる。その後UNICODE文字列はブロックサイズ(4Byte)に分割されて書き込まれる。

NfcTagReader(NfcTagWriterアクティビティ) その3


データは4Byte毎に分割されたブロックに書き込まれるため、それをListViewの各行にStringクラスにUTF-8エンコードして表示するとこのように文字化けしてしまう。(UNICODE文字はバイト数と文字数は一致しない)更にこの文字列は3ブロック(12Byte)では足りず、全てのデータを書き込めていないのが解る。

NfcTagReader(NfcTagWriterアクティビティ) その4


改めて4ブロックにデータを書き込み、それを選択した状態。TextViewには全てのバイト列を結合した後にUTF-8エンコーディングでStringクラスに変換される。

アプリケーション、ライブラリィ共にnfc-felica同様に公開リポジトリにアップして誰でも自由に使えるようにする予定だ。

※1 @TouchRLさんにはいろいろと助けて頂きました。サンプルコードも参考になりました。 本当にありがとうございました。