谷歌地图(安卓)如何如此高效地请求 GPS 修复如此频繁

Posted

技术标签:

【中文标题】谷歌地图(安卓)如何如此高效地请求 GPS 修复如此频繁【英文标题】:How can Google Maps (android) be so efficient requesting GPS fixes so often 【发布时间】:2016-08-03 18:57:45 【问题描述】:

我一直在为 android 开发一个跟踪应用程序,在该应用程序中我需要经常使用 GPS 定位来跟踪一个人(最多 10 秒间隔)。

事实证明,几分钟后,我的手机警告了一个耗电应用 - 我的应用。

虽然我知道 GPS 修复会消耗大量电池,但如何在没有耗尽电池的情况下使用 Google 地图跟踪一个多小时,并且仍然可以立即修复 GPS 更改?

非常感谢。

这是我在做什么的一个想法:

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() 
    public void onLocationChanged(Location location) 
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    

    public void onStatusChanged(String provider, int status, Bundle extras) 

    public void onProviderEnabled(String provider) 

    public void onProviderDisabled(String provider) 
  ;

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, locationListener);

这几乎就是我整个代码中的电池消耗。

【问题讨论】:

【参考方案1】:

你还有其他事情发生。 GPS不会消耗那么多电池。你可以让它在后台运行一整天,它占用的时间比手机的收音机少。当您使用 GPS 并保持屏幕打开时,手机会耗尽电量。或者,当您不断将位置发送到服务器时——始终保持网络无线电开启会消耗大量电池。但 GPS 本身相当便宜。

另外,每 10 秒跟踪每个人是没有意义的。 GPS 更新速度也没有那么快。

除了发布您的代码可能会有所帮助之外,我们还可以查看您是否在做一些愚蠢的事情。

【讨论】:

每隔 10 秒跟踪每个人并非毫无意义。这是很常见的。对于消费领域的某些用例,即使是 1Hz 的跟踪也是现实的 @j3App 不,这完全没有意义。即使您有一个需要这种精度水平的用例(您不需要),以步行速度的人甚至不会在 10 秒内超出初始读数的精度范围。它之所以常见是因为无知,而不是因为它是个好主意。 我认为没有人提到步行速度。例如在100km/h,一个人每秒移动28米,也就是10秒280m。而如果你只想考虑步行,你可以轻松步行2m/s(大约7km/h)。同样,这将在 10 秒内达到 20m,而 GPS 比这更准确。 @j3App 如果您正在谈论您正在驾驶的速度,并且需要的准确度更低。汽车只是没有改变路线和方向,不足以让 10 秒值得。假设航向和航向并减少检查频率。 是否有价值取决于您想要达到的目标。有大量的用例受益于 10 秒或更短的采样率。现在让我们继续【参考方案2】:

“如何在没有耗尽电池的情况下使用谷歌地图跟踪一个多小时,并且仍然可以立即修复 GPS 变化”

首先,当我使用 Google 地图的路线指示时,我的手机会变成一个小加热器。 %电池像石头一样掉下来。

以下是一些建议:

    处于活动 (C0) 状态的 CPU 是最大的能源消耗者。节省能源的最佳方法是让 CPU 保持足够长的不活动时间,使其进入低能源使用状态 (>C0)。 位置更新周期越长,CPU 和其他外围设备使用的能量就越少。这是因为,您再次允许它们进入能量守恒状态。 考虑外推。我确信谷歌地图和其他此类软件可以做到这一点。因此,如果您每 30 秒更新一次,您可以从之前的点推断位置。如果你真的想聪明一点,你可以查看你的仓位历史来进行变量更新。 正如 Gabe 所说,您的代码中似乎存在错误,导致 CPU 和/或 WiFi-GPS 始终处于活动状态。有一些 Android API 可以让外围设备保持打开状态,而另一些则不会做同样的事情。当然,应始终避免轮询。

这是我不久前回答的discusses energy usage。

祝你好运。

【讨论】:

#2 是正确的。如果您每 10 毫秒更新一次,处理器将不会因为试图最小化延迟而进入更高的 C 状态。设备也有电源 D 状态。如果改为使用 1 秒,则处理器可能会进入更低效率的 C 状态。见我的performance article。 #3:我不能声称直接了解外推,但不敢相信他们不会为设计良好的应用程序进行线性外推。

以上是关于谷歌地图(安卓)如何如此高效地请求 GPS 修复如此频繁的主要内容,如果未能解决你的问题,请参考以下文章

安卓。谷歌地图API实现标记点击

创建行程谷歌地图安卓

Android 谷歌地图使用 GPS 定位而不是网络

Android 模拟位置不适用于谷歌地图

如何使用谷歌地图 Api 获得最精确的位置 [重复]

将GPS坐标映射到图像