android-4.0.1_r1ソースもあることだし、Android Beamのことを調べてみよう。
といっても、何から始めてよいものやら。
まず、どういう動きをするものなのかネットで調べよう。
http://itpro.nikkeibp.co.jp/article/COLUMN/20111115/374500/
動画で説明されていた。
送信側でブラウザを、受信側はホーム画面を表示させておく。
そして向かい合わせると、送信側にダイアログが表示されている。
よく見えないのだが、それをタッチすると受信側にもブラウザが表示されていた。
- 送信側は常時ポーリングするなどして受信側を検知?
受信側がホーム画面でのみポーリングし、検知したら送信側に通知? - 受信側は、無条件で受けとっている。
とにかく、送信側のダイアログを表示するトリガを探せばよさそうだ。
packages/apps/Nfc/src/com/android/nfc/SendUi.javaってのがいかにもそれっぽい名前なのだが、どうなのだろう。
とにかく、スクリーンショットを撮っているってのが気になる。
以前はDDMS経由でしかできなかったと思うが、APIが追加されたのかな?
ここのフォルダには、snepとndefpushがある。
それらを見るより前に、NfcService.javaを眺めておこう。
・・・NFC-EEとかNFC-Cとか、よくわからん単語が出てくるな。
NFC-EEは、NFC Execution Environmentのことらしい。
frameworks/base/nfc-extras/java/com/android/nfc_extrasにもそういうファイルがあるな。
しかし、ダイアログっぽいものがよくわからん。
もう少し詳細がわかれば・・・。
YouTubeとかにも動画があった。
どうもダイアログと言うよりも、スクリーンショットを撮って縮小された画像が画面の真ん中に出てきて、背景では星っぽいものが迫っているようなアニメーションになっているようだ。
これはさっきのSendUI.javaでやってそうではないか。
タッチすると、コールバック関数のonSendConfirmed()を呼び出している。
SendUi.Callbackをimplementsしているのは、P2pEventManager。
そこでさらに、コールバック関数のonP2pSendConfirmed()を呼び出している。
だんだん自信がなくなってきたが、これはP2pLinkManagerだろう。
ここでようやく、sendNdefMessage()になった。
が、そこでやっているのは送信タスクの起動。
まだ本体にはたどり着かない。。
あ、SendTaskは比較的素直なようだ。
よかった。
- SNEPでの送信を試みる
- だめだったらNDEF Pushする。
こういう流れのようだ。
SNEPの接続に成功したら、送信に失敗してもNDEF Pushはやらない、という作りになっている。
SNEPはNFC Forumでドキュメント化されているけど、NDEF PushはAndroid独自のものだ(確か)。
だから優先されているのかな。
さて、送信するNDEFはどうなっているか。
これはコールバック関数のcreateMessage()に依存するらしい。
コールバック関数がない場合やメッセージがない場合は、Android Marketへ接続しそうなURLのNDEFを作っているように見える。
あとは、SNEPの話だ。
LLCPとかあの辺がないと動かないので、試したいならそこから作らねば。
ようやくlibnfcの話に戻れるようだ。
Android BeamってPUSHだ(今のところ)。
通信部分にSNEPを使えるようにしたってのはあるかもしれないが、NPPも使えるところからすると、RFに関しては新しいわけではない。
FeliCaにもFALPがあるし、iC通信ができるくらいだからAndroid Beamみたいなことはできるし、実際にやっている。
ただ、使う手間が違う。
有効にしておけば端末を向かい合わせてタッチするだけで使える、という手軽さはなかったものだ。
これは「端末に何かするときにはユーザの許可を求める」という考え方とは異なるものだ。
私も動画を見て「あ、受信側は許可を求められないんだ」と思ったものだ。
でもまあ・・・私はこれを勝手にされたら嫌だろうな。
パケホーダイみたいなものじゃないから、勝手にブラウザを立ち上げてURL先を見に行ったりされると「金がかかるじゃないか!」と抗議しそうだ(お金の問題じゃないけどさ)。
ただ、向かい合わせるだけで送信準備ができるというのはよいな。
そのためにはポーリングを消費電力など気にせずやる、という動作が必要だ。
あ、ポーリングするのが送信側なのか受信側なのかを見るの忘れた。
以前と同じ仕様なら、確かホーム画面でロックされていない場合にはポーリングする、だったと思う。
おそらく、それを引き継いでいるんじゃないかな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。