我很惊讶,想请您原谅,但找不到关于两者之间根本区别的明确答案。所以,这是我的要求:
我想每5分钟捕获一次用户的位置。对于一般的调度,我使用JobScheduler并在后台执行所有工作。因此,我正在使用每5分钟安排一次的工作来完成上述任务。
我该怎么做?
LocationManager.getLastKnownLocation()
来与其他提供商(GPS,网络)进行修复我一直在研究,似乎可以找到一个更好的解决方法-使用PendingIntent
通过requestLocationUpdates()
获取位置更新。
所以,这是问题所在:
据记录,如果我getLastKnownLocation()
返回我的当前位置,然后我关闭设备并开车30英里然后重新打开(当然启用了GPS),getLastKnownLocation()
将会返回我比原来位置早30英里。
但是,我对requestLocationUpdates()
返回的位置感到困惑。它会返回新位置吗?
答案 0 :(得分:4)
getLastKnownLocation仅在位置已打开时将返回位置。它将立即返回。 99%的时间它将返回null。它不会打开位置硬件或软件。可以将其用作优化,但绝不能依赖它。除非您确定自己在做什么,否则应该忘记此功能的存在。
requestLocationUpdates将立即不返回任何内容,并在回调中返回一个位置。它永远不会返回null。它将打开位置硬件和软件,并在位置更改时向您发送更新。如果由于某种原因它无法获得定位信息(飞机模式,在隧道中并且无法到达卫星以获取GPS等),它可能永远不会调用回调。每当您需要不断获取位置更新时,都应该使用它。
requestSingleUpdate与requestLocationUpdates一样,只是它只会调用一次回调,然后再次关闭位置跟踪。如果您现在只想知道位置,而不在乎更新,则应该使用它。