WP7中GeoCoordinateWatcher中的PositionChanged事件

时间:2012-09-17 09:02:15

标签: windows-phone-7 gps

我正在使用GeoCoordinateWatcher来检测Windows Phone 7中的logitude和纬度

我做了以下

 GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
  // Add event handlers for StatusChanged and PositionChanged events
        watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
        watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
        watcher.MovementThreshold = 100;

        // Create A Timer for Getting the GPS Cooradinate every 10 seconds only
        System.Windows.Threading.DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();

        // Start the Location service in the First time when the  Application run
        StartLocationService();
        // 15 minutes the interval of timer
        dt.Interval = new TimeSpan(0, 0, 0, 10, 0);

        // Add the Tick Method for event Handler
        dt.Tick += new EventHandler(Start_Service);

        // Start the Timer
        dt.Start();
    }

在start_service方法中我正在调用watcher.start

问题是,即使位置没有改变,也会每10秒调用一次watcher_PositionChanged! 而且我知道

watcher.MovementThreshold = 100;

当行进距离为100或更多时,将调用watcher_PositionChanged方法 但这并没有发生

注意:我正在使用模拟器

测试我的代码

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你会再次每10秒钟启动一次地理定位器,这样每10秒就会重新启动它并产生实际坐标。

如果只想在位置发生变化时每隔10秒调用一次方法,则可以使用currentCoordinates和lastCoordinates值。您使用每个PositionChanged事件编写currentCoordinates,并且每隔10秒测试它是否与lastCoordinates不同。或者更好,您可以使用Reactive Extensions来组合事件。