一百行代码写一个WP8路线跟踪应用(4)

来源:开源中国社区 作者:oschina
  24  

25  

26 Map.Center = coord;

27  

28 _line.Path.Add(coord);

29 _previousPositionChangeTick = System.Environment.TickCount;

30 }

Runner's不去测量每小时的速度是多少英里或公里.相反,速度用来计算一段跑完距离里所需的时间.

这种计算方法可以更轻松的确定你整体的跑步时间,例如:如果你跑步的速度是四分钟一公里,那么你会在20分钟后跑完五公里.

注意:上面的代码使用了一个非常简单的卡路里消耗算法,假设每跑一公里消耗65卡路里,一个更精确的算法会根据跑步者的体重和速度和其他环境因素来进行计算,将这个功能作为一个小练习留给读者.


对于开发应用程序,模拟器有一些包括跟踪用户的位置在内的非常有用的特性。你可以沿着路线记录一些点,然后每隔一段时间重复一下,你也可以将这些模拟数据保存成一个xml,以便以后重复执行.


这可能需要一定时间来创建一个真实的数据来模拟真实的运行情况,但是你至少有一次来做这件事.

 

设置地图视角和指向
由于 Windows Phone8 地图的向量性质,它可以使用视角和指向属性转换视图。 视角属性设置地图的观察角度,提供了一个透视的图像,而非一个自上而下的图像,而指向属性则使你可以旋转地图。

多数卫星导航系统将这些特效组合起来呈现地图,这样它看起来就像直接在你的面前一样。很多人觉得这样的地图比较容易理解(他们不需要在大脑里旋转地图)。
你可以很容易的将这些功能添加到你的应用中,首先,在 XAML 中设置地图视角:
1 <!-- the map -->

2 <maps:Map x:Name="Map"

3 PedestrianFeaturesEnabled="True"

4 LandmarksEnabled="True"

5 Pitch="55"

6 ZoomLevel="18"/>
 

指向的计算有些复杂。在上节中,当前及过去的坐标被用来计算行驶的距离和速度。这两个坐标同样也可以用来计算指向,尽管计算更复杂。 幸运的是,我发现了一个包含了很多有用的地理定位工具的 .NET 库,其中也包含了指向的计算。使用这个 .NET 扩展库, 查询和设置指向将十分简单:
1 PositionHandler handler = new PositionHandler();

2 var heading = handler.CalculateBearing(new Position(previousPoint), new Position

(coord));

3 Map.SetView(coord, Map.ZoomLevel, heading, MapAnimationKind.Parabolic);

另外,注意上面的代码使用了 SetView 方法,而不是单个进行属性配置。 如果你直接设置属性,地图状态将会立刻改变,这也意味着,视图将会从一个坐标/指向“跳转”到另一个上。使用 SetView, UI 将会变得更加流畅。


在下面,你将看到在纽约中央公园中的指向和地图视角的展示:
 

后台位置跟踪
WP7 可以在锁屏后(继续)运行前台应用,这对运动跟踪类应用来说是十分重要的一项功能,它可以让用户在锁机后其位置信息依然能被记录。而WP8 则更进一步,应用可以在后台进行跟踪,也就意味着,当用户在使用其他应用比如检查邮件、听音乐时,程序可以在后台跟踪记录用户的地理位置信息。

为了开启这个功能你得手动更改'''WMAppManifest.xml''', 在上面右键选择“查看代码”,然后定位到 Tasks 标签添加如下代码:
1 <Tasks>

2 <DefaultTask Name="_default" NavigationPage="MainPage.xaml">

3 <BackgroundExecution>

4 <ExecutionType Name="LocationTracking" />

5 </BackgroundExecution>

6 </DefaultTask>

7 </Tasks>

这就搞定了!
程序开始在后台运行的时候就会触发RunningInBackground 事件,借此可以显示一个Toast 通知消息,不过接下来的小节中我们会采用一种更加有趣的方式来告知用户其正被追踪记录的情况。

活动瓷贴
 
WP8 新增了许多瓷贴模板,而这里我们将用到‘Iconic Template’。打开'''WMAppManifest.xml''' (这次得用视觉编辑器了!), 选中模板 Iconic template。
更新瓷贴状态就跟发消息通知一样简单。每次位置变更的时候就会执行下面的代码:
1 ShellTile.ActiveTiles.First().Update(new IconicTileData()

2 {

3 Title = "WP8Runner",

4 WideContent1 = string.Format("{0:f2} km", _kilometres),

5 WideContent2 = string.Format("{0:f0} calories", _kilometres * 65),

6 });

如果你现在把程序 pin 到开始屏幕并使用宽瓷贴样式,那么当位置在后台被跟踪记录时,瓷贴将更新如下:

添加完如上代码,这个应用就算完成了!

总结
 
Windows Phone 8 有很多非常酷的功能可以用来增强你的程序。在本文中我就展示了一个简单的路线跟踪应用是如何从中受益的。同样,强大的框架和API 能让你只用非常少的代码就可以写出复杂的程序。


很显然本文所说的应用还有待完善!不过你何不亲自尝试着改进下呢,试试用独立存储(IsolatedStorage)记录跑步历史,或者增加一个统计信息图表,你也可以用下Windows Phone 8 API中其他新增的功能,比如说使用语音命令来控制开始/结束!祝玩得开心!

那么该应用是否真的用了100行代码呢?你可以从这里下载源代码 WP8Runner.zip,然后就会发现'''MainPage.xaml.cs'''恰好用了 100 行。

 
 


时间:2013-01-22 08:27 来源:开源中国社区 作者:oschina 原文链接

好文,顶一下
(2)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量