getLastLocation API 如何在内部工作?即使位置设置为 ON,它也会返回 null

Posted

技术标签:

【中文标题】getLastLocation API 如何在内部工作?即使位置设置为 ON,它也会返回 null【英文标题】:How getLastLocation API works internally? It returns null even if location setting is ON 【发布时间】:2017-09-13 19:26:43 【问题描述】:

我已经阅读了一些关于此的问题,但我并没有找到我需要的答案。我想了解 getLastLocation 如何在内部工作。上次已知位置缓存值如何更新?

我们需要获取设备的最后一个已知位置。谁能解释 getLastLocation 是如何工作的?我已经看到即使位置设置为 ON,getLastLocation API 也会返回 null。同时,如果我检查了谷歌地图应用程序并且它能够获取位置(当然它必须使用 requestLocationUpdates 或任何其他 API)。

在我的 Nexus-5 上,我观察到 getLastLocation 会在我启动 Google 地图应用然后再次启动我的应用后返回 null。即使在 Google 地图应用中正确检测到位置,getLastLocation API 也会返回 null。

android系统如何更新最后一个已知位置?它是否仅在某些应用程序通过 requestLocationUpdates API 请求位置时更新? 如果Android系统自动更新最后一个已知位置,为什么getLastLocation API返回null?

getLastLocation API Getting last known location

注意事项:

    已授予位置权限。

    位置设置已开启

    相同的代码在少数设备上工作,但在少数设备上失败。

    我正在尝试从 Google 的 FusedLocationProviderAPI 和 Android Framework LocationManager API 获取位置。

    我已经检查了 *** 上的所有现有问题

如果有人能解释在什么情况下 getLastLocation API 可以返回 null,即使位置设置为 ON,那就太好了。有谁知道这在内部是如何工作的?

【问题讨论】:

你能分享一些代码吗? 查看这个答案***.com/questions/20438627/… 这个问题是重复的,请检查***.com/questions/16830047/… 你有位置权限吗? 编辑了问题。在这里,问题不在于代码。我很想知道 getLastLocation 在内部是如何工作的。不同设备的行为有何不同? 【参考方案1】:

getLastLocation :此方法将为您提供设备上最后可用的位置。

在某些情况下,如果您的设备没有任何最后位置,那么它将返回 null。

您应该对当前位置使用 onLocationChanged 方法。

请看这里的例子你会得到它 https://developer.android.com/training/location/receive-location-updates.html

根据文档

公共抽象位置 getLastLocation(GoogleApiClient 客户端)

返回当前可用的最近最好的位置。

如果一个位置不可用,这应该很少发生,null 将被退回。在尊重 位置权限将被返回。

此方法提供了一种获取位置的简化方法。它是 特别适合不需要 准确的位置,并且不想维护额外的逻辑 位置更新。

希望这些对你有所帮助。

【讨论】:

是的,我同意我可以收听位置更新。这是可用的解决方案,但我很想知道为什么 getLastLocation 会返回 null,即使位置设置为 ON。你知道它在内部是如何运作的吗? 正如我上面解释的,如果您的设备没有任何最后一个位置,那么它将返回 null。仅当您的设备之前点击位置时才会获取最后位置。 对,所以我的位置设置为开启,网络可用。所有条件都满足。我正在移动。 getLastLocation 仍然返回 null。我无法理解它是如何在内部实现的。 Android 系统会自动监听位置变化来更新这个最后一个已知的缓存值吗? “在某些情况下,如果您的设备没有任何最后位置,那么它将返回 null。”:这些情况是什么?你知道在什么情况下 getLastLocation 即使设置正确也会给你 null 吗? 在我的 Nexus-5 上,我观察到 getLastLocation 即使在我启动 Google Map 应用程序然后再次启动我的应用程序之后也会返回 null。即使在 Google 地图应用中正确检测到位置,getLastLocation API 也会返回 null。

以上是关于getLastLocation API 如何在内部工作?即使位置设置为 ON,它也会返回 null的主要内容,如果未能解决你的问题,请参考以下文章

如何使用谷歌API在内部/自定义编辑器中打开和编辑共享谷歌文档?

Redux 在内部使用上下文 API 吗?

DHT TCP API 在内部使用 UDP 服务请求(扭曲)

在内部测试中使用测试数据库和 api 发布移动应用程序是不是合适?

当getLastLocation时间修复旧时如何获取位置一次

从 Settings Api 对话框打开位置后,getLastLocation() 返回 null