我正在构建一个可以在某些操作中使用用户当前位置的应用。位置更有利于用户,而不是流程的关键部分。我只对非常粗略的准确性感兴趣,它可能会偏离5英里甚至10英里,仍然具有价值。一般计划是查看网络提供商是否已启用,然后执行
locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
假设没有其他应用正在运行,手机会自动定期更新网络位置吗?即这个代码可能总会返回一个符合我需求的值吗?
编辑:
我一直在做更多的研究,我认为我在这里真正要问的问题是,如果手机锁定到不同的Android操作系统或手机本身会更新网络提供商的最后一个已知位置手机塔或wifi网络。答案似乎是否定的。强制停止手机上我知道与位置服务交互的所有应用程序后,最后一个已知位置已停止更新。所以,我猜这些天有可能大多数手机都会在后台运行一些位置服务来更新最后一个已知位置,但手机本身不会这样做。因此,如果最后一个已知位置太旧,我想我会采用某种形式请求位置更新。
答案 0 :(得分:11)
getLastKnownLocation()仅返回上次修复。因此,如果没有更新位置提供程序,则getLastKnownLocation()的返回值不会更改。位置对象还将为您提供修复的准确性和时间。
我会查看这篇文章以获取更多信息。您可以使用单拍位置的某个版本。
http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html
答案 1 :(得分:4)
Frohnzie关于getLastKnownLocation是正确的。获取位置是一项昂贵的操作,因此只有在应用程序请求它时才会发生。我经常驾驶30英里左右,在我的手机上打开了foursquare应用程序,它向我展示了30英里外的金星。显然他们使用的是getLastKnownLocation。
对于您的用例,我建议LocationManager.requestLocationUpdates。您可以指定准确性和超时。因此,如果手机无法快速找到用户位置的粗略估计,您可以放弃位置,因为它对您的应用程序并不重要。