スマホに欠かせない位置情報をWindows Phoneでも
- - PR -
前回の「Windows PhoneをShake!加速度センサアプリを作る」では、加速度センサを利用してオブジェクトを操作したり、端末をシェイクしてイベントを実行する方法を紹介しました。今回はGPSを使って、位置情報を取得する方法を紹介します。
スマートフォンの最も便利な機能の1つに、地図を使った現在地周辺の施設検索があります。iPhoneやAndroidではGoogle Maps、Windows PhoneではBing Mapsがデフォルトで用意されています。また、TwitterやFacebookといった主要なソーシャルネットワーク/SNSでも位置情報が使われています。
もはやスマートフォンに位置情報は欠かせない機能になっています。Windows Phoneでは、そんな位置情報も簡単に取得、シミュレーションできます。
位置情報を取得するには
はじめに、経度緯度の値を取得しましょう。Expression BlendでWindows Phoneプロジェクトを作成し、TextBlockを2つ並べて、それぞれに「Latitude」「Longitude」と名前を付けます。
![]() |
| 値を表示するTextBlockを設置 |
プロジェクトをVisual Studioで開き、参照設定にSystem.Device.dllを追加します。
![]() |
| System.Device.dllを参照に追加 |
MainPage.xaml.csを開き、usingを追加します。
using System.Device.Location;この画面に遷移したときに位置情報を使用するように記述します。
GeoCoordinateWatcher geoWatcher = new GeoCoordinateWatcher();
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
geoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher_PositionChanged);
geoWatcher.Start();
}
void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
Dispatcher.BeginInvoke(()=>
Latitude.Text = e.Position.Location.Latitude.ToString()
);
Dispatcher.BeginInvoke(()=>
Longitude.Text = e.Position.Location.Longitude.ToString()
);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
geoWatcher.Stop();
}
遷移時のイベントには、OnNavigatedToを用います。geoCoordinateWatcherをインスタンス化し、Positionが変わるごとにgeoWatcher_PositionChangedが実行されます。
geoWatcher_PositionChangedの引数「e」から値を取得できますが、センサはUIスレッドとは別のスレッドで動作しているため、Dispatcher.BeginInvokeを使ってアクセスします。
以下がコードの全文です。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Device.Location;
namespace GPSLocation
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
}
GeoCoordinateWatcher geoWatcher = new GeoCoordinateWatcher();
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
geoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher_PositionChanged);
geoWatcher.Start();
}
void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
Dispatcher.BeginInvoke(()=>
Latitude.Text = e.Position.Location.Latitude.ToString()
);
Dispatcher.BeginInvoke(()=>
Longitude.Text = e.Position.Location.Longitude.ToString()
);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
geoWatcher.Stop();
}
}
}
実機で実行してみましょう。端末に現在の経度緯度が表示されると思います。
![]() |
| 実行結果:取得した経度緯度をテキストで表示 |
次ページでは、位置情報をシミュレートしたり、現在地を取得して地図で確認したりします。
| 1/3 |
|
|||||||||||
Silverlightベースで作るWP7アプリ開発入門 バックナンバー 連載インデックスへ»
- 第1回 iOS/AndroidとWindows PhoneのUI、ここまで違う!
- 第2回 Windows Phoneの色使いとTileをアプリに生かせ!
- 第3回 PanoramaでWindows Phoneならではの横スクロール
- 第4回 Windows PhoneのMetro UIをタッチでジェスチャ操作
- 第5回 Windows Phone開発情報“まとめ”とプロトタイピング
- 第6回 [応用編]RSSリーダーWindows Phoneアプリの作り方
- 第7回 Windows Phoneで動くカメラアプリ作成の基礎知識
- 第8回 Windows PhoneをShake!加速度センサアプリを作る
- 第9回 スマホに欠かせない位置情報/地図を使うアプリを作る
- 第10回 Windows Phoneアプリの要「ビヘイビア」の基礎知識
| ご意見、ご感想は Smart&Social 会議室へどうぞ |
| Smart&Social フォーラム トップページへ |
TechTargetジャパン
- JenkinsでCIすればAndroidアプリ開発はもう怖くない (2012/5/23)
Androidアプリ開発における継続的インテグレーションの重要性やJenkinsの利点を解説し、環境構築の仕方や使い方の手順を紹介します - Open Graphアプリを作りApp Centerに登録するには (2012/5/18)
ユーザーの活動を共有できるFacebookの新機能を使ったアプリの開発方法と新しいアプリストアへの登録手順を解説 - Bootstrap、Hogan.js、FinagleなどTwitter系OSS (2012/5/15)
Twitterのアーキテクチャやオープンソースへの取り組みなどの講演模様をお届け。OpenJDKやStorm、Gizzard、Twitter4Jも注目 - ソーシャルゲーム/スマホ開発イベント記事が人気 (2012/5/11)
4月はソーシャルゲームの開発者向けイベントや、Webとネイティブの対決が熱かった! UnityやPerfumeも見逃せない!?
|
|
キャリアアップ
スポンサーからのお知らせ
イベントカレンダー
- - PR -




