【问题标题】:Does Location Services' `getLastKnownLocation()` check phone's current GPS location?定位服务的 `getLastKnownLocation()` 是否检查手机当前的 GPS 位置?
【发布时间】:2015-08-23 00:47:39
【问题描述】:

一些资源说getLastKnownLocation() 只是给出了一些以前应用的位置更改侦听器的位置。

但我觉得谈话中缺少一件事——如果手机启用了 GPS,这不是随着手机移动而进行 GPS 跟踪/更新吗?那么如果我拨打getLastKnownLocation(),是不是从手机不断更新的GPS中获取当前的GPS?

如果是这样,那么为什么人们会警告不要使用它/指责它可能会获得“陈旧”的位置?如果 GPS 正在被跟踪/更新,并且getLastKnownLocation() 一次性抓取了它的当前位置,那么是什么让getLastKnownLocation() 不好?

我对@9​​87654325@ 服务或 GPS 有什么误解?

【问题讨论】:

    标签: android gps geolocation


    【解决方案1】:

    documentation 说:Returns a Location indicating the data from the last known location fix obtained from the given provider.

    另外,关于“过期位置”:This can be done without starting the provider. Note that this location could be out-of-date, for example if the device was turned off and moved to another location.(“This”指的是获取最后一个已知位置)。

    另外,取自LocationProvider docsEach provider has a set of criteria under which it may be used; for example, some providers require GPS hardware and visibility to a number of satellites; others require the use of the cellular radio, or access to a specific carrier's network, or to the internet. They may also have different battery consumption characteristics or monetary costs to the user.

    如果手机启用了 GPS,这不是在手机移动时进行 GPS 跟踪/更新吗?

    嗯,它是,但不是经常。这与电池消耗有关,如果手机不断更新GPS位置,电池寿命会受到很大影响。 GPS 位置通常在某些应用程序请求时更新。但即使是该请求也不能保证成功。例如,假设您进入隧道。一些应用程序请求在进入隧道之前更新 GPS 坐标并且它成功了。现在,您已经进入了 5 公里长的隧道。很可能您的设备将无法从隧道获得 GPS 定位,因此对于接下来的 5 公里(至少)getLastKnownLocation() 将返回一个过时的值,因为设备最后一个已知位置位于隧道

    您可以做的是明确请求更新 GPS 位置,但这可能需要一些时间,并且不能保证它会成功。

    【讨论】:

    • The GPS location is usually updated when some app requests it - getLastKnownLocation() 没有请求它,因此告诉它更新?那么它如何/何时更新?
    • Android 教程中的替代方法是实现LocationListener - 但所有这些都会在 GPS 更新时进行回调 - 它本身并不是在更新 GPS。那么使用LocationListener(唯一提到的获取GPS的其他选项)比只调用getLastKnownLocation()更好吗?文档使它看起来实际上并没有更新 GPS - getLastKnown 只是抓取最后一次 GPS 读取的内容,LocationListener 为您提供了一种在 GPS 更新时被告知的方法。顺便说一句,感谢您抽出时间帮助我。
    • getLastKnownLocation() 只是获取最后一个已知位置,它不会更新它。当某些应用程序说“嘿 Android,请更新 GPS 位置”时,它会更新。当一些应用程序调用getLastKnownLocation() 时,它基本上是在说:“嘿,Android,你能告诉我最近的已知位置是什么吗?”,它不会要求更新位置。 “最近的已知位置”存储在 Android 操作系统的某个位置。
    • 如果您想说:“嘿,Android,请更新 GPS 位置”,请按照本教程操作:LocationStrategies。向下滚动到显示Requesting Location Updates 的位置,这里有一个代码示例和您在第二条评论中所问的确切内容的解释。
    • fyi - 我正在尝试继续使用 Google Play 定位服务的方式——我认为使用 Google Play 定位服务不会使您的信息无效?链接顶部给出了有关其内容的警告,并建议使用 Location Services
    【解决方案2】:

    您有这样的假设:“如果手机启用了 GPS,这不是在手机移动时进行 GPS 跟踪/更新”。这个假设是不正确的。 GPS 功能会占用大量电池寿命,因此应谨慎使用,而且几乎可以肯定不是一直使用。

    【讨论】:

    • 我正在考虑实现LocationListener 和检查更新之间的区别,而只是调用getLastKnownLocation()。如果我错了,请纠正我:getLastKnownLocation() 只是抓取 GPS 当前认为的位置,而实施LocationListener 可以让您在 GPS 获得新的位置读数时收到警报(压倒一切方法 + 监听)。但是它们本身并没有告诉 GPS 更新——它们都只能通过读取 GPS 给它们的内容来工作,第一个按需执行一次,另一个会收到任何更改的警报。都正确吗?
    • "getLastKnownLocation() 只是抓取 GPS 当前认为位置 i" 不正确的任何内容。只有当LocationProvider 恰好正在运行或最后运行时,它才会获得最后一个位置。我认为@ILUXONCHIK 很好地解释了有关提供商的更多信息。
    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多