getLastKnownLocation() 与 requestLocationUpdates()

getLastKnownLocation() vs requestLocationUpdates()

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

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

如何完成?

我一直在研究,似乎有更好的选择来获得修复 - 使用 PendingIntent 使用 requestLocationUpdates() 获取位置更新。

那么,问题来了:

据记载,如果我 getLastKnownLocation() return 设置我的当前位置,然后我关闭我的设备并行驶 30 英里并重新打开它(当然要打开 GPS),getLastKnownLocation() 会 return 我到 30 英里以前的位置。

但是,我对 return 由 requestLocationUpdates() 编辑的位置感到困惑。它会 return 新位置吗?

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

requestLocationUpdates 将 return 立即不执行任何操作,并且 return 回调中的位置。它永远不会 return null。它将打开定位硬件和软件,并在位置发生变化时向您发送更新。如果由于某种原因它无法获得位置修复(飞行模式,在隧道中并且无法到达 gps 卫星等),它可能永远不会调用回调。只要您需要不断获取位置更新,就应该使用它。

requestSingleUpdate 与requestLocationUpdates 类似,只不过它只会调用一次回调,然后再次关闭位置跟踪。当您现在只需要位置而不关心更新时,应该使用它。