从 Windows Phone 7 中的 GeoCoordinateWatcher.StatusChanged 事件返回位置数据

Posted

技术标签:

【中文标题】从 Windows Phone 7 中的 GeoCoordinateWatcher.StatusChanged 事件返回位置数据【英文标题】:Return the location data from GeoCoordinateWatcher.StatusChanged event in Windows Phone 7 【发布时间】:2011-09-15 22:40:21 【问题描述】:

我正在编写一个需要获取用户位置的 Windows Phone 应用程序。我正在尝试以一种很好的方式(尽我所能),使用一个单独的类来查询GeoCoordinateWatcher 的位置数据并将该数据返回给调用方法。

问题是,我不知道如何从GeoCoordinateWatcherStatusChanged 事件中将LocationData 结构返回给调用方法。查看代码和cmets:

public struct LocationData

    public string latitude;
    public string longitude;



public class LocationService : GeoCoordinateWatcher

    private GeoCoordinateWatcher watcher;

    private LocationData StartLocationWatcher()
    
        LocationData ld = new LocationData();

        // The watcher variable was previously declared as type GeoCoordinateWatcher.
        if (watcher == null)
        
            watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
        

        watcher.MovementThreshold = 20; // Use MovementThreshold to ignore noise in the signal.

        watcher.StatusChanged += (o, args) =>
            
                switch (args.Status)
                
                    case GeoPositionStatus.Ready:
                       // Use the Position property of the GeoCoordinateWatcher object to get the current location.
                       GeoCoordinate co = watcher.Position.Location;

                       ld.latitude = co.Latitude.ToString("0.000");
                       ld.longitude = co.Longitude.ToString("0.000");

                       //Stop the Location Service to conserve battery power.

                       watcher.Stop();
                       break;
               
           ;

        watcher.Start();
        return ld; //need to return this to the calling method, with latitude and longitude data taken from GeoCoordinateWatcher
    

【问题讨论】:

【参考方案1】:

我不确定这是不是你想要的。

注册 PositionChanged 事件:

你必须添加一个事件监听器来触发位置的获取

GeoCoordinateWatcher.PositionChanged += GeoCoordinateWatcherPositionChanged;

private void GeoCoordinateWatcherPositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)

    var currentLatitude = e.Position.Location.Latitude;
    var currentLongitude = e.Position.Location.Longitude;

More 开启 PositionChanged 何时触发。

【讨论】:

哦,这就是收到位置时触发的事件...大声笑,谢谢。

以上是关于从 Windows Phone 7 中的 GeoCoordinateWatcher.StatusChanged 事件返回位置数据的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 7 中的推送通知问题

Windows Phone 7 从应用程序导航到 Internet

如何从列表框绑定 Windows Phone 7 中选择一个项目

Windows Phone 7 中的动态磁贴

Windows Phone 7 - 模拟器中的 GeoCoordinate.Speed

如何在 windows phone 7 中禁用 LongListSelector 中的滚动视图