LocationManager的getLastKnownLocation方法有多可靠?它更新的频率是多少?

11

我正在开发一个应用程序,可以在某些操作中使用用户当前的位置。位置对用户来说更多是一种好处,而不是过程的关键部分。我只对非常粗略的准确性感兴趣,即使偏差5或者10英里,仍然有价值。我的一般计划是查看网络提供程序是否启用,然后只需执行

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
假设没有其他应用程序在运行,手机会自动定期更新网络位置吗?也就是说,这段代码可能始终会返回一个符合我的需求的值吗?
编辑:
我进行了更多的研究,我认为我真正想问的问题是Android操作系统或手机本身是否会更新网络提供程序的上次已知位置,当手机锁定不同的手机基站或Wi-Fi网络时。答案似乎是否定的。在强制停止我知道与位置服务交互的所有应用程序之后,上次已知位置停止更新。所以,我猜现在大部分手机都会有一些在后台运行的位置服务来更新上次已知位置,但手机本身不会这样做。因此,如果上次已知位置太旧,我想我将使用某种形式的请求位置更新。
2个回答

11

getLastKnownLocation()只返回最后的位置信息。所以,如果没有任何位置提供者在更新,则getLastKnownLocation()的返回值将不会改变。该位置对象还会提供有关修复的准确度和时间。

我建议查看此帖子获取更多信息。您可以使用某个版本的一次性定位。

http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html


4
请注意,该链接中的源代码存在错误。LegacyLastLocationFinder.java: 1)第95行的else-if应该更新“bestAccuracy”。2)第108行:“bestTime > minTime”应改为“bestTime < minTime”。 - Nilzor
链接已于2022年5月15日失效。 - user1644002

4
Frohnzie关于getLastKnownLocation是正确的。获取位置是一项昂贵的操作,因此只有在应用程序请求时才会发生。我经常开车30英里左右,在手机上打开foursquare应用程序,它向我显示了30英里外的地点。显然,他们正在使用getLastKnownLocation。
对于您的用例,我建议使用LocationManager.requestLocationUpdates。您可以指定精度和超时时间。因此,如果手机无法快速找到用户位置的粗略估计,您可以放弃位置,因为这对您的应用程序不是关键。

有趣。我的网络提供商似乎每隔一分钟就会更新一次。你的4square应用程序是否使用GPS来更新(虽然我想知道它们使用哪个提供商来获取最后已知位置是不可能的)?我正在试图确定手机上网络提供商的更新频率(在没有应用程序发起的情况下)。 - Chris Knight
我发现如果我使用requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,this),我会每45秒收到一次更新。 - Frohnzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接