Android‎ > ‎

ABC2011WinterのためにもっとNFCについて調べた

Android Bazaar and Conference 2011 Winter のデ部のGingerbreadAPI解説のセッションでNFCについて説明してきました。
お昼休みに野良LTみたいな感じでやる!って聞いてたのに何故か安田講堂でやることになってですねうぎぎ…。
一応、僕(@vvakame)個人で参加してきたのですが、NFCやる気になったのはしゃちょーがNexusS買ってくれたからなので、個人ブログじゃなくてこっちに書いておきたいと思います。

資料

追加で解説

まぁスライドに書いてある通りなんですが、今んとこGingerbreadではNFC関連の公開APIは
  • NfcAdapter
    • その端末でNFC使えるかの判定
    • Intentを解釈する時に便利な定数群
  • NdefMessage
    • 1つ以上のNdefRecordからなる
    • 今んとこ広く知られた形式だとNdefMessageにrootで含まれるNdefRecordは1つだけの場合が多い
      • SmartPosterはNdefRecordのPayloadにさらにNdefRecordが複数入ってる(入れ子)
  • NdefRecord
    • データの最小単位
    • ヘッダー・データ長情報・データ みたいな構造になってます
      • ヘッダーは全部で1byteの情報です
        • mb 1bit (Message Begin NdefMessageの一番最初のNdefRecordなら1)
        • me 1bit (Message End NdefMessageの一番最後のNdefRecordなら1)
        • cf 1bit (Chunk Flag 大量データだったら1? あんまし理解してない)
        • sr 1bit (Short Record Payloadの長さが0〜255バイトまでなら1)
        • il 1bit (ID Length ID Lengthフィールドが提供されるなら1)
        • tnf 3bit (Type Name Format Typeの解釈の仕方について? 0x00〜0x07までが規定)
      • データ長はデータ部分それぞれの長さを規定しています
        • Type Length
          • Typeのデータ長を表す 1byte
        • Payload Length
          • Payloadのデータ長を表す
          • srが1だったら1byte、srが0だったら4byte
          • つまり、Payloadの最大サイズは 4,294,967,295 byte かな?
        • ID Length
          • IDのデータ長を表す 1byte
          • ilが1の時存在する 0だったらそもそも存在しない
      • データ部はもうそのまんまです
        • Type
        • ID
        • Payload
          • こいつがデータ本体!
って感じ。詳しくは規格を参照してください。
ページ一番下に NdefUtil.java を添付しておきました。NdefRecordのbyte[]を解釈して生データを見られる感じになってます。sr=1なデータはとりあえず正しくparseできてます。間違ってたらごめんね!!
あとはRTDとにらめっこしつつパースするだけです!そこが一番めんどい気もする。

資料集

ċ
NdefUtil.java
(6k)
若命全洋,
2011/01/10 18:38
Comments