Местоположение всегда возвращает «Неизвестно»

#windows-phone-7 #geolocation

#windows-phone-7 #геолокация

Вопрос:

Я только что попробовал свое первое приложение WP7 на реальном устройстве. Моя проблема в том, что я использую геолокацию для одной из функций, но я всегда получаю местоположение неизвестно. Я не знаю, есть ли какой-либо способ предоставить разрешения на местоположение моему приложению или я чего-то не хватает. В настройках телефона службы определения местоположения включены, и приложение Maps работает без каких-либо проблем с определением моего фактического местоположения. Я проверил GeoCoordinateWatcher.Свойство Permisson и его значение «Предоставлено». У меня уже есть эта строка <Capability Name="ID_CAP_LOCATION"/> в WMAppManifest.xml.

Есть идеи по его решению?

[ПРАВИТЬ]

Вот мой код. Я добавил стартовую строку после того, как вы сказали мне сделать это, но у меня все еще возникает проблема.

  string location = "41,0";
 GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
 watcher.Start();
 var myPosition = watcher.Position;

 if (!myPosition.Location.IsUnknown) {
 location = myPosition.Location.Latitude   ","    myPosition.Location.Longitude;
  

}

Комментарии:

1. Можете ли вы предоставить код, который вы используете для получения информации о местоположении? Также что делает ваш WMAppManifest.xml как выглядит?

2. Вызывали ли вы Start () в используемом вами экземпляре GeoCoordinateWatcher? Вы также можете проверить советы Хайме Родригеса , чтобы узнать, что это значит.

3. Я отредактировал сообщение, чтобы показать вам свой код. Я использовал его в этом руководстве: channel9.msdn.com/Series/… Мой манифест используется по умолчанию.

Ответ №1:

Подождите, пока службы определения местоположения будут готовы. Ваш GeoCoordinateWatcher имеет событие для изменения статуса и другое для изменения местоположения. Ваш код должен выглядеть следующим образом.

 //this goes somewhere in your startup sequence
_geoCoordinateWatcher.StatusChanged  = 
  new EventHandler<GeoPositionStatusChangedEventArgs>(_gcw_StatusChanged);
_geoCoordinateWatcher.PositionChanged  = 
  new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(_gcw_PositionChanged);
_geoCoordinateWatcher.MovementThreshold = 50; //metres
_geoCoordinateWatcher.Start();

...

static void _gcw_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
  if (e.Status == GeoPositionStatus.Ready)
    PhoneApplicationService.Current.State["CurrentLocation"] = 
      _geoCoordinateWatcher.Position.Location;
}

static void _gcw_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
  PhoneApplicationService.Current.State["CurrentLocation"] = e.Position.Location;
}
  

Поскольку у вас, похоже, какие-то проблемы, я предлагаю вам начать с добавления поля сообщения в событие изменения статуса, чтобы вы могли определить, срабатывает ли оно на вашем телефоне, и как только вы это отсортируете, попробуйте изменить местоположение и т.д.

Кроме того, вы пробовали выходить на улицу? Вы можете не получить блокировку GPS внутри, а местоположение вышки сотовой связи не всегда работает. Выйдите на улицу и держитесь подальше от высоких зданий. Если вы живете в высотном здании, выйдите на балкон или (что лучше всего) на крышу.

Комментарии:

1. Спасибо за вашу помощь. Я работал над другими проектами, и мне пришлось отказаться от этого, но я работаю над ним снова. Я пробовал ваш код, но поскольку я новичок, я не знаю, как объявить некоторые переменные, на которые жалуется visual Studio. Я выполнил поиск в Google и попал на эту страницу: codeproject.com/Articles/134982/… Я также не получаю никаких результатов с этим классом. Я управляю каждой функцией, и я только ввожу в конструктор и получаю местоположение. Проблема не в сигнале GPS, поскольку другие приложения в телефоне работают нормально