はじめに
11月8日にWindows Phone 7がアメリカ、
そのほか、
- AutoCompleteBox
-
テキストを一文字入力するたびに検索結果の候補を絞り込むインクリメンタルサーチ機能を提供するコントロールです。
図1 インクリメンタルサーチ機能 - LongListSelector
-
インデックスの項目を選択してジャンプする機能を持ったインデックス付きリスト表現を行うコントロールです。
図2 インデックスで分割されたリストとジャンプ機能 - ListPicker
-
複数の項目から一つを選択する場合などに使用できるコントロールです。
図3 色をピックアップするリストの例 - Page Transitions
-
Roll、
Rotate、 Slide、 Swivel、 Turnstileの基本的な5パターンの画面遷移アニメーションを提供します。 図4 TurnstileとRollアニメーション
「Silverlight for Windows Phone Toolkit - Nov 2010」
地図上に線を引く
マップ上に線を引く場合は、
ただ、
var polyline = new Microsoft.Phone.Controls.Maps.MapPolyline()
{
Locations = new LocationCollection(),
Stroke = new SolidColorBrush(Colors.Red),
StrokeThickness = 5
};
polyline.Locations.Add(startLocation);
polyline.Locations.Add(endLocation);
map1.Children.Add(polyline);
![図5 地図上に線を引いてみた例 図5 地図上に線を引いてみた例](/assets/images/dev/serial/01/windows-phone/0022/thumb/TH200_005.png)
GPSのロギングを行う
前回位置情報を取得したのと同じく、
GeoCoordinateWatcher watcher;
private void btnLocation_Click(object sender, EventArgs e)
{
// GeoCoordinateWatcherの初期化を行う
watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
// 10m移動したら反応
watcher.MovementThreshold = 10;
// 位置が変更された(PositionChanged)イベントをイベントハンドラに追加する
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
// データの取得を開始する
watcher.Start();
}
前回の位置情報を記憶しておき、
GeoCoordinate backCoordinate;
// PositionChangedイベントハンドラから呼ばれるカスタムメソッド
void MyPositionChanged(GeoPosition<GeoCoordinate> e)
{
// データを取得した位置を中心にする
map1.Center = e.Location;
// 現在地にピンを立てる
var pin = new Microsoft.Phone.Controls.Maps.Pushpin()
{
Background = new SolidColorBrush(Colors.DarkGray),
Location = e.Location
};
map1.Children.Add(pin);
if (backCoordinate != null)
{
// 線を引く
var polyline = new Microsoft.Phone.Controls.Maps.MapPolyline()
{
Locations = new LocationCollection(),
Stroke = new SolidColorBrush(Colors.Red),
StrokeThickness = 5
};
polyline.Locations.Add(backCoordinate);
polyline.Locations.Add(e.Location);
map1.Children.Add(polyline);
}
// 今回の位置情報を記録しておく
backCoordinate = e.Location;
}
阪急十三駅からJR塚本駅まで移動したときのログを元に、
![図6 きちんと歩いたログが表示されています 図6 きちんと歩いたログが表示されています](/assets/images/dev/serial/01/windows-phone/0022/thumb/TH250_006.png)
Windows Mobile 6でGPSの位置情報を取得する
おまけにWindows Mobile 6で位置情報を取得する方法についてご紹介したいと思います。Windows Phone 7のように優れたロケーションサービスがなく、
Windows Mobile 6では、
ソリューションエクスプローラーから以下のプロジェクトを追加します。Visual Studio 2008を使ってWindows Mobile 6アプリケーションを開発されている方は、
%ProgramFiles%\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS
位置情報を取得する
Windows Mobile 6アプリケーションプロジェクトから、
GPSクラスのインスタンスを生成して、
このGPSクラスは内部的にCOMポートをポーティングして、
private void button_Click(object sender, EventArgs e)
{
Microsoft.WindowsMobile.Samples.Location.Gps gps
= new Microsoft.WindowsMobile.Samples.Location.Gps();
try
{
// 測位を開始するためにGPSデバイスのポートを開きます
gps.Open();
while (gps.GetDeviceState().DeviceState != GpsServiceState.On)
{
// 位置情報を取得できるようになるまでウェイト
System.Threading.Thread.Sleep(1000);
}
// 位置情報を取得
Microsoft.WindowsMobile.Samples.Location.GpsPosition pos
= gps.GetPosition();
}
finally
{
// 測位を終了するためにGPSデバイスのポートを閉じます
gps.Close();
}
}
SDKのサンプルコードとはいえ、
さいごに
Windows Mobile 6とWindows Phone 7で、
Microsoftは積極的にローカライズを進めていると発表しているので、
以上で今回は終わりです。ありがとうございました。