2013-06-23 4 views
1

У нас странное поведение с WinRT Geolocator в одном из наших приложений. Пользователь нажимает кнопку в приложении, чтобы получить текущую позицию. Работает нормально в первый раз, но все последующие нажатия на кнопку возвращают те же самые координаты, даже жесткие мы двигаемся более чем на один километр.WinRT Geolocator всегда возвращает ту же позицию

Приложение работает на ThinkPad, и мы установили приложение под названием «GPS-спутник», и если мы переключимся на это приложение, получим координаты и вернемся в наше приложение, тогда Geolocator вернет правильные координаты. Таким образом, мы знаем, что GPS работает нормально, но похоже, что координаты хранятся в кеше даже жестко, мы установили истечение нескольких миллисекунд.

private async void ExecuteObtenirCoordGPSCommand() 
     {  
      try 
      { 
       Geolocator geolocator = new Geolocator(); 
       geolocator.DesiredAccuracy = PositionAccuracy.High; 
       // Make the request for the current position 

       Geoposition pos = await geolocator.GetGeopositionAsync(new TimeSpan(0,0,0,0,200), new TimeSpan(0,0,5)); 


       Place.Latitude = pos.Coordinate.Latitude; 
       Place.Longitude = pos.Coordinate.Longitude; 
      } 
      catch 
      { 
       GPSMsgErreur = "The GPS is unavailable"; 
      } 
} 

Мы попытались поставить истечение на методе GetGeopositionAsync, но это не решило проблему.

Мы попытались поместить Geolocator var на уровне класса с тем же результатом.

Любые идеи?

+0

Измените 'async void' на' async Task' и вызывается метод 'ExecuteObtenirCoordGPSCommand()' с ключевым словом 'await'. добавили ли вы возможности определения местоположения в манифест приложения? – Xyroid

+0

Мы имеем такое же поведение, используя пример кода из MS: http://code.msdn.microsoft.com/windowsapps/Geolocation-2483de66/view/SourceCode#content –

+0

Добавили ли вы возможности определения местоположения в манифесте приложения? – Xyroid

ответ

0

Не уверен, если это ваша проблема, но API вы используете помечено имеет устаревшее в этом посте: http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.geolocation.geocoordinate

Попробуйте использовать:

Place.Latitude = pos.Coordinate.Point.Position.Latitude; 
Place.Longitude = pos.Coordinate.Point.Position.Longitude; 

Вы также можете использовать:

double someVar = pos.Coordinate.Accuracy 

Чтобы выяснить, каков предел погрешности устройства. Может быть, вы, где не достаточно далеко от вашего первого местоположения, а ваше второе место находилось в пределах погрешности ...

Я также могу сказать, что у меня есть программное обеспечение, созданное с помощью Visual Studio 2013 Windows (WinRT), которое работает на ThinkPad, используя те же объекты, которые вы используете, и работает отлично. Основное различие между моим и твоим, что я использую API показал выше, и что я не использовал следующее заявление:

geolocator.DesiredAccuracy = PositionAccuracy.High; 

И что я не проходил никаких параметров в метод GetGeopositionAsync.

Надеюсь, это поможет. Cheers, Ганс.