LocationManager 的 getLastKnownLocation 有多可靠,多久更新一次?
Posted
技术标签:
【中文标题】LocationManager 的 getLastKnownLocation 有多可靠,多久更新一次?【英文标题】:How reliable is LocationManager's getLastKnownLocation and how often is it updated? 【发布时间】:2011-09-14 22:12:28 【问题描述】:我正在构建一个可以在某些操作上使用用户当前位置的应用。位置对用户更有利,而不是流程的关键部分。我只对非常粗略的准确性感兴趣,它可能会偏离 5 甚至 10 英里,但仍然很有价值。一般计划是查看网络提供商是否已启用,然后就这样做
locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
假设没有其他应用在运行,手机会自动定期更新网络位置吗? IE。此代码可能总是会返回一个满足我需要的值?
编辑:
我一直在做更多的研究,我认为我在这里真正想问的问题是 android 操作系统或手机本身是否会更新网络提供商的最后一个已知位置,因为手机锁定在不同的位置手机信号塔或 wifi 网络。答案似乎是否定的。在强制停止我的手机上我知道与位置服务交互的所有应用程序后,最后一个已知位置已停止更新。所以,我猜现在大多数手机都有可能在后台运行一些定位服务来更新最后一个已知的位置,但手机本身不会这样做。因此,如果最后一个已知位置太旧,我想我会采用某种形式的请求位置更新。
【问题讨论】:
【参考方案1】:getLastKnownLocation() 只返回最后的修复。因此,如果没有更新位置提供程序,则 getLastKnownLocation() 的返回值不会改变。位置对象还将为您提供修复的准确性和时间。
我会查看这篇文章以获取更多信息。您可以使用某个版本的一次性拍摄位置。
http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html
【讨论】:
请注意该链接中的源代码包含错误。 LegacyLastLocationFinder.java:1) 第 95 行的 else-if 应该更新bestAccuracy
。 2)第108行:bestTime > minTime
应该是bestTime < minTime
【参考方案2】:
Frohnzie 关于 getLastKnownLocation 的说法是正确的。获取位置是一项昂贵的操作,因此仅在应用程序请求时才会发生。我经常开车 30 英里左右,打开手机上的foursquare 应用程序,它向我显示了30 英里外的金星。显然他们正在使用 getLastKnownLocation。
对于您的用例,我推荐LocationManager.requestLocationUpdates。您可以指定准确性和超时。因此,如果手机无法快速找到用户位置的粗略估计,您可以放弃位置,因为它对您的应用程序并不重要。
【讨论】:
有趣。我的网络提供商似乎每分钟左右更新一次。您的 4square 应用程序是否使用 GPS 进行更新(尽管我认为不可能知道他们为 lastKnownLocation 使用的提供商)?我正在尝试确定网络提供商更新在手机上发生的频率(没有由应用程序启动) 我发现如果我使用 requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,this) 我会每 45 秒获得一次更新。以上是关于LocationManager 的 getLastKnownLocation 有多可靠,多久更新一次?的主要内容,如果未能解决你的问题,请参考以下文章
我应该在 locationManager:didFailWithError: 中发送 [locationManager stopUpdatingLocation] 吗?
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 使用 Wi-Fi 总是返回 false
为啥 LocationManager 没有 lastKnown 位置?
locationManager.getBestProvider 返回 null
LocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) 在 Galaxy S7 上总是返回 NULL(仅限)