getLastKnownLocation()vs requestLocationUpdates()

时间:2018-10-06 14:26:27

标签: android location

我很惊讶,想请您原谅,但找不到关于两者之间根本区别的明确答案。所以,这是我的要求:

我想每5分钟捕获一次用户的位置。对于一般的调度,我使用JobScheduler并在后台执行所有工作。因此,我正在使用每5分钟安排一次的工作来完成上述任务。

我该怎么做?

我一直在研究,似乎可以找到一个更好的解决方法-使用PendingIntent通过requestLocationUpdates()获取位置更新。

所以,这是问题所在:

据记录,如果我getLastKnownLocation()返回我的当前位置,然后我关闭设备并开车30英里然后重新打开(当然启用了GPS),getLastKnownLocation()将会返回我比原来位置早30英里。

但是,我对requestLocationUpdates()返回的位置感到困惑。它会返回新位置吗?

1 个答案:

答案 0 :(得分:4)

getLastKnownLocation仅在位置已打开时将返回位置。它将立即返回。 99%的时间它将返回null。它不会打开位置硬件或软件。可以将其用作优化,但绝不能依赖它。除非您确定自己在做什么,否则应该忘记此功能的存在。

requestLocationUpdates将立即不返回任何内容,并在回调中返回一个位置。它永远不会返回null。它将打开位置硬件和软件,并在位置更改时向您发送更新。如果由于某种原因它无法获得定位信息(飞机模式,在隧道中并且无法到达卫星以获取GPS等),它可能永远不会调用回调。每当您需要不断获取位置更新时,都应该使用它。

requestSingleUpdate与requestLocationUpdates一样,只是它只会调用一次回调,然后再次关闭位置跟踪。如果您现在只想知道位置,而不在乎更新,则应该使用它。