Windows Phone 8의 .NET 위치 API를 사용하는 방법

2013-12-05

적용 대상: Windows Phone 8 전용입니다.

 
참고참고:

Windows Phone 8 에는 위치 인식 앱을 만들 수 있는 새로운 Windows Phone Runtime API가 제공됩니다. 이 항목의 내용은 Windows Phone OS 7.0 에서 도입되었으며, 계속해서 지원되는 .NET 위치 API에도 적용됩니다. 사용 중인 응용프로그램에 적합한 API 집합에 대한 자세한 내용은 Windows Phone 8의 위치를 참조하세요.

이 항목에서는 위치 서비스를 초기화하고 서비스 상태의 변경 내용을 처리하며 위치 데이터를 가져오는 방법에 대해 설명합니다. 위치 서비스를 사용하는 샘플 응용프로그램에 대해 알아보고 다운로드하려면 위치 서비스 샘플을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

위치 서비스의 관리되는 API를 사용하려면 먼저 System.Device.dll에 대한 참조를 응용프로그램에 추가해야 합니다.

위치 서비스 DLL에 대한 참조를 추가하려면

  1. Visual Studio 에서 신규 또는 기존의 Windows Phone 솔루션을 엽니다.

  2. 프로젝트 메뉴에서 참조 추가…를 선택합니다.

  3. .NET 탭에서 이름이 "System.Device"인 구성 요소를 선택하고 확인을 클릭합니다.

그런 다음 위치 서비스를 사용할 페이지에 대해 .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. StatusChangedPositionChanged 이벤트에 대한 이벤트 처리기를 추가합니다.

        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<T> 개체의 Position 멤버에 액세스합니다. Position 필드는 GeoPosition 개체이며, 표시값에 대한 위치 정보를 포함하는 Timestamp와 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. 위치 서비스가 더 이상 필요하지 않으면 장치의 배터리 수명을 극대화할 수 있도록 위치 서비스를 중지해야 합니다. 이 예제의 경우 사용자가 위치 서비스를 중지할 수 있도록 위치 중지 버튼이 구현됩니다.

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

표시:
© 2014 Microsoft