2012-06-03 31 views
3

我有一个后台服务,定期工作timer.scheduleAtFixedRate。它会唤醒每一段时间(比如说60秒)并检查位置。Android:如何定期检查当前位置,而不会耗尽电池

该位置由locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, listener);检查,实际位置从收听者的onLocationChanged收集。

现在,当手机在户外并且GPS接收良好时,此功能正常工作。 但是,如果手机在里面,GPS几乎总是处于活动状态 - 寻找信号,并且电池快速耗尽。

我创建使用处理器和一个Runnable另一个线程,以conrol GPS的活动时间准确: 我用locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);locManager.removeUpdates(listener);这样我就可以打开和关闭GPS,因为我想要的。 在这种情况下,我可以打开GPS达到确切的时间,但发现即使在10秒后,它也不会锁定在接收良好的区域。所以在这里我再次耗尽电池...

我使用API​​级别7,因此我不能使用locationManager.requestSingleUpdate。 我有两个问题:

  1. 有没有什么办法来优化这个过程?
  2. 升级到API级别9(并使用locationManager.requestSingleUpdate)会显着改善流程吗?我的意思是,它值得升级吗?
+0

不是一个真正的答案,但我可以告诉你,手机GPS系统有时需要几分钟,而不是十秒钟才能获得修复(可能取决于手机型号)。一旦找到,未来的修复速度会更快 - 可能在10秒内。也许花费两三分钟时间试图每隔一刻钟修好一次?或者也许有一些方法可以获得足够的细节,以便更快速地判断是否有良好的信号。 – dhardy

回答

0

NETWORK_PROVIDER如何解释here? 您可能有一个系统,如果您无法在有限的时间内找到某个位置,这意味着您位于内部或GPS接收不够好,您可以改用网络位置。由于使用较少的电池,它至少是一种解决方法或替代方案。但认为会更低。

+0

感谢您的回答。我已经尝试过了,结果不太好。但无论如何,它并不能解决原来的问题:我希望能够在接收良好的情况下使用GPS,并在没有接收时关闭它。 – uyahalom

+0

您如何将新的拍摄地点存储在某个地方?如果该值为空,程序将继续尝试,当它填充时,GPS将禁用并显示新的采用值。然后从那一刻起,你可以计算你的60秒,直到下一次检查。所以在伪代码中: 'while true { somevariable = null; while somevariable == null { somevariable = gpslocation;} 等待60秒; }' 或者类似的东西。 –