NFCをWindows 8 ストアアプリで活用する

さぁWindows 8 ストアアプリでNFCです。 Win RT APIには、近接通信(NFC)するためのProximity APIが用意されています。NFC付のPCであれば、この機能を使ったアプリケーションを動かすことができます。NFCはNear Field Communicationの略で、ベンダー非依存の近距離無線通信規格です。Bluetooth LEやWi-Fi Direct、非接触タグリーダー/ライター等を使って近距離にあるデバイスやタグの間でデータを交換可能です。 Windows 8 ストアアプリでは、Windows.Networking.Proximity名前空間に用意されたクラスライブラリを使って、NFCを活用したアプリを開発できます。 Proximity APIを使って出来ることは、以下の3種類です。 非接触タグの読込/書込み タップによるPC間のデータ送受信(Bluetooth LE) ブラウズによる発見とPC間のデータ送受信(Wi-Fi Direct) 最初の機能は非接触型のプリペイドに対するデータ読み書きです。皆さんよくお使いの非接触型のプリペイドカードが代表選手です。非接触型のタグにデータを書き込んだり、タグからデータを読み込んだりできます。単にデータを読み込むだけでなく、データの形式(テキスト、JPEG、WAVなど)に紐づいたアプリケーションの起動も可能です。URLを指定してブラウザでWebのページを表示させることもできます。他にも、特定のWindowsストアアプリを起動(インストールされていない場合はWindowsストアの該当アプリのページを表示)させることも可能です。タグをリーダー部分に近づけた時、スタート画面にトースト通知が出て、ユーザーに許可を求めるので、勝手に変なデータを送りこまれることはありません。 次の機能は、PCのNFCデバイスがある場所を4㎝以内に近づけ(タップ)てペアリングを行い、データを送受信する機能です。従来のBluetoothの様にパスコードを入力するなどの手間は必要ありません。タップするとスタート画面の右上に、ユーザーの承諾を得るためのトースト通知が表示されます。ユーザーの承認後、2台のPC間でデータのやり取りが可能になります。 最後の機能は、Wi-Fi Directを用いた通信です。通常のWi-Fiがアクセスポイントに接続してネットワークにつながり、ネットワークを介して通信するのに対し、Wi-Fi Directは、ルーターを介さずに、各PCのWi-Fiデバイスが直接Peer To Peerで接続してデータ通信を行える機能です。アクセスポイントが無くても、Wi-Fi Direct対応のデバイス間でなら、ネットワーク通信ができるというとても便利なものです。ただし同時に接続できるのは1対1ですが。 WinRT APIでは、ProximityDeviceとPeerFinderという二つのクラスが用意されています。1.の機能はProximityDeviceクラスを使って、2.と3.の機能はPeerFinderクラスを使って実装可能です。これらの機能の詳しい説明は、 http://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/hh465221.aspx に書かれているので参考にしてください。今後、各機能について、このブログでも、実際にProximity APIを使うときの注意点などを書いていきますので、こうご期待。残念ながら、NFCは現在販売されている全てのWindows 8 PCに装備されているものではありません。ARM版のWindows RT PC(タブレット)の場合は、ついている場合が多いです。SONYのVAIOは大概ついています。PCを購入する場合は、カタログに、NFC、Bluetooth LE等の言葉があるか確認してみてください。もしくは、量販店などで実際に触って試せる場合には、コントロールパネル→デバイスマネージャを開き、 Bluetoothの下位にBluetooth LEがあるか            2の機能が使える ネットワークアダプターの下位にWi-Fi Directがあるか      3の機能が使える 近接通信デバイスがあるか                     1の機能が使える の三点を確認してみてください。NFC、はっきり言って面白いです。ストアで公開されているアプリもNFC対応は今のところあまりありません。NFC自体新しい機能なので利用シナリオもアイデア次第で色々出てきそうです。NFCを使った良いアプリが沢山出てくれば、NFC対応のWin8 PCも種類が増えるでしょう。 NFC機能を使うアプリは、Package.appxmanifestで、機能タブの”近接”にチェックを入れてください。 皆さん、NFCを活用したアプリを開発して、Windowsストアで公開しませんか? 次回は、タグの読み書きに関するTipsを投稿の予定  

0

WinRT APIによるファイル保存時の注意

WinRT APIを使ってテキスト情報などをファイルに保存する場合のちょっとした注意です。 テキストのファイル保存は、Windows.Storage名前空間のStorageFile、TextWriterクラス等を使います。具体的には、     List<string> statements = …;    StorageFile file = …;    using (var fo = await file.OpenAsync(FileAccessMode.ReadWrite))    {        TextWriter writer = new StreamWriter(fo.AsStreamForWrite());        foreach (var s in statements)        {            await writer.WriteLineAsync(s);        }        writer.Flush();    } こんな感じのコードになります。fileは、FilePickerによるファイル選択やアプリストアから作成してください。注意点として、赤字で書いたステートメントを入れてください。TextWriterはある一定のサイズごとに書き込むようで、Writerに対して書き込んだ情報を物理ストレージに吐き出させるFlushメソッドをコールしないと書き込んだつもりのテキスト情報が全て保存されない場合があります。ファイルに書き込んだはずのデータ量と実際に保存されたファイルのサイズが異なる場合は、この点をチェックしてみてください。

0

WinRT APIでJSONフォーマットをデシリアライズする方法

現在、Twitterのフォロー/フォロワー状況を分析するWindowsストアアプリを作っています。Twitter APIは現在V1.1に移行することを推奨されているので、さぁ使おうとしたら、XML形式でのデータダウンロードはなくなっているんですね。 JSONか…ってことで、このポストではネットなどからダウンロードしたJSONフォーマットのテキストをWinRT APIを使ってC#でデシリアライズする方法を紹介します。 実はとっても簡単、DataContractJsonSerializerクラスを使います。namespaceは、System.Runtime.Serialization.Jsonです。例えばTwitterのFollowerを取得するAPIを使うと、フォローしているユーザーのIDのリストと、2000項目以上のフォロワーがいる場合に、更に情報を取得するためのカーサー情報がJSON形式で受信されます。これを解析するには、     [DataContract]    public class TwitterRelationships    {        [DataMember]        public List<string> ids;        [DataMember]        public int next_cursor;        [DataMember]        public string next_cursor_str;        [DataMember]        public int previous_cursor;        [DataMember]        public string previous_cursor_str;    } という、受信テキストデータに合わせたクラスを定義して、以下を実行します。streamは、例えば、HttpWebResponseのGetResponseStream()メソッドで取得したJSONデータを取り出すストリームです。     var ser = new DataContractJsonSerializer(typeof(TwitterRelationships ));    TwitterRelationships tr = (TwitterRelationships )ser.ReadObject(stream); これでお仕舞。簡単ですね。ちなみにユーザー情報をIDから取得したJSONをデシリアライズするには、     [DataContract]    public class TwitterUserProfile    {        [DataMember]        public string…

0