2013/03/20

NDEF Formatter

NDEFタグをフォーマットするだけのアプリを置きました。
署名はしてますが、野良です。

https://sites.google.com/site/hiro99ma/home/files/freeapk/FLFMT.apk?attredirects=0&d=1

Android 4.2.2のみ対応してます(たぶん、APIとしてはもっと下でも動くはず)。

NDEF Formatと、UnNDEF Fomratの2つがあります。

 

NDEF Format

タグがどうなっているかで、動作が変わります。
下の処理を、上から順に見ていって、最初に引っかかった処理を行います。

  • NDEFフォーマット済みの場合(android.nfc.tech.Ndef)
    AndroidのNDEF書き込み機能で、TNFがEmptyのNDEF Messageを書き込む。
  • NDEFフォーマットが可能な場合(android.nfc.tech.NdefFormatable)
    AndroidのNDEFフォーマット処理で、TNFがEmptyのNDEF Messageを書き込む。
  • NFC-Fの場合(android.nfc.tech.NfcF)
    MCレジスタを操作してType 3 Tagとして扱えるようにしたあと、TNFがEmptyのNDEF Messageを書き込む。
    それ以降のユーザ領域は、0x00でクリアします。
  • それ以外
    何もしない

MIFARE Ultralightは、NDEFフォーマット済みか、NDEFフォーマット可能のどちらかになると思ってます。
それ以外でも、Androidが対処してくれそうなものであれば、上の処理2つのどちらかになるでしょう。
FeliCa Liteは、未フォーマット状態があり得るので、MCレジスタ操作を加えています(1次発行まではしない)。

 

UnNDEF Format

MIFARE UltralightとFeliCa Liteだけしか対応してません(たぶん)。

  • NFC-Fの場合(android.nfc.tech.NfcF)
    MCレジスタを操作してFeliCa Liteのみにしたあと、ユーザ領域を0x00でクリアします。
  • MIFARE Ultralightの場合(android.nfc.tech.MifareUltraligh)
    ユーザ領域に、サイズ0のNDEF TLVと、Terminator TLVを書き込んだ後、残りを0x00でクリアします。
  • それ以外
    何もしない

MIFARE Ultralightは、NDEF化すると元に戻れません(OTPという1回しか書き込めない領域を使うため)。
NDEF化したあとでユーザ領域を0x00でクリアしてしまうと、AndroidがNdefFormatableとみなさないようになってしまいました。
どうやら、NDEF TLVがないとダメなようでした。
仕方なく、NDEF Messageとしては何も書き込まないNDEF TLVだけを書き込むようにして逃げました。

 

使い方

アプリを起動すると「NDEF Formatてr」という画面が表示されますが、ここでNDEFタグにタッチしても何もしません。
一度画面をタッチすると、上にアプリ名と、下に切り替え用のボタンが表示されます。
これが表示されている間にタッチすると、確認無しでフォーマットします。
フォーマット後は確認ダイアログが表示され、OKしないとフォーマットしないようにしています。

通常は1秒くらいで元に戻るのですが、うまく行かないときもあるようです。
あまり気にしていません。

今さら気づいたんですが、NDEF Formatterの方はアプリ名なしのフルスクリーンなのに、UnNDEF Formatterの方はアプリ名が表示されているんですね・・・。
あまり気にしないことにします。

 

Nexus7でしか動作確認していません。
なにかあったら、ごめんなさい。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。