今回はNFC(近距離無線通信技術)をWindowsストアアプリで利用する方法を紹介します。
NFCを利用するとで端末(NFCに対応した様々な)との近距離通信が可能になり、端末同志を近づけると通信できるアプリケーションの開発が可能になります。
今回はNFCを搭載した端末同士の通信を行う方法を紹介します。
必要なものはNFCを搭載したPC2台、ないしSonyのICカードリーダー/ライターのPaSoRi RC-S380が2台(注意:S370以前はWindows8非対応です)。
どちらか一方づつでも可能ですが、OSは両方ともWindows8のPCである必要があります。
Sony:非接触ICカードリーダー/ライター PaSoRi RC-S380
Amazon:非接触ICカードリーダー/ライター PaSoRi RC-S380
RC-S380はSuicaなどのICカードの情報を読み取ることが可能ですが、ストアアプリでは対応していません。
(XAML公国 – 技術開発部のユキラボさんに伺うとSuicayaICOCAはNDEF形式ではないためということです)
続いてNFCの実装を見ていきます。
NFCは双方向で通信が可能なので受け側、送り側に分けて実装します。
Package.appxmanifestの機能タブより「近接」にチェックを入れます。
ProximityDeviceクラスを利用して、送り側NFCの接触があった場合、NFCが離れたとき、そしてメッセージを受け取った時のイベントを設定します。
public MainPage() { this.InitializeComponent(); this._device = ProximityDevice.GetDefault(); if (this._device != null) { this._device.DeviceArrived += ProximityDeviceArrived; this._device.DeviceDeparted += ProximityDeviceDeparted; this._device.SubscribeForMessage("Windows.SampleNFC", messageReceived); } } private void ProximityDeviceDeparted(ProximityDevice sender) { System.Diagnostics.Debug.WriteLine("ProximityDeviceDeparted"); } private void ProximityDeviceArrived(ProximityDevice sender) { System.Diagnostics.Debug.WriteLine("ProximityDeviceArrived"); } private void messageReceived(Windows.Networking.Proximity.ProximityDevice device, Windows.Networking.Proximity.ProximityMessage message) { System.Diagnostics.Debug.WriteLine(message.DataAsString); }
続いて送り側ですが、データを受け取るか送るかの違い以外はほとんど同じです。
Package.appxmanifestの機能タブの「近接」にチェックを入れます。
public MainPage() { this.InitializeComponent(); this._device = ProximityDevice.GetDefault(); if (this._device != null) { this._device.DeviceArrived += ProximityDeviceArrived; this._device.DeviceDeparted += ProximityDeviceDeparted; } } private void ProximityDeviceDeparted(ProximityDevice sender) { System.Diagnostics.Debug.WriteLine("ProximityDeviceDeparted"); } private void ProximityDeviceArrived(ProximityDevice sender) { System.Diagnostics.Debug.WriteLine("ProximityDeviceArrived"); } private void PublishButton_Click(object sender, RoutedEventArgs e) { this._device.PublishMessage("Windows.SampleNFC", "サンプルメッセージ"); }
送り側はボタンイベントなどでデータを送ることを想定しています。
ProximityDeviceのPublishMessageメソッドで送信します。
これで2つの端末間でデータの送信が可能になりました。
送り側でデータを送信した後、受け側を一度外して、また近づけると何度でも送信したデータを受け取れます。
送り側で制御するのか、受け側で同じデータを省くような処理が必要になりそうです。
Please give us your valuable comment