2012/07/01

Android BEAMの情報を集めよう

あまり熱心に見ていないAndroid BEAMだが、そろそろ情報を集めよう。
記事だけだと、Android BEAMのカバーする範囲がわからないので、とりあえず集めるだけ集めてみる。


概要

  • 最初(Android 2.3.3?)は、NPP(NDEF Push Protocol)だった
  • Android 4.0からは、SNEP(Simple NDEF Exchange Protocol)を優先して、だめだったらNPPを使っている
  • Android 4.1では、SSP(Simple Secure Paring)[pdf]が使える。
    どうでもいいけど、BluetoothにはSPP(Serial Port Profile)もあるので紛らわしい
  • データとしては、こういうものを送ることができるようだ
    • リンク
    • アプリ(Android Marketへのリンク?)
    • アドレス
    • 写真(Android 4.1から。画像ファイル?)
    • 動画(Android 4.1から。動画ファイル?)

 

動作

  • 送信したいアプリが、NDEFメッセージを作る
  • 受信対象となるデバイスが現れたらコールバックするしくみがあるので、そのタイミングでNDEFメッセージを作りに行けばよいのかな。
  • データを送信するアクティビティはフォアグラウンドにいないとだめ。
    ということは、サービスみたいに裏で動くものからは送信できないのかな?
  • 送受信対象となるためには、スクリーンがロックしてたらだめ。
    「ロック」は、指でうにょうにょって操作しないと解除されない、あの画面かな。
  • もちろん、NFCを有効にしてないとだめだろう。
    飛行機モードにしてると、NFCは有効にならないはず(ソースで見る限り)
  • Tech Boosterさんの画像を見ると、送信側は画面が切り替わるようだ。
    ソースファイル名も「SendUi.java」だし。
    受信側は、受信されるまで同じ画面なのか(インテントを受信したときの動きっぽい)。

最近わかったことも書いておこう。

  • 送信側がTargetになると思い込んでいたが、実際はTargetとInitiatorを交互に繰り返しているようである。
  • ということは、InitiatorかTargetかは送信の主とは関係がなさそうだ。
  • LLCPのCONNECT PDUを送信した方が、SNEP PUTをするようだ。

 

そんなわけで、簡単にAndroid BEAMで送信したいのであれば、

  • InitiatorとなってATR_REQ送信するか、TargetとなってATR_RES返信するかのどっちかを実装。
  • NFC-DEPの実装。InitiatorでもTargetでもいいけど、ほぼフル実装。
  • LLCPの実装。Connection-orientedでSNEPが使える程度。
  • SNEPの実装。SNEP PUTが使えればよい。

くらいがあればいいんじゃないだろうか。