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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。