WiFiServiceDiscovery – Android 4.1


20120329wifi_service_discovery_chat

Android 4.1 から Network Service Discovery がサポートされました。
マルチキャスト DNS をベースにした Service Discovery です。
Wifi 上にある Peer デバイスから提示されたサービスを見つけて接続します。
デバイスは、プリンタ、カメラ、メディア・プレイヤー、およびローカル・ネットワーク上で登録されているその他のものです。

サンプルコード

Android 4.2 の SDK の サンプルコードに WiFiServiceDiscovery が入りました。

Android 4.1 の端末が借りられたので、試してみました。
操作した感触では WiFiDirectDemo とさほど変わらないですね。

(1) 起動すると、通信可能なデバイスを検索します。
(2) 相手が見つかると、一覧に表示します。
(3) 相手に接続すると、チャットを開始できます。

20120329wifi_service_discovery_search20120329wifi_service_discovery_list20120329wifi_service_discovery_chat

Network Service Discovery の解説

公式サイトに解説が載っています。
Connecting Devices Wirelessly

(1) Network Service Discovery を使用する
自分のアプリにて、サービスを開始する方法を学習します。
ローカル・ネットワーク上であるサービスを発見します。
あなたが接続したいサービスに関して、詳細情報を得るために Network Service Discovery を使用します。

(2) Wi-Fi Direct で接続する
近くにある Peer デバイスの一覧を取得する方法を学習します、
レガシーデバイスのためにアクセス・ポイントを作ります、
および、Wi‐Fi Direct が可能なデバイスに接続します。

(3) Service Discovery のために Wi-Fi Direct を使用する
同じネットワーク上にないが、Peer デバイスによって公表されたサービスを、Wi-Fi Direct を使って発見する方法を学習します、

サンプルコードの解説

8つのソースがあります。

(1) WiFiServiceDiscoveryActivity.java
メインの Activity です。
起動すると、通信可能なデバイスを検索します。
相手が見つかると、一覧に表示します。
相手に接続すると、チャットを開始します。

(2) WiFiDirectServicesList.java
接続可能なデバイスの一覧を表示する Fragment です

(3) WiFiDirectBroadcastReceiver.java
wifi p2p events を受け取る BroadcastReceiver です。

(4) WiFiP2pService.java
サービスの情報を格納するコンテナです。

(5) GroupOwnerSocketHandler.java
ServerSocket を実行する Thread です。
wifi p2p group owner が使用します。

(6) WiFiChatFragment.java
チャットを表示する Fragment です。
メッセージをリスト形式で表示します。
Send ボタンでメッセージを送信します。

(7) ChatManager.java
チャットを実行する Runnable です。
ソケット・バッファーを介してメッセージのリードとライトを行います。

(8) ClientSocketHandler.java
ChatManager を実行する Thread です。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です