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が使えればよい。

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

4 件のコメント:

  1. もともと2012/09/08 3:02:00

    はじめまして。
    AndroidBeamの件ですが、
    (1) 送信したい側・受信したい側 双方とも SendUi.java
      の画面がでます。

    (2) 送信する側・受信する側は Initiator・Targetは 関係ないです。
     先に タッチしたほうが送信するはずです。


    返信削除
  2. 情報、ありがとうございます。

    (1)受信側も表示されるのですか。送信側(PUT側、といったほうがいいですかね)は表示するタイミングがありそうだけど、受信側はなにをトリガに表示させるんでしょう。
    いや、これは情報をもらったので、こちらで見てみればいいですね。

    (2)送信という書き方が曖昧でしたね。DEP/LLCP/SNEPのそれぞれの視点で意味合いが変わってきますし。この当時の私は、DEP視点で見てますね、きっと。。

    返信削除
  3. 受信側のトリガですが、ISO18092でいうところの 能動通信モード・受動通信モードが完了し データ交換プロトコルに遷移する タイミングあたりだと思われます。
    それ以後は UI的な送信側 が確定するまでは 空のデータでも交換しているかと

    返信削除
  4. 端末を持っている人にSNEP PUTしたのですが、受信はすぐ終わってアプリが起動するためか、NDEF受信側の画面は目視できなかったです。

    コメントを見る前にやったのですが、送信確定するまで表示しているのだったら、端末同士でBeamしているところを見せてもらえばよかったです。

    返信削除

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