ダウンロード GeolocatorSample.zip (37.8 KB)
ダウンロード InclinometerSample.zip (56.0 KB)
ダウンロード LightSensorSample.zip (37.2 KB)
ダウンロード OrientationSensorSample.zip (39.0 KB)
位置情報
位置情報は端末の位置を取得します。端末の位置を取得するには、これまでのセンサーとは異なり、マニフェストファイルに「アプリケーションが位置情報を利用すること」を指定する必要があります。
マニフェストに指定された情報(今回の場合は「アプリケーションが位置情報を取得すること」)は、ユーザーがアプリケーションをストアからインストールする際に表示されます。
マニフェストに記載する
マニフェストはPackage.appxmanifestファイルに記載します。
Package.appxmanifestの「機能」タブの左側にある機能の一覧から「場所」にチェックを入れます。
Package.appxmanifestにチェックがない場合、後述するPositionChangedイベントが発生せず、位置情報は取得できません。
位置情報を取得する
(サンプルファイル:「GeolocatorSample.zip」)
これから位置情報を取得するサンプルを紹介しますが、その前に、位置情報をアプリが利用する場合、アプリケーションの起動時に以下の画像のように、ユーザーに「アプリケーションが位置情報を利用することへの許可」を求めるポップアップが表示されることを知っておきましょう。
ポップアップで「許可」をユーザーが選ぶことで、アプリケーションは初めて位置情報が利用可能になります。
ユーザーがアプリケーションによる位置情報利用を許可した場合、以下のコードで位置情報が利用可能になります。
// Geolocatorの生成 this._locator = new Geolocator(); // インターバルをミリ秒で指定 this._locator.ReportInterval = 1000; // 値の変更と状態の変更を取得するイベントハンドラーをセット this._locator.PositionChanged += _locator_PositionChanged; this._locator.StatusChanged += _locator_StatusChanged;
PositionChangedとStatusChangedイベントハンドラーで値を取得します。
async void _locator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
{
var status = args.Status;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
this.status.Text = status.ToString();
});
}
async void _locator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
var geoInfo = await this._locator.GetGeopositionAsync();
var civic = geoInfo.CivicAddress;
var coordinate = geoInfo.Coordinate;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
if (civic != null)
{
this.country.Text = civic.Country;
}
else
{
this.country.Text = "null";
}
this.accuracy.Text = coordinate.Accuracy.ToString();
this.altitude.Text = coordinate.Point.Position.Altitude.ToString();
this.latitude.Text = coordinate.Point.Position.Latitude.ToString();
this.longitude.Text = coordinate.Point.Position.Longitude.ToString();
this.heading.Text = coordinate.Heading.ToString();
});
}
StatusChangedイベントハンドラー
StatusChangedイベントハンドラーは状態が変更になると呼ばれます。StatusChangedEventArgsのStatusプロパティからPositionStatus列挙型で取得でき、以下の値を持ちます。
PositionStatus.ready
位置情報を取得する準備ができた状態です。
PositionStatus.initializing
位置情報センサーが初期化中の状態です。
PositionStatus.noData
まだ値を取得していない状態です。GeolocatorのLocationStatusプロパティに格納されている値です。
PositionStatus.disabled
ユーザーが許可を位置情報利用の許可を与えていない場合は、この値になります。
PositionStatus.notInitialized
位置情報センサーが未初期化の状態です。GeolocatorのLocationStatusプロパティに格納されている値です。
PositionStatus.notAvailable
センサーは該当端末では利用できません。
PositionChangedイベントハンドラー
PositionChangedイベントハンドラーは位置情報の変更を取得します。GetGeopositionAsync()メソッドから取得でき位置情報は以下のプロパティを持ちます。
CivicAddress
都市情報です(例:JP)。
Coordinate
さまざまな位置情報です。緯度(latitude)、経度(longitude)、高度(altitude)、方角(heading)などがここから取得できます。
まとめ
今回は前編・後編にわたって端末に備えられたセンサーについて紹介してきました。センサーを利用することで、モバイルデバイスならではの機能が実装できますので、ぜひ、センサーを用いた面白いアプリケーションをどんどん作成してください。
Windows Phone(スマートフォン)であればある程度のセンサーの搭載は必須の要件として保証されていますが、タブレット、ノートPC、デスクトップPCと用途がさまざまなWindows 8.1端末では、センサーが必ずしも使えるとは限らないのでセンサーの有無を確認するようにしましょう。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- 速習 Windowsストアアプリケーション連載記事一覧
-
- サーバーと連携するWindowsストアアプリを作成する(後編)
- サーバーと連携するWindowsストアアプリを作成する(前編)
- センサーに対応したWindowsストアアプリを作成する(後編)
- この記事の著者
-
西村 誠(ニシムラ マコト)
Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

