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(); } ||<
イベントハンドラも共用で使えるようなので、インスタンスの生成時の切り替えだけで実機&シミュレータで可能です。
** 参考