2011/11/20

[nfc]Android Beamって何だろう?

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は比較的素直なようだ。
よかった。

  1. SNEPでの送信を試みる
  2. だめだったら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 件のコメント:

コメントを投稿

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

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