2012年8月3日

AndroidでRTD Textを読む

RTD Textを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

NDEF Messageを取得する

NdefMessageActivity#onNewIntent(:Intent):void のIntentのExtraに
NfcAdapter.EXTRA_NDEF_MESSAGESという名前で格納されています。
形式はParcelable[]なので一時的にParcelable[]で保持しておき
その中のNdefMessageを取り出します。

Ndef Recordを取得する

NdefRecordNdefMessage#getRecords():NdefRecord[] で取得します。

RTD Textの判定をする

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'T'になっていることを確認します。
NdefRecordからTNFを取得するにはNdefRecord#getTnf():shortを使います。
また、各TNFはNdefRecordに定義されているのでその定数を使います。
NdefRecordからTYPEを取得するにはNdefRecord#getType():byte[]を使います。
また、RTDのTYPEはNdefRecordに定義されているのでその定数を使います。

RTD Textをパースする

NdefRecordからPAYLOADを取得するにはNdefRecord#getPayload():byte[]を使用します。
PAYLOADが取得できたので、RTD Textの仕様に従いパースしていきます。
RTD Textの仕様についてはこちらを御覧ください。
ブリリアントサービス NFC技術ブログ: RTD Textとは
例では文字列(言語コード)という内容で返しています。

実行イメージ


ソースコード

https://github.com/bs-nfc/ReadRTDText

カスタマー開発部 山下智樹

0 件のコメント:

コメントを投稿