Nexus7で、自作NDEFタグを読み込ませようとしている。
私はACTION_NDEF_DISCOVEREDだけしか指定していないのだが、ACTION_TECH_DISCOVEREDのintentが飛んでくるので悩んでいた。
が、それは仕様だった。
i.2 高度な NFC - ソフトウェア技術ドキュメントを勝手に翻訳 (原文)
Categoryなどを指定せずにSmartPosterのNFCカードをかざしてみたが、やっぱりTECH_DISCOVEREDになっていた。
さて、原文を見ると「could not be mapped to a MIME or URI」とある。
翻訳されている文章だと「MIMEやURIにマップできなかった場合」と書かれているので、何となく「他にもマップできるものがあるのだろう」と読んでしまったのだが、もしかすると「MIMEかURIに」なのかもしれない。
なんでこんなことを言い出したかというと、Static HandoverのNDEFはWell-knownなNDEF Recordタイプではあるものの、MIMEでもURIでもないからだ。
ごにょごにょ考えていたが、ちゃんと書いてあった。
うん、順番に読みなさい、ということかな。
Static Handoverの場合、ALTERNATIVE_CARRIERを含んだHANDOVER_SELECTと、MIME(RFC2046)になる。
どうも、これらはTECH_DISCOVERED扱いになるようだ。
public static final short TNF_WELL_KNOWN = 0x01;
public static final short TNF_MIME_MEDIA = 0x02;
public static final byte[] RTD_HANDOVER_SELECT = {0x48, 0x73}; // "Hs"
public static final byte[] RTD_ALTERNATIVE_CARRIER = {0x61, 0x63}; // "ac"
実際にやってみると、そうなった。
だけれども、getParcelableArrayExtra()で取ってきてやると、ちゃんとNdefMessageになった(追記参照)。
ほほぅ。
ってことは、NDEFが113~127byteでごにょごにょ悩んでいたが、単にNDEFというintentが飛んでこないというだけで、解析する分にはどっちでもよいということなのか。
勉強になりましたわ。
追記(2013/01/14)
やっぱりだめだ・・・。
「getParcelableArrayExtra()で取ってきてやると、ちゃんとNdefMessageになった」と書いていたが、やっぱりだめっぽい。
nullになっていたのだ。
つまり、TECH_DISCOVEREDだったとしてもgetParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)がnullにならないようにするには、AndroidがNDEFとわかった上でTECH_DISCOVEREDを返す場合だけ、ということになりそうだ。
ごめーん。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。