2

我正在开发一个使用 gps 的应用程序,该应用程序在应用程序投入使用之前一直运行。我的 GPS 会在 5 分钟后唤醒并获取位置,然后其符号停止闪烁并在几乎所有设备(Sony xperia、Samsung tab、Htc WildFire、Motorola photon)中不可见,但在 Motorola Defy 和 Samsung Ace 中不可见,它们会消耗大量电池电量. GPS得到修复并始终保持稳定和可见。这些设备(Moto Defy 和三星 Ace)的 GPS 工作方式不同。看我的代码:

long _listenerWakeUpTimeInterval=1000*60*5;**  //5 minutes
_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, _listenerWakeUpTimeInterval, 300, locationListener);

所有设备的 GPS 都会在 5 分钟后唤醒,但这两款设备(Moto Defy 和三星 Ace)的 GPSonLocationChanged(Location loc)每 300 米调用一次该方法。对于这两种设备来说,时间并不重要。当我快速旅行(在汽车中)时,这个距离在几分钟(1 或 2 分钟)内即可完成。所以我接到了一个关于onLocationChanged(Location loc)方法的电话。在这些设备中,GPS 始终是固定的、静态的和可见的。我不想locationManager.removesupdates每次 GPS 得到修复时都调用方法。我只在onDestroy()服务中调用此方法。那么请告诉为什么这两个设备的 GPS 与其他设备的行为不同,以及如何解决这个问题?

4

2 回答 2

2

如果您阅读文档,它会说:

minTime:通知的最小时间间隔,以毫秒为单位。此字段仅用作节省电量的提示,位置更新之间的实际时间可能大于或小于此值。

所以这只是一个建议,实现可以忽略它。

我的建议是使用AlertManager每 5 分钟安排一次服务,然后在服务有效负载中,请求单个修复调用requestSingleUpdate。这将节省电池。缺点是 GPS 芯片需要一些时间才能接收到卫星信号,在良好条件下大约需要 30 秒到 1 分钟(首次定位时间,或 TTFF)。在处理完所有待处理的请求后,它又变冷了。所以在下一次服务执行中,我猜 TTFF 可能会和上一次迭代一样高。(除非你使用 NETWORK_PROVIDER,但那样精度会更低)。

于 2012-05-31T16:03:09.250 回答
1

我得到了这个问题的解决方案。我使用AlarmManager(每 5 分钟后重复警报)注册 gps,然后我运行我的 Gps 30 秒并取消注册 Gps。如果我接到电话,onLocationChanged(Location loc)那么我在这个方法中取消注册 Gps。否则(如果我没有得到新的位置)我在 30 秒后通过处理程序取消注册 Gps。当我再次需要 Gps 时,我遵循相同的过程。通过这种方式,我的 Gps 最多工作 30 秒,而不是整个时间,直到服务运行。

于 2012-06-05T05:18:37.787 回答