Windowsストアアプリ入門 vol87:NFCを利用する

月曜日 , 31, 12月 2012 Leave a comment

 今回はNFC(近距離無線通信技術)をWindowsストアアプリで利用する方法を紹介します。

 NFCを利用するとで端末(NFCに対応した様々な)との近距離通信が可能になり、端末同志を近づけると通信できるアプリケーションの開発が可能になります。

 

 Wikiペディア:近距離無線通信

 

用意するもの

 

 今回はNFCを搭載した端末同士の通信を行う方法を紹介します。

 必要なものはNFCを搭載したPC2台、ないしSonyのICカードリーダー/ライターのPaSoRi RC-S380が2台(注意:S370以前はWindows8非対応です)。

 どちらか一方づつでも可能ですが、OSは両方ともWindows8のPCである必要があります。

 

 Sony:非接触ICカードリーダー/ライター PaSoRi RC-S380

 Amazon:非接触ICカードリーダー/ライター PaSoRi RC-S380

 

IMG_0841
我が家のS380 2台

 

 

 RC-S380はSuicaなどのICカードの情報を読み取ることが可能ですが、ストアアプリでは対応していません。

 (XAML公国 – 技術開発部のユキラボさんに伺うとSuicayaICOCAはNDEF形式ではないためということです)

 

 ブリリアントサービス NFC技術ブログ:「NDEFとは」

 

 続いてNFCの実装を見ていきます。

 NFCは双方向で通信が可能なので受け側、送り側に分けて実装します。

 

NFC受け側

 Package.appxmanifestの機能タブより「近接」にチェックを入れます。

010

 

 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);
        }

 

NFC送り側

 

 続いて送り側ですが、データを受け取るか送るかの違い以外はほとんど同じです。

 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つの端末間でデータの送信が可能になりました。

 

気づいたこと

 

 送り側でデータを送信した後、受け側を一度外して、また近づけると何度でも送信したデータを受け取れます。

 送り側で制御するのか、受け側で同じデータを省くような処理が必要になりそうです。

 

参考:XAML公国 – 技術開発部

 

 

 


匿名 へ返信する コメントをキャンセル

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください