Windows 7でセンサや位置情報を使うアプリを作ろう:楽しいWindows 7アプリ作成入門(2)
「あんなこといいな」「できたらいいな」というアイデアをWindows 7の表現力で具体的な“アプリ”という形にするには、どうすればいいのだろうか? 具体的なコードやデモとともに一から教えます
マイクロソフトは2月23〜24日に、開発者向けイベント「Tech Days 2010」をお台場で開催した。本稿では、セッション「Windows 7 アプリケーション開発実践」から、Windows 7の「センサー&ロケーション」機能を生かした楽しいアプリを作成するための実践的な入門方法を紹介する。
セッションの講演者は以下のとおり。
Windows 7の「センサー&ロケーション」とは
Windows 7に備わる「センサー&ロケーション」プラットフォームは、さまざまなセンサデバイスが取得した情報やGPSなどのロケーション情報を活用する共通の基盤だ。.NET Framework 4/WPF 4で簡単にデータを活用できるAPI群を有するという。
太田氏は、「従来のIT技術はどちらかというと、時間と空間の制約をなくす方向に進化してきたと思うが、さまざまな現実の感覚の情報を取り込み、バーチャルとリアルを融合することで新しいアイデアを活用する場を広げることができる」と強調した。
「センサー&ロケーション」プラットフォームのイメージ(講演資料より)
.NET Framework 4/WPF 4は、イベント開催時にベータ2版となっていたが、より実装が簡単なWPF 4を使う方法が紹介された。.NET Framework 4とWPF 4開発に役立つVisual Studio 2010については、下記記事を参考にしてほしい。
WPF 4におけるタッチ操作は、タッチ機能とマニピュレーション機能の2つに大別される。
ロケーション(位置情報)取得アプリを作るには
太田氏は、まず、GPSなどを使ってロケーション(位置情報)を取得するアプリの作成について解説した。
ロケーションを取得するには、.NET Framework 4で提供されるSystem.Device.Locationという名前空間を使用することにより、マネージド・コードでの簡単なプログラミングで可能だ。
取得できる位置情報は、GPSなどで取得する緯度・経度といった物理的な情報に加え、地名など論理な情報も含む。
使うには、GeoLocationProviderのインスタンスを作り、位置情報が変化するときをイベントとするハンドラを登録し、GeoLocationProviderをstartする。C#のコードでは以下のようになっている。
位置情報が変わると、LocationChangedメソッドが呼び出され、引数のLocationプロパティをGeoCoodinateクラスのインスタンスに格納する。そこから、緯度(latitude)・経度(longitude)を取得できる。また、引数のLocationプロパティからは、位置情報が変わったときの時間も取得できる。
太田氏は、GPSを使って位置情報を取得してBing Maps上に表示するWPFアプリのデモを行った。
脳波も使える! センサでできることは、こんなにある
次に太田氏は、センサで広がるPCの可能性として、以下のものを挙げた。
- 人感センサ
- オフィスの座席のプレゼンス情報
- ディスプレイの自動OFF→エコにつなげる
- 加速度センサ
- モーションによる自然なユーザーインターフェイス
- 温度センサ
- 室内温度計測と、パーソナル空調制御
- 電力センサ
- 家電エコ
- 脳波センサ
- メンタルトレーニング
- マーケティングの効果測定
「従来だと、家電メーカーやセンサメーカー独自のSDK/APIを使って、それぞれのデバイスのためのソフトウェアを作ることになる。大抵の場合、非公開で作るのが難しかったが、Windows 7の「センサー&ロケーション」APIに対応していただくだけで、ソフトウェアベンダやサンデープログラマの方でもアプリケーションを作れるようになった」(太田氏)
また太田氏は、現在の「センサー&ロケーション」APIで、どんなセンサが対応しているかを表にまとめて提示した。
これらは、Windows 7 SDKのSensors.hファイルで定義されているが、独自のカテゴリやタイプを拡張することも可能だという。
センサは「Windows API Code Pack」を使うと簡単だ
実際にアプリケーションを作成するには、どうすればいいのだろうか。「センサー&ロケーション」はCOMのAPIで定義されている。ロケーションは前述のとおり、.NET Framework 4の名前空間で定義されているが、センサはC++のコーディングが必要となる。
C++のコーディングが大変だという方は、Windows 7の新機能をC#やVBから利用しやすくした「Windows API Code Pack for Microsoft .NET Framework」を使うとよい。
Sensors名前空間には、照度センサ用のAmbientLightSensor、タッチセンサ用のBooleanSwithArray、3次元加速度センサ用のAccelerometer3Dなどがデフォルトで入っている。
高橋氏は「一応マイクロソフトが提供するライブラリだが、ちゃんとした製品サポートはされていないので、ご注意を」と付け加えた。「Windows API Code Pack」の使い方は下記記事を参考にしてほしい。
センサを使ったアプリを作るには
「Windows API Code Pack」を使ってセンサデータを取得するには、まずSensorManagerクラスのGetAllSensorsメソッドを使うと、Sensorクラスのインスタンスを取得する。そして、SensorのStateプロパティがReadyのものだけをif文で取得すればよい。センサの状態が変化したときのために、イベントハンドラ「SensorChanged」を登録する必要もある。
また、あらかじめGetSensorByTypeIDメソッドでセンサのタイプを指定して使うこともできる。以下のコード例では、3次元加速度センサの現在値を取得し、DataReportChangedというイベントハンドラに登録している様子が示されている。
太田氏は、人感センサを使って、人がいるかどうかによって「います」「いません」とテキストデータを切り替える簡単なWPFアプリのデモを行った。
脳波などを使うセンサアプリのコードや動画
さらに「センサー&ロケーション」の使い方を知りたいという方は、以下のリンクより詳細なコードや解説を取得できる。
また、実際に動きを見てみたい方は、以下のリンクより太田氏のデモが見られるので、確認できる。
本稿や、これらの情報により、楽しいWindows 7アプリに興味を持った方はぜひ、作成を始めてみてはいかがだろうか。
@IT関連記事
組み込みで使えるWindows 7の新機能トップ7
特集:組み込みOSの新潮流 −Windows 7− あらためてWindows Embeddedの製品ラインアップを整理するとともに、組み込み分野で使えるWindows 7の機能を紹介する!!
MONOist > 組み込み開発 2009/11/10
簡単!Visual Studio 2008入門
プログラムはどうやって作るの? 開発ツールはどうやって使うの? 今春ゼロから始める新人プログラマのための連載スタート
「Insider.NET」フォーラム
.NETの動作原理を基礎から理解する!
Windows上でプログラムはどのようにして起動されるのか。.NETアプリが起動されるまでをつぶさに追跡してみよう
「Insider.NET」フォーラム
VS 2010で独自の[スタート ページ]を作ろう!
Visual Studio 2010新機能ピックアップ 多くの.NET開発者にとって、今年最大の関心事はVisual Studio 2010。ベータ2のいまから試してみよう。手始めにこの機能を試す
「Insider.NET」フォーラム 2010/1/6
現場開発者から見たVisual Studio 2010
特集:Visual Studio 2010で効率的な開発を! 米国で4月12日にローンチされるVS 2010。そのVS 2010を活用した効率的な開発方法を、既存の.NET開発者向けに紹介
「Insider.NET」フォーラム 2010/1/19
Vista時代のWindowsアプリ・デザイン・ツール
特集:Expression Blendで始めるWPFアプリ(前半) Vistaに搭載されているWPFにより、Windowsアプリケーションが大きく変わる。その設計ツールがExpression Blendだ
「Insider.NET」フォーラム 2007/3/301
プロトタイプ機能を備えた“本物”のデザイナーのツール
Expression Blend 3+SketchFlowを使ってみた 先日発表された最新デザインツールについて、主な新機能6つと、Silverlightアプリに肉付けできるプロトタイプ機能を紹介
デザインハック < リッチクライアント 2009/7/27
Silverlight制作をデザイナと開発者でコラボしてみた
実録:デザイナ×開発者コラボを成功するポイントとは Expression Blend×Visual Studioのコラボは本当に簡単なのか? 面白コンテンツの制作過程をドキュメントでお届け
デザインハック < リッチクライアント 2009/9/7
Copyright © ITmedia, Inc. All Rights Reserved.