続きだ。
ポーリングまではNfcService内で収まっているので、そんなに難しくなかった。
ここからインテントを飛ばすようにするのが、大変だった。
DeviceHostをimplementsしたNativeNfcManagerクラスを作ったのだが、それだけでは足りない。
タグのために、DeviceHost.TagEndpointをimplementsしたNativeNfcTagクラスを作らねばならなかった。
NativeNfcManagerがデバイスの操作、NativeNfcTagがカードの扱いをしているようだ。
困ったことに、このあたりはソースにコメントがないので、どのデータがどうあるべきなのかがわからんかった。
本物の方は、NfcServiceのJava、libnfc-jniのJNI、libnfc-nxpのC/C++と、あれこれ入り組んでいるし、コールバックでやりとりしていてソースを追っても理解するのが難しそうだった。
なので、今回はNFC-Fに限定し、IDmとシステムコードだけをインテントで返すことに専念した。
PMmは・・・私のライブラリでは捨てているので、なしだ。
IDmは、getUid()で値を返せば、NfcServiceがうまくやってくれる。
PMmとシステムコードは、getTechExtras()でExtrasに入れていた。
前半の0~7バイト目にPMmを、8, 9バイト目にシステムコードを入れているようだ。
このあたりのデータの詰め方を把握しないと、移植はできんと思う。
ここまでやって、パソリにNFC-Fのカードをかざすと、TAG_DISCOVEREDに対応したアプリでDmとPMm、システムコードを表示させることができた。
ポーリング周期は1秒。
NFC-Fしか対応しないようにしている。Type 3 Tag前提じゃないので、FeliCa LiteやFeliCa Standardなどでも反応する。
反応はするけど、タグを読んだりする部分はやってない。
図にするほどでもないが、こんな構成だ。
疲れたー。
VirtualBox用のISOはあるけど、300MBくらいあるので公開できず。。。
かなりがんばれば、android-x86でNFCアプリ開発ができるところまでできなくもなさそうな気がする。
(すごい弱気・・・)
しくみをよくわかってないので、何もかもが手探りってのがよくないですな。
あと、Javaもよくわかってない。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。