基于手机的应用,不可缺少的一项就是位置信息,在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封装的真强大.非常方便的就能使用!!