酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでGPSをシミュレートする(Windows Phone 7エミュレータ編)

GPSデバイスから位置情報を取得するデバッグは、基本的にWindows Phone 7の実機が無いと出来ません。そこでtmytさんが、エミュレータのホストマシンとHTTPで通信を行い、Windows Phone 7エミュレータでGPSの位置情報を扱う方法を以前公開されていました。

-実世界のGPSをエミュレートしてみる - tmytのらくがき

仕組みはというと前述した通り、GPS機器からLocation APIを使って位置情報を取得して、SilverlightアプリからはHttpGeoLocationを使ってホストマシンからデータを受け取っています。

内部的には同じことをやっているだろうGPS エミュレータが、AppHub公式ツールとしてリリースされました。

-http://create.msdn.com/en-us/education/catalog/article/GPS-Emulator

こちらはGPS機器を使いません。Bing Maps上で開始地点を選択し、地図上をクリックしていくだけでルートリストを作ってくれます。

Windows Phone エミュレータからHttpにてリクエストがあれば、現在地点を返すところはtmytさんのツールを同様です。動きのイメージとしては以下のような感じです。

ルートリストを作り終わったら、Windows Phone GPS Emulatorの左下にあるSimulation Startをクリックします。あとは時間を追うごとに指定したルート通りにWindows Phone GPS Emulatorの矢印が移動します。この時、Windows Phone エミュレータから位置情報を取得していた場合は、連動してマーカーが動きます。

これで実機がなくてもGPSを使ったアプリの開発が可能になりましたね。

GeoCoordinateWatcherクラスを生成する際に、以下のコードを追加します。動作している端末が実機(Device)かエミュレータ(Emulator)かを判別して、GpsEmulatorClient名前空間のコードを使うようにします。

|cs| IGeoPositionWatcher Watcher; if (Microsoft.Devices.Environment.Devicetype == Microsoft.Devices.DeviceType.Device) { // 実機上なのでSystem.Device.Location名前空間の標準の方を使う Watcher = new System.Device.Location.GeoCoordinateWatcher(); } else { // エミュレータ上なのでGPS Emulatorの方を使う _Watcher = new GpsEmulatorClient.GeoCoordinateWatcher(); } ||<

イベントハンドラも共用で使えるようなので、インスタンスの生成時の切り替えだけで実機&シミュレータで可能です。

** 参考

関連記事