Geolocator位置改变了事件

时间:2013-08-22 13:40:28

标签: windows-phone-8 windows-phone-8-emulator

我正在开发一个跑步跟踪器/计步器应用程序,我正在使用geolocator,我保持geoLocator的移动阈值属性为10,这是我的代码。

按钮点击事件

 private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            myLocator = new Geolocator();
            myLocator.DesiredAccuracy = PositionAccuracy.Default;
            myLocator.MovementThreshold = 10;
            myLocator.ReportInterval=500;
            myLocator.PositionChanged += myGeoLocator_PositionChanged;
            _startTime = System.Environment.TickCount;
            _timer.Start();
        }
 void myGeoLocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
        {
            Dispatcher.BeginInvoke(() =>
            {
                var coord = new GeoCoordinate(args.Position.Coordinate.Latitude, args.Position.Coordinate.Longitude);
                if (_line.Path.Count > 0)
                {
                    var previousPoint = _line.Path.Last();
                    distance += coord.GetDistanceTo(previousPoint);
                    var millisPerKilometer = (1000.0 / distance) * (System.Environment.TickCount - _previousPositionChangeTick);
                    _kilometres += Math.Round(distance, 2);
                    distanceLabel.Text = string.Format("{0:f2} meters", _kilometres);
                    MessageBox.Show("Changed");
                }
                else
                {
                    Map.Center = coord;
                }
                _line.Path.Add(coord);
                _previousPositionChangeTick = System.Environment.TickCount;
            });
        }

问题是位置更改事件只被调用一次,我试图通过更改位置点来调试模拟器中的代码,但仍然不会调用事件。我在哪里做错了?

1 个答案:

答案 0 :(得分:2)

您的代码可以在真实设备上运行。但是,要在模拟器上进行测试,请尝试将DesiredAccuracy属性设置为High

来自How to test apps that use location data for Windows Phone

  

如果您的应用使用GeoCoordinateWatcher类,则必须在构造函数或类的DesiredAccuracy属性中指定GeoPositionAccuracy.High的值,然后才能使用位置传感器模拟器测试应用程序。如果将精度保留为默认值GeoPositionAccuracy.Default,则PositionChanged事件将无法识别位置传感器模拟器中发生的位置更改。

还有另一种解决方法,包括运行原生地图应用,这似乎可以解决问题:

  
      
  1. 在模拟器中设置当前位置。
  2.   
  3. 运行您的应用。它报告当前位置为Redmond。
  4.   
  5. 运行地图应用程序。它正确地转到设置的位置   第1步。
  6.   
  7. 再次运行您的应用。现在它使用正确的当前位置。
  8.   

来源:http://social.msdn.microsoft.com/Forums/wpapps/en-US/c2cc57b1-ba1f-48fb-b285-d6cfbb8f393a/windows-phone-8-emulator-returns-microsofts-location-only