在Android中有效使用LocationManager

时间:2012-07-13 15:16:29

标签: android gps broadcastreceiver locationmanager

我正在尝试优化必须实现以下目标的Android应用程序:

  • 每小时检索GPS位置和doSomeWork()

  • 在任何其他时间,如果设备移动超过@MINIMUM_DISTANCE,请将更新频率提高到5分钟以记录移动,当移动结束时我们可以返回每小时更新。

现在,每小时发出一次AlarmManager就可以满足第一个要求。这是完成此任务的精确电池有效方法。但是我不确定如何最好地完成第二个要求。

我应该:

  • 注册一个AlarmManager,每隔5分钟与小时计时器一起发射?每次注册LocationManager并尝试拉出一个位置,与之前的位置进行比较以确定是否发生了移动。

  • 在每小时唤醒后注册一个LocationManager,其最小距离参数等于我所需的最小移动量。

  • 还有别的吗?

我可以看到每种方法的利弊。

使用LocationManager最小距离参数在我看来是更简洁的解决方案,但我担心电池耗尽,这会使GPS始终保持热度,无论我的应用程序是否正在接收更新?我也不确定注册接收器的最佳位置在哪里,我明白在100%的时间内保持服务运行是不好的做法(更不用说几乎不可能了)。

是的我是Android新手!即将开始测试LocationManager的行为。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我的解决方案,运行良好,是在任何时候GPS_PROVIDER都没有注册和监听的情况下保持NETWORK_PROVIDER(并且可以免费获得免费更新的PASSIVE)。如果在先前检索的位置之外看到移动,我可以切换到完整的GPS以监控移动。

准确性差,但至少足够好。电池消耗非常低。

答案 1 :(得分:0)

如果用户进入汽车和驾驶,会发生什么?如果你LocationManager设置了最小距离,你会得到一个相对较快的回调(好吧,我不知道你的最小距离是多少,但是......)。在另一种情况下,您可能需要等待整整5分钟才能识别出用户已移动。

但是,如果你真的只需要每5分钟更新一次,那么我肯定会使用AlarmManager方法,因为这样可以保证你不会在5之间做任何关于GPS的事情。分钟。

请注意,如果用户已移动且GPS未开启,GPS可能需要一些时间才能获得修复。因此,不要指望您在启动GPS时能够立即获得准确的修复。