Upload
nobuaki-aoki
View
1.508
Download
0
Embed Size (px)
Citation preview
Windows Phone 8のデバイスを使おう~近接通信編~
第5回まどべんよっかいち 2013/4/6
青木宣明 @kumar0001
Agenda
1. Windows Phoneのデバイス
1. Windows Phone 7.8
2. Windows Phone 8
2. 近接通信プログラミング~端末間通信編~
3. まとめ
Windows Phoneのデバイス
• Windows Phone 7.8のデバイス
• Windows Phone 8のデバイス
Windows Phoneのデバイス
Windows Phoneではシャシー規格によって、ハードウェア仕様が決められている
•規格をそろえることで、端末が異なってもユーザが同等のエクスペリエンスを体験できる
OS側のサポートコスト低減
アプリケーション開発のコスト低減
•ただし、端末間の差異が少なく、メーカー側は差別化しにくい問題も
Windows Phone 7.8のデバイス
・GPS・カメラ・FMラジオ
通信(3G/Wi-fi)
センサー・加速度・地磁気・近接・照度・ジャイロスコープ
APから制御不可
搭載は任意
Bluetooth・A2DP・AVRCP・HFP・HSP・PBAP
WP7.8端末の連携
①APのデータを
クラウド上のストレージ経由で受け渡しする
②Webサービスを経由する
WP7.8まではクラウド・Webサービスを経由して連携するしかなかった
Bluetooth
Windows Phone 8のデバイス(1)
WP7.8から以下の機能が追加• GPS
バックグラウンドでの位置検出が可能に
• MicroSDカードOSから保存: 写真、動画OSから読み込み: 写真、動画、音楽署名済みアプリのインストール
• 音声音声認識音声合成
• BluetoothプロファイルOPP(Object Push Profile)の追加
• NFC/Bluetooth/WiFi-Directによる近接通信
(参考)WP8のBTプロファイル
Advanced Audio Distribution Profile (A2DP 1.2)
Audio/Video Remote Control Profile (AVRCP 1.4)
Hands Free Profile (HFP 1.5)
Phone Book Access Profile (PBAP 1.1)
Object Push Profile (OPP 1.1)
Windows Phone 8のデバイス(2)
特に注目を引くのがBluetooth OPPと近接通信の追加• WinRTのProximity APIで利用する
通信方法は3通り• NFC近距離(~数cm)での通信ICタグや端末同士での通信
• Bluetooth数m~10mでの通信デバイスや端末同士での通信
• WiFi-Direct、TCP/IP端末同士での通信
WP8端末の連携
①APのデータを
クラウド上のストレージ経由で受け渡しする
②Webサービスを経由する
WP8では端末間の直接通信、NFCによるICタグの読み書き、SPPデバイスとの連携が可能に
③端末間で直接通信する
近接通信Bluetooth(OPP)
NFCタグ
SPPデバイス
近接通信を活用したアプリ開発
近接通信対応のアプリはまだこれから
サーバを経由せずに端末間で直接連携できるメリットがあるが、検証環境の準備が必要など取り組みにくい面も
近接通信対応のアプリ開発のきっかけになるよう、近接通信について見ていきます
デバイスプログラミング~近接通信編~
• OS標準機能の近接通信
• ShareMediaTask
• Proximity API
• 端末間通信
• TappingによるAP起動
• Bluetoothデバイスとの通信
WP8での近接通信
標準アプリでもサポートされている
•例)Pictureハブの共有
送信側
受信側
自分のアプリではどうやって実現できるのか?
自作アプリでの近接通信
方法1• ShareMediaTaskを使うメリット: 簡単。ファイルパスを与えるだけ
デメリット: タップによるファイル転送しかできない
方法2• Proximity APIを使ってPeerの探索~接続~通信を自前で行うメリット: 詳細に制御できる
デメリット: 手順を踏まえて使う必要がある。やや複雑
ShareMediaTaskでの近接通信
使い方は簡単
• FilePathプロパティに共有するファイルのパスを設定してShow()する
var photoChooserTask = new PhotoChooserTask { ShowCamera = true };
photoChooserTask.Completed += (s, e2) =>
{
var shareMediaTask
= new ShareMediaTask { FilePath = e2.OriginalFileName };
shareMediaTask.Show();
};
photoChooserTask.Show();
PhotoChooserTaskとの組み合わせ例
デモ
Proximity APIプログラミング
Proximity API• Windows Runtimeに含まれるWindows.Networking.Proximity名前空間
Peer(端末・デバイス)との通信をサポートする• TapによるPeerの検出
• PeerのブラウジングBluetooth, WiFi-Direct, TCP/IP
• Peerとの接続、ソケットの取得
• NFCでのICタグへのアクセス
近接通信のシナリオ
Peer間の近接通信のパターン
1. Bluetoothペアリング済みデバイスを列挙→接続してソケット取得
2. ICタグにメッセージをP&S
近接通信のシナリオ(1/3)
A. Tappingしてメッセージを送受信する
近接させる
Publish/Subscribeでメッセージを送受信
B. Tappingして接続した後ソケット通信を行う
近接させて接続を確立
Socketによるストリーム通信
・Bluetooth・WiFi-Direct・TCP/IP
NFCが使える場合NFCが使える場合
近接通信のシナリオ(2/3)
C. Browsingで見つけたPeerと接続した後ソケット通信を行う
Socketによるストリーム通信
・Bluetooth・WiFi-Direct・TCP/IP
Peerを探索 Advertising
接続を確立
近接通信のシナリオ(3/3)
D. ペアリング済みのBluetoothデバイスと接続してソケット通信を行う
Socketによるストリーム通信
Peerを探索
E. ICタグとメッセージをPublish/Subscribeする
接続を確立
近接通信の基本的な手順
•Windows.Networking.Proximity.ProximityDevice.GetDefault() != null
① Tappingサポートの確認
•ProximityDevice.PublishMesage
•ProximityDevice.PublishUriMessage
•ProximityDevice.PublishBinaryMessage
②-1送信側: メッセージのPublish
•ProximityDevice.SubscribeForMessage
②-2 受信側: メッセージのSubscribe
•StopPublishingMessage
•StopSubscribingForMessage
③終了時
A. TappingでのPublish/Subscribe
デモ
近接通信の基本的な手順
•PeerFinder.SupportedDiscoveryTypes & PeerDiscoveryTypes.Triggeredを確認
•PeerFinder.TriggeredConnectionStateChangedを設定
① Tappingによる接続のサポート有無の確認
•PeerFinder.Start()を実行すると、自端末がリモート端末で検出可能になる
② Advertisingの開始
•TriggeredConnectionStateChangedイベントで状態がTriggeredConnectState.Completedになったら通信を行う
•このとき接続が完了していてStreamSocketが渡される
③接続の完了待ち
• InputStream, OutputStreamを利用して通信を行う
④ Socketの利用
B. Tapping Triggerでの接続
デモ
近接通信の基本的な手順
• PeerFinder.SupportedDiscoveryTypes & PeerDiscoveryTypes.Browseを確認
• PeerFinder.ConnectionRequestedを設定
① Tappingによる接続可否の確認
• PeerFinder.Start()を実行すると、自端末がリモート端末で検出可能になる
② Advertisingの開始
• PeerFinder.FindAllPeersAsync()で検出したPeer情報を取得
•その中のPeerに対してPeerFinder.ConnectAsync()で接続する
③-1 Peerの探索
•ConnectionRequestedイベントに対してPeerFinder.ConnectAsync()で接続する
③-2 接続要求の受け入れ
• StreamSocket.InputStream, StreamSocket.OutputStreamを利用して通信を行う
④ Socketの利用
C. Peer Browsingでの接続
デモ
Peerの接近・離脱の検出
DeviceArrived, DeviceDepartredイベントでPeerの接近、離脱を検知できる• 例)接近したらAdvertising→接続→通信
デモ
proximityDevice = ProximityDevice.GetDefault();
proximityDevice.DeviceArrived += proximityDevice_DeviceArrived;
proximityDevice.DeviceDeparted += proximityDevice_DeviceDeparted;
private void proximityDevice_DeviceArrived(ProximityDevice sender)
{
PeerFinder.Start();
}
private void proximityDevice_DeviceDeparted(ProximityDevice sender)
{
PeerFinder.Stop();
}
Tappingによるアプリの起動
Tappingにより、他端末のAPを起動できる• APがインストールされていない場合、ストアからダウンロードさせる
Advertisingを実行中のAP
OSがAPを起動するか確認する
APを起動していない端末
近接させる
Tappingによるアプリの起動
デモ
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Uri.ToString().Contains(
"ms_nfp_launchargs=Windows.Networking.Proximity.PeerFinder:
StreamSocket"))
{
PeerFinder.Start();
}
}
起動されたページのURIに以下のパラメータが含まれる• ms_nfp_launchargs=Windows.Networking.Proximity.PeerFinder:
StreamSocket
Advertisingを実行すると、APを起動したリモート端末のPeer探索に反応できる• 後は通常通りに接続→ソケット通信
まとめ
WP8から近接通信がサポートされて、端末間の直接通信が可能になった。
近接通信を利用するシナリオは複数あるが、どれも利用方法は簡易である。
近接通信を活用して、アプリの提供機能に+αを実現したい