MSDN ライブラリ

方法: Windows Phone 用の位置情報サービスからデータを取得する

2012/02/09

このトピックでは、位置情報サービスを初期化する方法、サービスの状態の変更を処理する方法、および位置情報データを取得する方法について説明します。位置情報サービスを使用するサンプル アプリケーションを参照およびダウンロードするには、「Windows Phone のコード サンプル」を参照してください。

位置情報サービスのマネージ API を使用するには、最初に System.Device.dll への参照をアプリケーションに追加する必要があります。

位置情報サービス DLL への参照を追加するには

  1. 新規または既存の Windows Phone ソリューションを Visual Studio で開きます。

  2. [プロジェクト] メニューの [参照の追加] をクリックします。

  3. [.NET] タブで、コンポーネント名 "System.Device" を選択し、[OK] をクリックします。

次に、位置情報サービスを使用するページの .xaml.cs ファイルの先頭に using ディレクティブを追加します。

using System.Device.Location;

位置情報サービスにアクセスするために使用する GeoCoordinateWatcher オブジェクトに変数の宣言を追加します。変数のクラス スコープを指定し、ページが表示されている限りメモリに保持されるようにします。

public partial class MainPage : PhoneApplicationPage
{
  GeoCoordinateWatcher watcher;

次のコードでは、位置情報サービスからデータを取得する方法を示します。

位置情報サービスからデータを取得するには

  1. GeoCoordinateWatcher オブジェクトの Start メソッドを使用して、位置情報サービスからのデータの取得を開始します。ページが読み込まれるとすぐにこれを呼び出すことができます。ただし、ユーザーがサービスをいつ開始するかを選択できるようにして、アプリケーションによる電力消費をユーザーがより細かく制御するようにできます。たとえば、ボタン クリック イベントのハンドラーでサービスを開始できます。

    // Click the event handler for the “Start Location” button.
    private void startLocationButton_Click(object sender, RoutedEventArgs e)
    {
      // The watcher variable was previously declared as type GeoCoordinateWatcher. 
      if (watcher == null)
      {
        watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); // using high accuracy
        watcher.MovementThreshold = 20; // use MovementThreshold to ignore noise in the signal
    
  2. StatusChanged イベントおよび PositionChanged イベントのイベント ハンドラーを追加します。

        watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
        watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
      }
    
  3. ここで、位置情報サービスを開始します。このバージョンの Start()()()() メソッドはサービスからデータの取得を非同期に開始するので、アプリケーションがデータの開始と取得を試みている間、ユーザーはアプリケーションの使用を継続できます。

      watcher.Start();
    } // End of the Start button Click handler.
    
  4. StatusChanged イベント ハンドラーを実装します。このイベントは、位置情報サービスの状態が変更するたびに発生します。GeoPositionStatusChangedEventArgs オブジェクトで渡される GeoPositionStatus 列挙値が、サービスの現在の状態を伝えます。これを使用してアプリケーションで位置ベースの機能を有効にし、サービスの現在の状態をユーザーに伝えることができます。サービスの状態が Disabled である場合は、Permission プロパティを確認して、ユーザーがアプリケーションに対して位置情報サービス機能を無効にしたかどうかを調べることができます。

    // Event handler for the GeoCoordinateWatcher.StatusChanged event.
    void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
    {
        switch (e.Status)
        {
            case GeoPositionStatus.Disabled:
                // The Location Service is disabled or unsupported.
                // Check to see whether the user has disabled the Location Service.
                if (watcher.Permission == GeoPositionPermission.Denied)
                {
                    // The user has disabled the Location Service on their device.
                    statusTextBlock.Text = "you have this application access to location.";
                }
                else
                {
                    statusTextBlock.Text = "location is not functioning on this device";
                }
                break;
    
            case GeoPositionStatus.Initializing:
                // The Location Service is initializing.
                // Disable the Start Location button.
                startLocationButton.IsEnabled = false;
                break;
    
            case GeoPositionStatus.NoData:
                // The Location Service is working, but it cannot get location data.
                // Alert the user and enable the Stop Location button.
                statusTextBlock.Text = "location data is not available.";
                stopLocationButton.IsEnabled = true;
                break;
    
            case GeoPositionStatus.Ready:
                // The Location Service is working and is receiving location data.
                // Show the current position and enable the Stop Location button.
                statusTextBlock.Text = "location data is available.";
                stopLocationButton.IsEnabled = true;
                break;
        }
    }
    
    
  5. 位置情報サービスでデータを受け取る準備ができると、PositionChanged イベントの発生を開始し、実装している場合はアプリケーションのハンドラーを呼び出します。イベント ハンドラーで、GeoPositionChangedEventArgs<(Of <(<'T>)>)> オブジェクトの Position メンバーにアクセスします。Position フィールドは GeoPosition オブジェクトであり、タイムスタンプおよび読み取り用の位置情報を含む GeoCoordinate オブジェクトで構成されます。この例では、緯度および経度の値にアクセスします。

    void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
      latitudeTextBlock.Text = e.Position.Location.Latitude.ToString("0.000");
      longitudeTextBlock.Text = e.Position.Location.Longitude.ToString("0.000");
    }
    
  6. デバイスのバッテリーの残量を最大化するため、必要ない場合は位置情報サービスを停止してください。この例では、[Stop Location] ボタンを実装し、ユーザーが位置情報サービスを停止できるようにします。

    // Click the event handler for the “Start Location” button.
    private void stopLocationButton_Click(object sender, RoutedEventArgs e)
    {
      watcher.Stop();
    }
    
    

表示:
© 2016 Microsoft