あまり熱心に見ていない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が使えればよい。
くらいがあればいいんじゃないだろうか。
はじめまして。
返信削除AndroidBeamの件ですが、
(1) 送信したい側・受信したい側 双方とも SendUi.java
の画面がでます。
(2) 送信する側・受信する側は Initiator・Targetは 関係ないです。
先に タッチしたほうが送信するはずです。
情報、ありがとうございます。
返信削除(1)受信側も表示されるのですか。送信側(PUT側、といったほうがいいですかね)は表示するタイミングがありそうだけど、受信側はなにをトリガに表示させるんでしょう。
いや、これは情報をもらったので、こちらで見てみればいいですね。
(2)送信という書き方が曖昧でしたね。DEP/LLCP/SNEPのそれぞれの視点で意味合いが変わってきますし。この当時の私は、DEP視点で見てますね、きっと。。
受信側のトリガですが、ISO18092でいうところの 能動通信モード・受動通信モードが完了し データ交換プロトコルに遷移する タイミングあたりだと思われます。
返信削除それ以後は UI的な送信側 が確定するまでは 空のデータでも交換しているかと
端末を持っている人にSNEP PUTしたのですが、受信はすぐ終わってアプリが起動するためか、NDEF受信側の画面は目視できなかったです。
返信削除コメントを見る前にやったのですが、送信確定するまで表示しているのだったら、端末同士でBeamしているところを見せてもらえばよかったです。