Проблема в получении широты и долготы в приложении Windows Phone 7 - PullRequest
0 голосов
/ 08 сентября 2011

Я использую класс GeoCoordinateWatcher для получения широты и долготы Windows Phone 7, но когда я отлаживаю это приложение на моем Windows Phone, я получаю GeoPositionStatus.NoData в моем событии StatusChanged.Подскажите пожалуйста, что не так со следующим кодом.

GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
watcher.MovementThreshold = 10.0f;
// wire up event handlers
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_statusChanged);
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);

void watcher_statusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
    switch (e.Status)
    {
        case GeoPositionStatus.Disabled:
            if (watcher.Permission == GeoPositionPermission.Denied)
            {
                // the user has disabled LocServ on their device.
                statusTextBlock.Text = "You have disabled Location Service.";
            }
            else
            {
                statusTextBlock.Text = "Location Service is not functioning on this device.";
            }
        break;

        case GeoPositionStatus.Initializing:
            // The location service is initializing.
            statusTextBlock.Text = "Location Service is retrieving data...";
        break;

        case GeoPositionStatus.NoData:
            // The Location Service is working, but it cannot get location data
            // due to poor signal fidelity (most likely)
            statusTextBlock.Text = "Location data is not available.";
        break;

        case GeoPositionStatus.Ready:
            // The location service is working and is receiving location data.
            statusTextBlock.Text = "Location data is available.";
        break;
    }
}

void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs <GeoCoordinate> e)
{
    // update the textblock readouts.
    latitudeTextblock.Text = e.Position.Location.Latitude.ToString("0.0000000000");
    longitudeTextblock.Text = e.Position.Location.Longitude.ToString("0.0000000000");
    speedreadout.Text = e.Position.Location.Speed.ToString("0.0") + " meters per second";
    coursereadout.Text = e.Position.Location.Course.ToString("0.0") + " degrees";
    altitudereadout.Text = e.Position.Location.Altitude.ToString("0.0") + " meters above sea level";
}

Ответы [ 2 ]

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

Я вижу, что вы обнаружили, что службы определения местоположения были отключены. Но следует иметь в виду, что при сертификации они проверят, сможет ли ваша программа справиться с таким сценарием. При запуске службы определения местоположения вы можете увидеть, отключена ли она.

watcher.Start (); bool IsLocationServicesTurnedOff = (watcher.Permission == GeoPositionPermission.Denied);

Также помните, что в Mango ваша программа может быть приостановлена, службы определения местоположения отключены, а ваша программа возобновлена. Другими словами, службы определения местоположения могут быть отключены в любое время в течение срока действия вашей программы.

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

Вы должны запустить наблюдателя.

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