基于手机的应用,不可缺少的一项就是位置信息,在WP7中,微软提供了一个GeoCoordinateWatcher类,可以方便的拿到当前所在的经纬度
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
watcher.MovementThreshold = 20;
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
watcher.Start();
实例化GeoCoordinateWatcher对象的时候,需要提供一个参数,GeoPositionAccuracy,该枚举有两个成员,Default和High,在Defalut模式下,微软会平衡电池,性能等因素返回一个坐标信息,该信息可能不是很精确,如果你确实需要高精度的位置信息,那么可以用High模式.
GeoCoordinateWatcher 有个属性MovementThreshold,他表示用户移动多少位置之后,会执行PositionChanged事件,默认值是0,也就是任何移动都会触发PositionChanged,你可以自定义一个值,单位是"米".
GeoCoordinateWatcher还有两个常用的事件,PositionChanged和StatusChanged. PositionChanged前面已经讲过,根据你设置的值,会在用户移动的时候,触发这个事件.StatusChanged是表示当前GPS的状态,
void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Initializing:
break;
case GeoPositionStatus.Ready:
break;
case GeoPositionStatus.NoData:
break;
case GeoPositionStatus.Disabled:
break;
}
}
该枚举包含4个成员,Initializing:初始化中,Ready:准备好,NoData没有数据,Disabled被关闭.
在这些事件和属性设置好之后,调用watcher.Start();定位便开始了,同时会在条件满足的时候,触发事件.最后,别忘了添加system.device的引用..
不得不说, .Net封装的真强大.非常方便的就能使用!!
本文章同步发表在WPDevN:http://www.wpdevn.com/showtopic-7.aspx