NDEF Recordのバイト列構成

NDEF Recordのバイト列構成

MB
Message Begin(1 bit)
現在のレコードが、NDEF Messageの始まりであることを示す
NDEF messageの最初になるNDEF recordには
必ずこのbit に 1 をセットする

ME
Message End(1 bit)
現在のレコードが、NDEF Messageの終わりであることを示す
NDEF Messageの最後になる NDEF recordには必ずこのbitへ1をセットする

CF
Chuck Flag(1 bit)
このフラグが立っているレコードは
分割されたレコードの最初か、中間であることを示す

SR
Short Record(1 bit)
容量を節約するためのフラグ
これに1をセットすると
PAYLOAD_LENGTHが通常は4byte必要なところを
1byteにすることができる
ただし、PAYLOADが255byte以下であること

IL
ID_LENGTH field is present(1 bit)
ID_LENGTHレコードがあるかどうかを表す
IDが必要ないなら、このレコードへ0をセットする
と、
NDEFの容量が節約できる
IDを指定した場合、
ID_LENGTHとIDは省略すること

TNF
Type Name Format(3 bit)
このレコードが持つTYPE ID PAYLOADに
どのような種類のデータが入っているか決定する

TYPE_LENGTH
タイプの長さをバイト単位で表す

PAYLOAD_LENGTH
payloadの長さをバイト単位で表す

ID_LENGTH
IDの長さをバイト単位で表す

TYPE
タイプを表す

ID
IDを表す

PAYLOAD
payloadを表す

このように、詳細なNDEF recordの構成を見ると
TNF
タイプ
ID
payload
以外のほとんどのフィールドは、
レコードの長さに関するもの

Androidは、この部分を自動的に計算してくれるため
バイト列から自分でNDEF recordを作ることなく扱うことができる

自分でNDEF recordをバイト列から作成することも可能だけど面倒

NDEFは、通信フォーマットとして定義されているので
原理的にデータをバイト列にしたり
それを元に戻したりできる

Androidでは、NdefMessageクラスは
コンストラクタにバイト列 byte[] を指定することができるので
これを使って自分で複数のNDEF recordを作成できる

NDEF Recordでクラスはなく
NdefMessageクラスを使うのは

NdefRecordクラス単位だと

headerにある
MB
ME
の扱いができないので、この部分の情報を失うから

Androidでは、NdefMessageのコンストラクタを利用して
1つまたは、複数のNdefRecordインスタンスを格納したときに
初めてNdefRecordの順序が決定し
各NdefRecordのMB ME のビットが決まる

そのため、NdefRecord単体のインスタンスをバイト列から生成する場合も
NdefMessageのコンストラクタを利用する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です