あまり熱心に見ていない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が使えればよい。
くらいがあればいいんじゃないだろうか。