連載
» 2010年04月14日 00時00分 公開

楽しいWindows 7アプリ作成入門(2):Windows 7でセンサや位置情報を使うアプリを作ろう

「あんなこといいな」「できたらいいな」というアイデアをWindows 7の表現力で具体的な“アプリ”という形にするには、どうすればいいのだろうか? 具体的なコードやデモとともに一から教えます

[@IT編集部,@IT]

 マイクロソフトは2月23〜24日に、開発者向けイベント「Tech Days 2010」をお台場で開催した。本稿では、セッション「Windows 7 アプリケーション開発実践」から、Windows 7の「センサー&ロケーション」機能を生かした楽しいアプリを作成するための実践的な入門方法を紹介する。

 セッションの講演者は以下のとおり。

マイクロソフト デベロッパー&プラットフォーム統括本部 UXテクノロジー推進部 エンベッドデベロッパーエバンジェリスト 太田寛氏,


マイクロソフト デベロッパー&プラットフォーム統括本部のカスタマーテクノロジー推進部 アーキテクチャエバンジェリスト 高橋忍氏,

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という名前空間を使用することにより、マネージド・コードでの簡単なプログラミングで可能だ。

「System.Device.Location」名前空間(講演資料より) 「System.Device.Location」名前空間(講演資料より)

 取得できる位置情報は、GPSなどで取得する緯度・経度といった物理的な情報に加え、地名など論理な情報も含む。

 使うには、GeoLocationProviderのインスタンスを作り、位置情報が変化するときをイベントとするハンドラを登録し、GeoLocationProviderをstartする。C#のコードでは以下のようになっている。

位置情報を取得するためのC#コード(講演資料より) 位置情報を取得するためのC#コード(講演資料より)

 位置情報が変わると、LocationChangedメソッドが呼び出され、引数のLocationプロパティをGeoCoodinateクラスのインスタンスに格納する。そこから、緯度(latitude)・経度(longitude)を取得できる。また、引数のLocationプロパティからは、位置情報が変わったときの時間も取得できる。

 太田氏は、GPSを使って位置情報を取得してBing Maps上に表示するWPFアプリのデモを行った。

位置情報を取得するWPFアプリのデモ 位置情報を取得するWPFアプリのデモ

脳波も使える! センサでできることは、こんなにある

 次に太田氏は、センサで広がるPCの可能性として、以下のものを挙げた。

  • 人感センサ
    • オフィスの座席のプレゼンス情報
    • ディスプレイの自動OFF→エコにつなげる
  • 加速度センサ
    • モーションによる自然なユーザーインターフェイス
  • 温度センサ
    • 室内温度計測と、パーソナル空調制御
  • 電力センサ
    • 家電エコ
  • 脳波センサ
    • メンタルトレーニング
    • マーケティングの効果測定

「従来だと、家電メーカーやセンサメーカー独自のSDK/APIを使って、それぞれのデバイスのためのソフトウェアを作ることになる。大抵の場合、非公開で作るのが難しかったが、Windows 7の「センサー&ロケーション」APIに対応していただくだけで、ソフトウェアベンダやサンデープログラマの方でもアプリケーションを作れるようになった」(太田氏)

 また太田氏は、現在の「センサー&ロケーション」APIで、どんなセンサが対応しているかを表にまとめて提示した。

Windows 7 SDK対応センサリスト(講演資料より) Windows 7 SDK対応センサリスト(講演資料より)

 これらは、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」を使うとよい。

「Windows API Code Pack」のSensors名前空間(講演資料より)(画像をクリックすると、拡大します) 「Windows API Code Pack」のSensors名前空間(講演資料より)(画像をクリックすると、拡大します)

 Sensors名前空間には、照度センサ用のAmbientLightSensor、タッチセンサ用のBooleanSwithArray、3次元加速度センサ用のAccelerometer3Dなどがデフォルトで入っている。

 高橋氏は「一応マイクロソフトが提供するライブラリだが、ちゃんとした製品サポートはされていないので、ご注意を」と付け加えた。「Windows API Code Pack」の使い方は下記記事を参考にしてほしい。

センサを使ったアプリを作るには

 「Windows API Code Pack」を使ってセンサデータを取得するには、まずSensorManagerクラスのGetAllSensorsメソッドを使うと、Sensorクラスのインスタンスを取得する。そして、SensorのStateプロパティがReadyのものだけをif文で取得すればよい。センサの状態が変化したときのために、イベントハンドラ「SensorChanged」を登録する必要もある。

センサデータを取得するためのC#コード(講演資料より) センサデータを取得するためのC#コード(講演資料より)

 また、あらかじめGetSensorByTypeIDメソッドでセンサのタイプを指定して使うこともできる。以下のコード例では、3次元加速度センサの現在値を取得し、DataReportChangedというイベントハンドラに登録している様子が示されている。

3次元加速度センサを使うためのC#コード(講演資料より) 3次元加速度センサを使うためのC#コード(講演資料より)

 太田氏は、人感センサを使って、人がいるかどうかによって「います」「いません」とテキストデータを切り替える簡単なWPFアプリのデモを行った。

デモに使った人感センサ デモに使った人感センサ
人感センサを使うためのC#コード例 人感センサを使うためのC#コード例

脳波などを使うセンサアプリのコードや動画

 さらに「センサー&ロケーション」の使い方を知りたいという方は、以下のリンクより詳細なコードや解説を取得できる。

 また、実際に動きを見てみたい方は、以下のリンクより太田氏のデモが見られるので、確認できる。

 本稿や、これらの情報により、楽しい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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。