読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

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

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

Windows Phone

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

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

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

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

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

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

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

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

  IGeoPositionWatcher<GeoCoordinate> _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();
  }

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

参考

関連記事