基于位置的应用程序现在非常普通,但是为了处理较差的精确度、克服用户移动,以及使用多种方法获取位置信息,还要节约电量,所以获取用户位置是非常复杂的。在节约电量的同时,穿越障碍物而获取到一个适合的用户位置,必须定义一个一致的模型,这个模型定义了应用程序怎样获取用户的位置信息。这个模型包含什么时候开始或者停止监测用户位置更新、什么时候使用缓存存储位置数据。下面是获取用户位置的典型处理流程:
(1)启动程序。
(2)开始监听从指定的位置提供商获取用户位置更新。
(3)通过过滤、小精度修复,确定当前最好的位置估计信息。
(4)停止接收位置更新。
(5)利用最后估计的较好的位置信息。
图7-2在一个时间轴上显示了这一过程,它展示了应用程序接收位置更新的时间以及该时刻发生的时间。
由此可见,在应用程序中需要多次做决策来提供用户位置获取的服务。
1.决定开始监听更新的时刻
在程序启动之后或者在用户激活某个特性之后,就尽快开始监听位置更新信息。但监听用户位置修复的过程可能会消耗大量的电力,短的时间又不能获取足够精度的位置信息,因此可以在调用request Location Updates()之后开始监听位置更新。
图7-2 用户位置信息的时间线
2.通过最后可知位置快速修正
Location Listener接收第一次位置修复所花的时间通常非常长。如果它接收到一个更加精确的位置,应该调用get Last Known Location(String)来获取一个缓存的位置。
3.决定停止监听更新的时刻
在程序中判断什么时候不需要新的修复的逻辑非常简单,也可以非常复杂。开始获得位置信息和开始使用位置信息之间的时间间隔短暂,有助于提高位置估计的精度。因为长时间监测位置消耗大量的电力,所以一旦获得所需的位置信息,就应该调用removeUpdates(PendingIntent)来停止监听。(www.xing528.com)
4.保持最佳的估算值
希望最近的位置修复是最精确的。然而,由于位置校正的精度不同,最新的并不一定是最准确的。因此,需要选择的位置用一些标准逻辑。标准也根据不同使用情况下应用程序和现场测试实例的不同而有所变化。下面是确认位置修正可以采用的步骤:
(1)检查得到的位置是否比以前的新;
(2)检查位置精度比以前的更好或更坏;
(3)检查供应商的新位置,确定是否更准确可靠。
符合上述逻辑的代码如下:
5.调整模型来保存电量和数据交换
测试应用程序时,可能会发现模型提供的良好的地理位置与良好的性能需要调整,这样可能会在两者之间找到一个很好的平衡。
6.减少窗口的大小
在一个小窗口位置更新,意味着与GPS和网络定位服务更少交互,这样能够延长电池寿命。但是这样会使可选位置变少,从而导致获取最佳位置信息变得困难。
7.减少位置提供者的更新频率
在窗口减少更新频率,也可以提高电池的效率,但这样会牺牲精确度,两者之间的平衡取决于具体的应用。可以通过增加requestlocationupdates()函数的第二和第三个参数的值以降低更新频率。
8.仅支持一种位置信息提供者
根据应用程序的使用场景和对精度的要求,可以选择只使用网络位置提供商或GPS,只有一个服务交互可以大大减少耗电的可能性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。