我正在开发一个跑步跟踪器/计步器应用程序,我正在使用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;
});
}
问题是位置更改事件只被调用一次,我试图通过更改位置点来调试模拟器中的代码,但仍然不会调用事件。我在哪里做错了?
答案 0 :(得分:2)
您的代码可以在真实设备上运行。但是,要在模拟器上进行测试,请尝试将DesiredAccuracy
属性设置为High
。
来自How to test apps that use location data for Windows Phone:
如果您的应用使用GeoCoordinateWatcher类,则必须在构造函数或类的DesiredAccuracy属性中指定GeoPositionAccuracy.High的值,然后才能使用位置传感器模拟器测试应用程序。如果将精度保留为默认值GeoPositionAccuracy.Default,则PositionChanged事件将无法识别位置传感器模拟器中发生的位置更改。
还有另一种解决方法,包括运行原生地图应用,这似乎可以解决问题:
- 在模拟器中设置当前位置。
- 运行您的应用。它报告当前位置为Redmond。
- 运行地图应用程序。它正确地转到设置的位置 第1步。
- 再次运行您的应用。现在它使用正确的当前位置。
醇>