Windows Phone 7上的GPS应用编程详解。
来源:互联网 发布:电商网站数据库设计 编辑:程序博客网 时间:2024/05/16 04:56
Windows Phone 7目前虽然没有正式发布但是微软对第三方的支持力度还是很到位的,在前一篇我们一起来看了WP7的开发环境的详解,现在咱们就一起来讨论一下WP7上的LBS开发。
一般来说LBS从层级上看一般是两层,首先是获得地理位置的GPS引擎,在获得位置后UI进行相应的导航提示或者渲梁地图。
WP7平台上的GPS引擎在WP7上可以说给我以耳目一新的感觉,已经不再需要程序员自行封装了,微软在这方面做的很好下面我们用代码一起来看一下。
private void StartLocationService(GeoPositionAccuracy accuracy)
{
watcher = new GeoCoordinateWatcher(accuracy);
watcher.MovementThreshold = 20;
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
// Start data acquisition
watcher.Start();
}
上面呢就是一段初始化一个GeoCoordinateWatcher对象的代码,首先watcher = new GeoCoordinateWatcher(accuracy);这个对象初始化的时候需要把精度传进去,这个精度可以是GeoPositionAccuracy.High,GeoPositionAccuracy.Low,GeoPositionAccuracy.Medim虽然没有看到真机,但是我觉得精度越高对于电池的消耗越大。
watcher.MovementThreshold = 20;这个好理解就是取经纬度的间隔,
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
这个是StatusChanged 的事件当GPS引擎状态发生变化的时候会被触发。
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
这个PositionChanged 这个事件会在位置变化的时候会被触发。
那么咱们来详解一下这两个事件
void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() => MyStatusChanged(e));
}
那么为什么在这个函数当中不用INVOKE而是用BEGININVOKE来做呢,原因很简单INVOKE是同步函数会阻塞住用户的UI线程换句话说如果用INVOKE来做可能造成用户界面卡,而BeginInvoke是异步的函数会在时间片空闲的时间被调用,这样做是比较合理的。
void MyStatusChanged(GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Disabled:
StatusTextBlock.Text = "location is unsupported on this device";
break;
case GeoPositionStatus.Initializing:
StatusTextBlock.Text = "initializing location service," + accuracyText;
break;
case GeoPositionStatus.NoData:
StatusTextBlock.Text = "data unavailable," + accuracyText;
break;
case GeoPositionStatus.Ready:
StatusTextBlock.Text = "receiving data, " + accuracyText;
break;
}
}
那么这个GeoPositionStatusChanged参数会给咱们传递哪个参数呢没错就是这个GeoPositionStatusChangedEventArgs,e.Status有这样几个状态 GeoPositionStatus.Disabled,GeoPositionStatus.Initializing,GeoPositionStatus.NoData和GeoPositionStatus.Ready:那么从名字上咱们就能看出来,Disabled是不可用也就是GPS的信息没有办法收到,Initializing是引擎初始化中的状态,NoData是没有取得数据,而Ready是引擎状态正常。
void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e)
{
LatitudeTextBlock.Text = e.Position.Location.Latitude.ToString("0.000");
LongitudeTextBlock.Text = e.Position.Location.Longitude.ToString("0.000");
}
GeoPositionChangedEventArgs这个事件传递的参数GeoPositionChangedEventArgs<GeoCoordinate> e,也很易用,经度就是e.Position.Location纬度就是e.Position.Location.Longitude。
记得以前在WM时代做一个GPS的引擎可是相当的麻烦,不过现在一切变得简单了,GeoCoordinateWatcher类全部搞定,所以很期待LBS的应用在WP7上的表现,有了这么强大的引擎估计GPS方面的应用在WP7上应该会发展很好。
- Windows Phone 7上的GPS应用编程详解。
- Windows Phone 7上的GPS应用编程详解
- Windows Phone 7上的GPS应用编程详解
- 简单的Windows phone 7调用GPS
- Windows Phone 7上的扑克魔术
- Windows Phone 7 日历应用的实现
- 微软提供移植iPhone应用到Windows Phone 7上的工具
- Windows Phone 7 网络编程之留言板应用
- Windows Phone应用的生命周期
- Windows phone 7 高级编程
- windows phone:Windows Phone 8 的多分辨率应用
- 英国Windows Phone 7 Tech Day上的演讲概述
- 在windows phone 7上获取本地IP的方法
- Windows Phone 7上广告平台的选择
- Windows Phone 7上的sina微博客户端
- Windows Phone 7上广告平台的选择
- MSDN杂志上的Windows Phone 7相关文章
- Windows Phone 7上的网络访问优先级
- 链接等
- 操作系统封装(2)
- XP系统封装常用工具.ISO
- linux 正确的关机方式(转自鸟哥私房菜)
- IIS7.5 的虚拟账户
- Windows Phone 7上的GPS应用编程详解。
- 为了打败QQ
- Lift 2.1 已发布
- 愉快的一天
- vs2008发布c编写的dll程序 初始化失败-0xc0150002
- cmd命令小结
- 学习REBOL 6.1
- poj 3281 Dining //SAP
- pthread_create、readlink、getpid等函数的学习与总结