我正在开发一个按需位置提供解决方案,但我发现文档对我来说太混乱了,无法找到最有效的解决方案。
到目前为止我所理解的是:
LocationManager.getLastKnownLocation()
基本上是一种捎带方法。如果没有其他应用启用了位置,则您的应用不会返回位置。
LocationManager.requestLocationUpdates()
,我知道这基本上为位置更新设置了一个监听器。所谓的实际方法是" OnLocationChanged()
"听众从技术上讲,您可以将位置显示代码放在" onLocationChanged" ...
如果是这样的话......我如何获得更新的位置?我不想在每次更新位置时更新。我希望按需定位,而不是每次更新。我该如何实现呢?
===
我目前的猜测是......一旦你设置了监听器,每当你调用" getLastKnownLocation"时,它将是你的监听器创建的更新的监听器。真的吗?那是怎么回事?
答案 0 :(得分:1)
如果您关闭手机上的位置,然后将其打开,则最后知道的位置将返回null。
现在开始获取新位置的实际方法是方法
requestLocationUpdates()
这将更新
getLastKnownLocation()
并且在调用requestLocationUpdates()时,
onLocationChanged(Location location)
将调用来调用您需要对位置对象执行的操作。
因此,在此方法中,您可以管理新的位置/位置更改。
答案 1 :(得分:0)
如果您只想要一个位置,并且只有在您打电话时,请使用requestSingleUpdate()
。查看有关它的文档here。请注意,如果您使用GPS和建筑物内部,可能需要一段时间才能返回位置更新。
答案 2 :(得分:0)
如果您能够使用上面的评论中显示的GoogleApiClient,那么Max kpd(How do I get the current GPS location programmatically in Android?)可能是最佳选择。
如果您不想依赖Google API,我建议您使用这两个选项来改善用户体验。初始呼叫可能是也可能不是空的,但也可能是或可能不是前一段时间。最初,我会调用 getLastKnownLocation ,如果它返回一些内容,请在您的应用中使用它,更新/初始化界面。
同时,如果您只想要1,请使用 requestSingleUpdate 请求位置更新;如果您想要重复更新,则 onLocationChanged requestLocationUpdates >在您的侦听器中触发,更新您在应用中使用的位置以及受其影响的界面中的任何内容。