Windows Phone 的位置编程最佳做法

2012/2/9

本主题包含为创建使用定位服务的 Windows Phone 应用程序的建议。

创建位置感知应用程序时,开发人员必须平衡应用程序的以下两个要求:具有精确位置数据;耗电量最小。在移动设备上,这两个应用程序要求是反比关系。生成不太精确位置信息的硬件(如 Wi-Fi 和蜂窝收音机)使用的电量要比 GPS 接收器(通常,可以获得更精确的位置数据)使用的电量小。设计应用程序时,要遵循两个基本原则。

  • 除非您的应用程序确实需要较高的精度,否则对定位服务使用精度较低、电量优化的设置。

  • 仅当应用程序需要时才打开定位服务,使用完后将其关闭。

为位置数据选择适当的精度级别

尽管定位服务使用多个位置信息来源,但是在任何给定的时间任何来源都可能会不可用(例如,无法访问 GPS 卫星或基站),本机代码层负责计算可用数据并选择最佳来源集。您的应用程序所需要做的就是在高精度或默认的电量优化设置之间进行选择。可以在初始化主定位服务类 GeoCoordinateWatcher 时设置该值。

GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);

设置合理的移动阈值

由于移动设备中的 GPS 硬件没有天线,因此传感器通常设计为非常敏感。这种灵敏度可能会导致信号中有少量来自表面反射以及其他环境影响的噪音。主定位服务类 GeoCoordinateWatcher 显示 MovementThreshold 属性。该属性指定在引发 PositionChanged 事件之前必须进行的位置方面的最小更改。如果您将 MovementThreshold 属性设置为一个非常低的值,则可能会导致您的应用程序接收实际上是由信号噪音所导致的事件。为了平滑信号以便仅表示位置中的重大更改,请将 MovementThreshold 属性设置为至少 20 米。这也会使您应用程序的耗电量降低。将移动阈值设置为 0 米将导致频繁引发事件,一秒钟一个事件。该设置对于导航应用程序可能非常有用。

位置数据不可用时的计划

定位服务使用多个来源确定设备的位置,但偶尔仍然会有位置数据不可用的时刻。您的应用程序应该正常处理这种缺少数据的情况。当定位服务的状态发生更改时引发 StatusChanged 事件。您的应用程序可以使用该事件的处理程序,以让用户知道位置数据是否可用以及相应地修改应用程序的行为。

甚至当定位服务能够获取位置数据时,初始化并获取第一个读数通常需要 15 秒的时间,但也可能需要多 120 秒的时间。在设计应用程序时应牢记这一点,如果在等待服务启动时应用程序没有响应,则应该警告用户。由于较低的精度设置不等待 GPS 返回数据,因此通常在 GPS 尚未激活时速度更快。如果其他应用程序正在使用 GPS 并且正在检索数据,则较高精度设置返回数据的速度将与较低精度设置一样快或更快。

显示: