【发布时间】:2016-10-12 06:37:27
【问题描述】:
我的应用中有一些每秒运行多次的代码。我试图在每个周期中获取我的位置。我正在使用以下内容:
Location myLastPos = LocationServices.FusedLocationApi.getLastLocation(googleApiClient)
我的应用也使用 PARTIAL_WAKE_LOCK 在后台运行。屏幕上的一切似乎都很好。当我关闭屏幕时,我的应用程序仍然正常运行,但我不再持续获得位置更新。 看来我获得更新的频率要低得多(通常在两次更新之间有几分钟)。我正在使用以下方法检查位置的时间戳:
myLastPos.getElapsedRealtimeNanos()
我还发现,即使屏幕打开,我也会得到一些奇怪的结果。有时我在更新之间有几毫秒,有时我有几秒钟。这一切都非常令人担忧。有人可以帮助我正确使用 FusedLocationApi 或建议替代方案。我真正想要的只是每秒直接轮询 gps 几次纬度/经度,而不会妨碍谷歌库。
【问题讨论】:
-
getLastLocation()方法只是获取设备碰巧知道的最后一个已知位置。设备不会自行确定其位置,而是仅在某些应用程序请求位置时确定。因此,您的应用程序现在依赖于请求位置更新的其他应用程序。如果您需要每隔几秒更新一次,请自行请求定期更新位置信息。 The documentation section 有代码示例。 -
@MarkusKauppinen 你是对的。文档对此不是很清楚,我的假设是 android 操作系统会在后台自动轮询 GPS,而 getLastLocation() 只会提供 latest 结果。如果您用您的评论回答问题,那么我可以将其标记为已回答。谢谢!
-
这似乎是一个常见的混淆。不知何故,文档可以更清楚地表明它可能是一个旧的和无效的位置。从技术上讲,它是正确的,因为它确实是“最新已知”的位置。无论如何,我现在添加了一个正确的答案。这可能是一些旧问题的重复,但我不容易找到一个好的候选人。他们中的大多数(接受了答案)只是为了获得
null位置。
标签: android gps android-fusedlocation