我有一个后台服务,定期工作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
。 我有两个问题:
- 有没有什么办法来优化这个过程?
- 升级到API级别9(并使用
locationManager.requestSingleUpdate
)会显着改善流程吗?我的意思是,它值得升级吗?
不是一个真正的答案,但我可以告诉你,手机GPS系统有时需要几分钟,而不是十秒钟才能获得修复(可能取决于手机型号)。一旦找到,未来的修复速度会更快 - 可能在10秒内。也许花费两三分钟时间试图每隔一刻钟修好一次?或者也许有一些方法可以获得足够的细节,以便更快速地判断是否有良好的信号。 – dhardy