我有一个后台服务,通过 timer.scheduleAtFixedRate
定期运行.
它每隔一定时间(比如 60 秒)就会唤醒并检查位置。
位置由 locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, listener);
检查实际位置是从听众的 onLocationChanged
收集的.
现在,当手机在室外且 GPS 接收信号良好时,这一切正常。 但是,如果手机在里面,GPS 几乎总是处于 Activity 状态 - 寻找信号,并且电池会迅速耗尽。
为了准确控制 GPS Activity 时间,我使用 Handler 和 Runnable 创建了另一个线程:
我用了locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
和 locManager.removeUpdates(listener);
这样我就可以根据需要打开和关闭 GPS。
在这种情况下,我可以打开 GPS 准确的时间,但发现即使在 10 秒后它也没有锁定在接收良好的区域。所以在这里我再次耗尽电池...
我使用的是 API 级别 7,因此我无法使用 locationManager.requestSingleUpdate
.
我有两个问题:
- 有什么方法可以优化这个过程吗?
- 升级到 API 级别 9(并使用
locationManager.requestSingleUpdate
)是否会显着改进流程?我的意思是,它值得升级吗?
最佳答案
NETWORK_PROVIDER如何解释here ? 你可以有一个系统,如果你在有限的时间内找不到位置,这意味着你在里面或者 GPS 接收不够好,你可以使用网络位置来代替。由于这样使用的电池更少,因此它至少是一种解决方法或替代方法。但精度会降低。
关于Android:如何在不耗尽电池的情况下定期检查当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869284/