Возврат данных о местоположении из события GeoCoordinateWatcher.StatusChanged в Windows Phone 7 - PullRequest
0 голосов
/ 16 сентября 2011

Я пишу приложение для Windows Phone, где мне нужно узнать местоположение пользователя.Я пытаюсь сделать это хорошим способом (насколько я могу), используя отдельный класс, где я запрашиваю GeoCoordinateWatcher для данных о местоположении и возвращаю эти данные вызывающему методу.

ПроблемаЯ не знаю, как вернуть структуру LocationData вызывающему методу из события StatusChanged GeoCoordinateWatcher.Смотрите код и комментарии:

public struct LocationData
{
    public string latitude;
    public string longitude;
}


public class LocationService : GeoCoordinateWatcher
{
    private GeoCoordinateWatcher watcher;

    private LocationData StartLocationWatcher()
    {
        LocationData ld = new LocationData();

        // The watcher variable was previously declared as type GeoCoordinateWatcher.
        if (watcher == null)
        {
            watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
        }

        watcher.MovementThreshold = 20; // Use MovementThreshold to ignore noise in the signal.

        watcher.StatusChanged += (o, args) =>
            {
                switch (args.Status)
                {
                    case GeoPositionStatus.Ready:
                       // Use the Position property of the GeoCoordinateWatcher object to get the current location.
                       GeoCoordinate co = watcher.Position.Location;

                       ld.latitude = co.Latitude.ToString("0.000");
                       ld.longitude = co.Longitude.ToString("0.000");

                       //Stop the Location Service to conserve battery power.

                       watcher.Stop();
                       break;
               }
           };

        watcher.Start();
        return ld; //need to return this to the calling method, with latitude and longitude data taken from GeoCoordinateWatcher
    }
}

1 Ответ

1 голос
/ 16 сентября 2011

Я не уверен, что это то, что вы ищете.

Зарегистрируйте событие PositionChanged:

Вы должны добавить прослушиватель событий для запуска извлечения местоположения

GeoCoordinateWatcher.PositionChanged += GeoCoordinateWatcherPositionChanged;

private void GeoCoordinateWatcherPositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    var currentLatitude = e.Position.Location.Latitude;
    var currentLongitude = e.Position.Location.Longitude;
}

Подробнее горит, когда PositionChanged сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...