【问题标题】:Android: How to periodically check current location without draining the batteryAndroid:如何在不耗尽电池的情况下定期检查当前位置
【发布时间】:2012-06-03 09:43:59
【问题描述】:

我有一个由timer.scheduleAtFixedRate 定期运行的后台服务。 它每隔一段时间(例如 60 秒)就会唤醒并检查位置。

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

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

为了准确控制 GPS 活动时间,我使用 Handler 和 Runnable 创建了另一个线程: 我使用了locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);locManager.removeUpdates(listener);,所以我可以根据需要打开和关闭 GPS。 在这种情况下,我可以打开 GPS 的确切时间,但发现即使 10 秒后它也无法锁定接收良好的区域。所以在这里我再次耗尽电池......

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

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

【问题讨论】:

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

标签: android location


【解决方案1】:

NETWORK_PROVIDER 解释here 怎么样? 你可以有一个系统,如果你在有限的时间内找不到位置,这意味着你在里面或者 GPS 接收不够好,你可以使用网络位置来代替。由于这使用更少的电池,它至少是一种解决方法或替代方案。但精度会更低。

【讨论】:

  • 感谢您的回答。我已经试过了,结果不是很好。但无论如何,它并没有解决最初的问题:我希望能够在接收良好时使用 GPS,而在接收不良时将其关闭。
  • 您将新拍摄的位置存储在什么东西中怎么样?如果值为空,程序将继续尝试,当它被填充时,GPS 将禁用并显示新的取值。然后从那一刻起,您可以计算您的 60 秒,直到下一次检查。所以在psuedo中:while true{ somevariable = null; while somevariable == null{ somevariable = gpslocation;} wait 60 seconds; }或类似的东西。
猜你喜欢
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2015-01-20
相关资源
最近更新 更多